Mathematica教程4

2018-11-21 23:07

6.2微分方程的数值解 在Mathematica中用函数DSolve[]得到微分方程的准确解,用函数NDSolve得到微分方程

的数值解,当然在此处要给出求解区间(x,xmin,xmax)。

NDSolve也是既能计算单个的微分方程,也能计算联立微分方程组。它能对大多数的常微分方程和部分偏微分方程求解。在常微分可能有一些未知函数yi,但这些未知函数都依赖于一个单变量x。

NDSolve[{eqn1,eqn2,?},y,{x,xmin,xmax}]求函数y的数值解,x属于[xmin,xmax] NDSolve[{eqnl,eqn2,?},{y1,y2,?}{x,xmin,xmax}]求多个函数yi的数值解

NDSolve以InterpolatingFunction 目标生成函数yi的解,InterpolatingFunction目标提供在独立变量x的xmin到xmax范围内求少的近似值。NDSolve用迭代法求解,它以某一个x值

开始,尽可能覆盖从xmin到xmax的全区间。

为使迭代开始,NDSolve指定yi及其导数为初始条件。初始条件给定某定点x处的yi[x]及尽可能的导数y'i[x],一般情况下,初始条件可在任意x处,NDSolve将以此为起点自动覆盖xmin

到xmax的全区域。 下面对初始条件y[0]=0和y[1]=0分别求出x从0到1的范围内y’[x]=y[x]的解。

再看下面的微分方程的数值解

使用Mathematica页可以很容易的得到解的图形。这儿给出如何观察微商的逆函数的近似值图形。我们使用命令Evaluate代替InterpolatingFunction能够节省时间。

例如:

7.1模块和块中的变量 前面我们学习了有关Mathematica的各种基本运算及操作,为了使Mathematica更有效的工作,我们可对Mathematica进行模块化运算。在模块内部通过编写一系列表达式语句,使其实现一定的功能。在Mathematica内部也提供了很多程序包,我们将学习如何调用它们。

一般情况下,Mathematica假设所有变量都为全局变量。也就是说无论何时你使用一个你定义的变量,Mathematica都假设你指的是同一个目标。然而在编制程序时,你则不会想把所有的变量当作全局变量,因为如果这样程序可能就不具有通用性,你也可能在调用程序时陷入混乱状态。给出定义模块或块和局部变量的常用 形式:

Module[{x,y,...},body] 具有局部变量x,y?的模块 Module[{x=x0,y=y0,?},body] 具有初始值的局部变量的模块 lhs:=Module[vars,rhs/:cond] rhs和cond共享局部变量 },body]运用局部值x,y, ?计Block[{x,y,... 算body Block[{x=x0,y=y0,?},bddy] 给x,y,..赋初始值 Mathematica中的模块工作很简单,每当使用模块时,就产生一个

新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先我们来看Module函数,这个函数的第一部分参数,里说明的 变量只在Module内起作用,body执行体,包含合法的Mathematica语句,多个语句之间可用“ ;”分割下面定义有初值的变量t,Mathematica默认它为全局变量:

ln[1]:=t=lO

Out[1]=10

模块中的t为局部变量,因此它独立于全局变量t

ln[2]:=Module[{t},t=8;Print[t]]

全局变量t的值仍为10:

ln[3]=t=lO

Out[3]=10

下面定义函数中的中间变量t为局部变量并调用f:

全局变量t的值仍为10:

ln[6]:=t=10 Out[6]=10

我们可以对模块中的任意局部变量进行初始化,这些初始值总是在模块执行前就被计算出来。下面给局部变量t赋初值u:调用函数g;

Mathematica中的模块允许你把某变量名看作局部变量名。然而又存在有时你又希望它们为全局变量时,但变量值为局部的矛盾,这时我们可以用Block[]函数。下面是一个含有全局变量x表达式,使用x的局部值计算上面的表达式:


Mathematica教程4.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:物理化学课件及考试习题 试卷 答案第6章 相平衡习题及解答

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: