mather

更新时间:2022-12-31 10:20:37 阅读: 评论:0


2022年12月31日发(作者:何江 哈佛)

文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。

Iword格式支持编辑,如有帮助欢迎下载支持。

Mathmatica4.0使用说明

Mathmatic概述..........................................................错误!未定义书签。

1、Mathmatic的特点............................................................错误!未定义书签。

2、Mathmatic运行和基本操作............................................错误!未定义书签。

初等数学.....................................................................错误!未定义书签。

1、数值计算...........................................................................错误!未定义书签。

2、数学函数和常数...............................................................错误!未定义书签。

3、符号运算...........................................................................错误!未定义书签。

微积分.........................................................................错误!未定义书签。

1、极限、微分和积分...........................................................错误!未定义书签。

2、函数的幂级数展开...........................................................错误!未定义书签。

3、微分方程...........................................................................错误!未定义书签。

线性代数.....................................................................错误!未定义书签。

1、构造矩阵...........................................................................错误!未定义书签。

2、矩阵运算...........................................................................错误!未定义书签。

数据拟合与优化.........................................................错误!未定义书签。

1、数据拟合...........................................................................错误!未定义书签。

2、数据优化...........................................................................错误!未定义书签。

绘图与声音.................................................................错误!未定义书签。

1、平面图形...........................................................................错误!未定义书签。

2、立体图形...........................................................................错误!未定义书签。

3、声音...................................................................................错误!未定义书签。

编程.............................................................................错误!未定义书签。

1、条件控制...........................................................................错误!未定义书签。

2、循环控制...........................................................................错误!未定义书签。

3、简单例子...........................................................................错误!未定义书签。

综合实例.....................................................................错误!未定义书签。

1、最速降线...........................................................................错误!未定义书签。

2、追逐线...............................................................................错误!未定义书签。

3、验证歌德巴赫猜想...........................................................错误!未定义书签。

1

Mathmatic概述

进行高等数学中的各种运算是Mathematica的主要功能.Mathematica可进行微

积分、线性代数和工程数学中的许多运算.特别是其符号运算能力,令人惊叹.现

在Mathematica已受到越来越多科技工作者的欢迎和使用。

1、Mathmatic的特点

(1)内容丰富,功能齐全Mathematica能够进行初等数学,高等数学、工程数学等

的各种数值计算和符号运算.特别是其符号运算功能,给数学公式的推导带来极

大的方便.它有很强的绘图能力,能方便的画出各种美观的曲线、曲面,甚至可以

进行动画设计.

(2)语法简练,编程效率高Mathematica的语法规则简单语句精练.和其它高级语

言(如C,Fortran语言)相比,其语法规则和表示方式更接近数学运算的思维和表达

方式.用Mathematica编程,用较少的语句,就可完成复杂的运算和公式推导等任

务.

(3)操作简单,使用方便Mathematica命令易学易记,运行也非常方便.用户既可以

和Mathematica进行交互式的“对话”,逐个执行命令.也可以进行“批处理”,

将多个命令组成的程序,一次性地交给Mathematica,完成指定的任务.

(4)和其它语言交互Mathematica和其它高级语言,如C,Fortran语言等能进行

简单的交互.可以调用C,Fortran等的输出并转化为Mathematica的表示形式,也可

以将Mathematica的输出转化为C,Fortran语言和Tex编译器(注:Tex是著名的数

学文章编辑软件,用它打印出的文章,字体漂亮、格式美观)所需的形式.甚至还可

以在C语言中嵌人Mathematica的语句.这使Mathematica编程更灵活方便增强

了Mathematica的功能.

2、Mathmatic运行和基本操作

Mathematica有各种版本(Dos版本,Windows版本,Unix版本和网络环境下的版

2

本),在此以Windows版本为例介绍其使用方法.

当安装好Mathematica后,在Windows界面中就会产生Mathematica的图标,用

鼠标双击之,就可以进入Mathematica的工作环境.此时便可以输入Mathematica

的命令了.

(1)命令的输入和运行

例如:要计算28,输入

2^8

然后同时按下Shift和Return键,或小键盘的Return键,就执行运算并得到结

果.此时屏幕显示为:

In[1]:=2^8

out[1]=256

其中In[1]:=是Mathematica自动加上的,表示第一个输入.

Out[1]=表示第一个输出.按照同样的方式,接下来可继续输入一个命令,并运

行之

….这种一问一答的方式称为“对话”,式的计算,是常用的方式.Mathematica还

提供“批处理”的运行方式,即将多个命令组成的程序,一次性地交给Mathematica

进行处理,完成指定的运算.

例如:画出曲线y=x2和直线x+y=2在区间[-4,4]的图形,并求二曲线的交点,输

入指令

Plot[{x^2,2-x},{x,-4,4}],则输出图:

再输入指令Solve[{y==x^2,x+y==2}],则得到结果

{{y->1,x->1},{y->4,x->-2}}

(2)程序的保存和调用

若要将整个程序保存下来,并且希望下次工作时继续以前的计算,可直接进

3

行菜单操作,类似Word的操作.文件的扩展名为nb

Mathematica的数值计算可得到两种结果:精确值和近似值.

当能求出精确值时Mathematica都给出精确值,要想得到近似值,可以使用两种

方法:

一是使用小数点;二是使用Mathematica的近似函数:

N[expr]或expr//N--------expr的近似值(精度为6位)

N[expr,n]------------------n位精度的expr的近似值.

其中expr是算术表达式.

下面给出一些运算的例子.我们从中可比较不同类型的输入和输出.

In[1]:=(8*(4+6-2^(5-2)))/3

Out[1]=16/3

其中,*代表乘号,^代表乘幂运算.括号必须使用圆括号.

In[2]:=2^100

Out[2]=1267650…76(共31位)

In[3]:=2.^100

Out[3]=1.26765×1030

In[4]:=2/7+1/3

Out[4]=13/21

In[5]:=2./7+1/3

Out[5]=0.619048

In[6]:=2/7+1/3//N

Out[6]=0.619048

In[7]:=N[2/7+1/3,40]

Out[7]=0.619048…9(小数点后共40位)

Mathematica还可以进行复数运算,例如:

In[8]:=(4+3I)/(2-I)

Out[8]=1+2I

其中I代表虚单位.

In[9]:=Sqrt[-16]

4

Out[9]=4I

其中Sqrt是平方根函数.

在运算中,用户常常需要使用已计算出的结果.这可用下述方式实现:

%-------------前面倒数第一个输出结果

%%-----------前面倒数第二个输出结果

%n------------前面第n个输出结果Out[n]

例:

In[10]:=%+7+2I(%代表输出9,即4I)

Out[10]=7+6I

In[11]:=%*%%(%代表7+6I,%%代表4I)

Out[11]=-24+28I

In[12]:=%4+1/2(%4代表13/21)

Out[12]=47/42

初等数学

1、数值计算

Mathematica的数值计算可得到两种结果:精确值和近似值.

当能求出精确值时Mathematica都给出精确值,要想得到近似值,可以使用两种

方法:

一是使用小数点;二是使用Mathematica的近似函数:

N[expr]或expr//N--------expr的近似值(精度为6位)

N[expr,n]------------------n位精度的expr的近似值.

其中expr是算术表达式.

下面给出一些运算的例子.我们从中可比较不同类型的输入和输出.

In[1]:=(8*(4+6-2^(5-2)))/3

Out[1]=16/3

其中,*代表乘号,^代表乘幂运算.括号必须使用圆括号.

In[2]:=2^100

5

Out[2]=1267650…76(共31位)

In[3]:=2.^100

Out[3]=1.26765×1030

In[4]:=2/7+1/3

Out[4]=13/21

In[5]:=2./7+1/3

Out[5]=0.619048

In[6]:=2/7+1/3//N

Out[6]=0.619048

In[7]:=N[2/7+1/3,40]

Out[7]=0.619048…9(小数点后共40位)

Mathematica还可以进行复数运算,例如:

In[8]:=(4+3I)/(2-I)

Out[8]=1+2I

其中I代表虚单位.

In[9]:=Sqrt[-16]

Out[9]=4I

其中Sqrt是平方根函数.

在运算中,用户常常需要使用已计算出的结果.这可用下述方式实现:

%-------------前面倒数第一个输出结果

%%-----------前面倒数第二个输出结果

%n------------前面第n个输出结果Out[n]

例:

In[10]:=%+7+2I(%代表输出9,即4I)

Out[10]=7+6I

In[11]:=%*%%(%代表7+6I,%%代表4I)

Out[11]=-24+28I

In[12]:=%4+1/2(%4代表13/21)

Out[12]=47/42

6

2、数学函数和常数

Mathematica提供了大量的数学函数,给运算带来很大方便.下面列出一些常

用的函数.

函数形式功能

Sqrt[x]

平方根

Exp[x]

指数函数ex

Log[x],Log[b,x]

对数函数Lnx,Logbx

Sin[x],Cos[x],Tan[x]

三角函数

ArcSin[x],ArcCos[x],ArcTan[x]

反三角函数

Sinh[x],Cosh[x],Tanh[x]

双曲函数

n!,n!!

阶乘,双阶乘

Binomial[n,m]

组合数Cnm

Abs[x]

绝对值

Sign[x]

符号

Round[x]

四舍五入取整

Floor[x]

取不超过x的最大整

Mod[n,m]

n/m的余数

Random[],Random[Integer,{m,n}],

Random[Real,{a,b}],

均匀分布随机数

Max[x,y,…],Min[x,y,…]最大值,最小值

Sum[ai,{i,imin,imax}],

求和

Product[ai,{i,imin,imax}]

求积

Abs[z],Arg[z]

模,辐角

Re[z],Im[z]

实部,虚部

Conjugate[z]

共轭复数

注:Mithematica提供的函数,其名称中的字母大小写是固定的(特别开头字

7

母均为大写),不得误用;函数的自变量以方括号[]括起来.

Mathemaica还提供了许多数学常数,下面列出了一些常数(均以大写字母开

头).

Pi-------------------π;E---------------------e

I----------------------;Infinity--------------∞

函数和常数均可参与运算,下面是一些运算的例子.

In[l]:=Pi^2

Out[1]=π2

In[2]:=N[Pi,11]

Out[2]=3.35

In[3]:=Log[E^8]

Out[3]=8

In[4]:=Sin[Sqrt[%1]/6]

Out[4]=1/2

用户不仅可以使用Mathemaica提供的函数和常数,还可以自定义函数和常

数.方法如下:

形式功能

f[x_]:=expr-------------定义函数f

f[x_,y_]:=expr-----------定义多变量的函数f

?f------------------------显示函数的定义

Clear[f]-----------------清除f的定义

x=value-------------给变量x赋值

x=.清除变量x的值

注:定义函数时,在等式左端的方括号中的变量必须跟随下到线符号“_”;

定义的函数或变量的名称不要使用大写字母开头,以免和Mathemaica的函数

或常数混淆.

例:

In[1]:=f[x_]:=x^5;f[x_,y_]:=Sqrt[x^2+y^2];z=3;

其中输入语句后的分号“;”表示不显示输出结果,定义了函数、变量以后,

8

便可以在运算中使用.

In[4]:=f[2]

Out[4]=32

In[5]:=f[1+b]

Out[5]=(1+b)2

In[6]:=g[z,4]

Out[6]=5

如果忘记了已定义的函数的内容,可以使用?f查询f的定义.当函数或变量

使用完以后,最好将其清除,以免带来麻烦.

3、符号运算

Mathematica提供了大量的数学函数,给运算带来很大方便.下面列出一些常

用的函数.

符号运算即代数式的运算.它是Mathemaica的重要功能.下面简介符号运算

的主要功能.

(1)符号赋值

Mathemaica不仅可以把一个常值赋给一个符号,还可以把一个表达式赋给一

个符号.其规则如下:

x=value--------------------将value赋给x

x=.-----------------------清除赋给x的值

expr/.x->value-------------用value替换expr中的x

expr/.{x->xvalue,y->yvalue}----------用xvalue,yvalue分别替换expr中的x,y.

例:

In[1]:=t=l+x

Out[1]=1+x

In[2]:=l-t^2

Out[2]=1-(1+x)2

In[3]:=t=.

Out[3]=1-(1+x)2

9

In[4]:=l-t^2

Out[4]=1-t2

In[5]:=%2/.x->2

Out[5]=-8

(2)代数式变换

Mathernatica提供了许多进行代数式变换的一些函数,下面列出常用的函数.

Expand[expr]-----------------------展开expr

ExpandAll[expr]--------------------展开expr的分子、分母

Factor[expr]-------------------------对expr进行因式分解

Together[expr]----------------------对expr进行通分

Apart[expr]---------------------将expr分解为简单分式

Cancel[expr]----------------------消去expr的分子、分母的公因式

Simplify[expr]--------------------把expr化为最少项形式

例:In[1]:=t=(x-1)^2(2+x)/((1+x)(x-3)^2),

In[2]:=Expand[t](展开分子,分母不变)

In[3]:=ExpandAll[t](展开分子、分母)

In[4]:=Together[%](通分)

In[5]:=Apart[%](化为部分分式)

In[6]:=Factor[%](分解因式)

In[7]:=Simplify[%5](将表达式化简)

除了上述常用的变换外,Mathematica还可以进行许多种类型的变换.下面再

看一些例子.

In[8]:=Expand[2Cos[x]^3*Sin[2x]^2,Trig->True](展开三角函数)

Out[8]:=

In[9]:=Factor[%,Trig->True]

Out[9]=8Cos[x]5Sin[x]2

In[10]:=ComplexExpand[Sin[x+y*I]](展开复函数)

Out[10]:=Cosh[y]Sin[x]+ICos[x]Sin[y]

In[11]:=s=Expand[(x+y)^3];

10

In[12]:=Coefficient[s,x^2](取出s中x^2项的系数)

Out[12]=3y

In[13]:=Numerator[%1](取出%1中的分子)

Out[13]=(-1+x)2(2+x)

In[14]:=Denominator[%1](取出%1中的分母)

Out[14]=(-3+x)2(1+x)

Mathematica还允许用户自己定义变换规则,例如:

In[15]:=mysin=Sin[2*x_]->2Sin[x]Cos[x];

In[16]:=Sin[2*(x+y)^2]/.mysin

Out[16]=2Cos[(x+y)2]Sin[(x+y)2]

总之Mathematica进行变换的功能是非常强的.

(3)解方程

Mathematica可以用多种方法求解符号方程.下面列出主要的解法:

Solve[equ,vars]-------------------求方程的一般解

Reduce[equ,vars]-----------------求方程的全部解

NSolve[equ,vars]----------------求方程的数值解

FindRoot[equ,{x,a}]--------------求方程在a附近的数值解

其中,equ是待求解的方程,var是未知量.

例In[1]:=Solve[a*x+b==0,x]

注:方程中,等号必须用“==”

Out[1]={{x->-b/a}}

In[2]:=Reduce[a*x+b==0,x]

Out[2]=a==0&&b==0||x==-b/a&&a!=0

使用Reduce给出了a!=0时的解和a=0,b=0时的解,(此时x为任意值).

对四次及四次以下的代数方程,Mathematica总能给精确解.四次以上的方

程,若能分解因式,亦可给出精确解.

In[3]:=Solve[x^3+3x^2+3x+2==0,x]

Out[3]=

当求不出精确解时,Mathemaica以符号形式给出结果

11

In[4]:=x^5+5x+1==0;

In[5]:=Solve[%4,x]

Out[5]=

上述方程求不出精确解,此时可求数值解.

In[6]:=NSolve[%4,x]

Out[6]=

如果要求在某点附近的数值解,使用FindRoot

In[7]:=FindRoot[x*Sin[x]==1/2,{x,1}]

Out[7]={x->0.740841}

使用Solve还可以求解方程组.

1n[8]:=Solve[{x^2+y^2==1,x+y==a},{x,y}]

Out[8]=

微积分

1、极限、微分和积分

微积分等主要运算:

12

例In[1]:=D[Sin[x^2],x]

Out[1]=2xCos[x2]

In[2]:=D[x^n,{x,3}]

Out[2]=

In[3]:=D[y^3*Log[x+y],x,y]

Out[3]=

也可以求出抽象函数的导数

In[4]:=D[x*f[x^5],x]

Out[4]=

求不定积分,对Mathematica而言易如反掌

In[5]:=Integrate[1/(x^4-1),x]

Out[5]=

可以验证

In[6]:=Simplify[D[%,x]]

13

Out[6]=

求定积分

In[7]:=Integrate[Log[x],{x,a,b}]

Out[7]=a-b-aLog[a]+bLog[b]

也可以通过File->Palettes->BasicCalculations输入

In[8]:=

Out[8]=a-b-aLog[a]+bLog[b]

In[9]:=Integrate[x*x+y*y,{x,0,1},{y,0,Sqrt[1-x*x]}]

Out[9]=

2、函数的幂级数展开

Mathematica作幂级数展开可达到任意精度。进行幂级数展开,使用下述函数:

Series[expr,{x,x0,n}]-------------expr在x=x0点的n阶幂级数展开式

Normal[ries]---------------------去掉展开式的余项

In[1]:=Series[Log[1+x],{x,0,5}]

Out[1]=

In[2:=Normal[%]

Out[2]=

抽象函数展开

In[3]:=Series[f[x],{x,0,4}]

Out[3]=

3、微分方程

求解微分方程与代数方程类似,导数用单引号表示

DSolve[equ,y[x],x]----------------------解y[x]的微分方程

14

DSolve[equ,{x[t],y[t]},t]---------------解自变量为t的微分方程组

In[1]:=DSolve[y’[x]==a*y[x],y[x],x]

Out[1]=

如给出初始条件,就明确了待定常数

In[2]:=DSolve[{y’[x]==a*y[x],y[0]==2},y[x],x]

Out[2]=

In[3]:=DSolve[{y”[x]+y[x]==1,y[0]==2,y’[0]==5},y[x],x]

Out[3]=

In[4]:=DSolve[{y’[t]==x[t],x’[t]==y[t],x[0]==1,y[0]==2},{x[t],y[t]},t]

Out[4]=

线性代数

1、构造矩阵

{{a11,…,a1n},{a21,…,a2n},…,{am1,…,amn}}---------构造m×n矩阵

Table[f[i,j],{i,m},{j,n}]--------------------------------构造m×n矩阵

Array[f,{m,n}]---------------------以f[i,j]为元素,构造m×n矩阵

DiagonalMatrix[{a1,a2,…,an}]---------------------构造n阶对角矩阵

IdentityMatrix[n]-----------------------------------构造n阶单位矩阵

Table[If[i>=j,f[i,j],0],{i,m},{j,n}]-------------------构造下三角矩阵

m[[i,j]]---------------------------------------------取矩阵m的元素m(i,j)

m[[i]]---------------------------------------------取矩阵m的第i行

Transpo[m][[k]]------------------------------取矩阵m的第k行

例In[1]:={{a,b},{c,d}}

Out[1]={{a,b},{c,d}}

如果希望得到矩阵形式,可使用函数MatrixForm

In[2]:=MatrixForm[%]

15

Out[2]=//MatrixForm=

In[3]:=Table[3*(i-1)+j,{i,3},{j,3}]

Out[3]={{1,2,3},{4,5,6},{7,8,9}}

In[4]:=MatrixForm[DiagonalMatrix[{a,b,c}]]

Out[4]=//MatrixForm=

In[5]:=p=Array[a,{2,3}]

Out[5]=

取出第2行

In[6]:=p[[2]]

Out[6]={a[2,1],a[2,2],a[2,3]}

取出第3列

In[7]:=Transpo[p][[3]]

Out[7]={a[1,3],a[2,3]}

2、矩阵运算

Mathematica可进行矩阵的各种运算,如矩阵求逆、矩阵的转置、矩阵与向量的

乘法等.下面列出主要的运算.记k为常数,u,v为向量,A,B为矩阵

k*A------------------------常数乘矩阵

k+u-----------------------向量u的每一个元素加上k

u+v----------------------向量的对应元素相加

u.v-----------------------向量的内积

u*v-----------------------向量的对应元素相乘

A.u---------------------矩阵乘向量

u.A-----------------------向量乘矩阵

A.B--------------------------矩阵乘矩阵

Transpo[A]-----------------求矩阵A的转置阵

Inver[A]--------------------求矩阵A的逆矩阵

Det[A]-------------------------求矩阵A的行列式

16

Eigenvalues[A]-----------------求数字阵A的特征值

Eigentvectors[A]---------------求数字阵A的特征向量

LinearSolve[A,v]---------------求解线性方程组Ax=v

Chop[%n]-------------------舍去第n个输出中无实际意义小量

矩阵可以左乘以向量或右乘以向量,Mathematica也不区分“行”,或“列”向量,自

动进行可能的运算.

例:

In[1]:=A={{a,b},{c,d}};v={x,y};

In[2]:=A.v(A左乘以v)

Out[2]={ax+by,cx+dy}

In[3]:=v.A(A右乘以v)

Out[3]={ax+cy,bx+dy}

In[4]:=Inver[A]

Out[4]=

如果矩阵的元素是近似数,则求出的逆矩阵也是近似的。

In[5]:=B={{1.2,5.7},{4.2,5.6}};Inver[B]

Out[5]=

In[6]:=%.B

Out[6]=

结果与单位矩阵有微小误差,用函数Chop消去无实际意义小量

In[7]:=Chop[%]

Out[7]={{1.,0},{0,1.}}

前面已介绍了用Solve解线性方程组,但对于矩阵形式Ax=v的线性方程组,

LinearSolve[A,v]更方便.

In[8]:=M={{2,1},{1,4}};LinearSolve[M,{a,b}]

Out[8]=

17

数据拟合与优化

1、数据拟合

Fit[data,funs,vars]--------用变量为vars,函数为funs,按最小二乘法拟合一组数

据data

InterpolatingPolynomial[{{x1,f1},{x2,f2},…,},x]-----------------多项式插值

In[1]:=d1=Table[Exp[-x/2.],{x,8}](生成一个数据表)

Out[1]=

In[2]:=Fit[d1,{1,x,x^2,x^3},x](用三次多项式拟合)

Out[2]=

In[3]:=Fit[d1,{Sin[x],Exp[-x/2]},x](用三角函数与指数函数拟合)

Out[3]=

In[4]:=Chop[%]

Out[4]=

In[5]:=d2=Flatten[Table[{x,y,1-2x+x*y+y^2},{x,2,5},{y,10,15}],1](生成一个二

元数据表,即一串三维点)

Out[5]=

In[6]:=Fit[d2,{1,x,y,x*y,y^2},{x,y}](二元函数拟合)

Out[6]=

In[7]:=Chop[%]

Out[7]=

In[8]:=d5={{0,2.5},{0.5,2.1},{1.,2.8},{1.5,3.2}};InterpolatingPolynomial[d5,x]

18

Out[8]=

2、数据优化

FindMinimum[f,{x,x0}]----------------------------从x=x0始,求一元函数f的局部

极小值

FindMinimum[f,{x,{x0,x1}}-----------------------从x0,x1始,求一元函数f的局

部极小值

FindMinimum[f,{x,x0},{y,y0},…]----从点(x0,y0,…)始,求多元函数f的

局部极小值

ConstrainedMin[f,{inequalities},{x,y,…}],求线性不等式约束下的f最小值,假

定变量非负

ConstrainedMax[f,{inequalities},{x,y,…}],求线性不等式约束下的f最大值,假

定变量非负

LinearProgramming[c,A,b]-------------求解线性规划min{cx|Ax>=b,x>=0}

In[1]:=FindMinimum[x^4+3x^2*y+5y^2+x+y,{x,0.1},{y,0.2}]

Out[1]=

In[2]:=ConstrainedMax[17x-20y+18z,{x-y+z<=15,x<5,x+y<10},{x,y,z}]

Out[2]=

In[3]:=

Out[3]={6,4}

绘图与声音

1、平面图形

Plot[f,{x,xmin,xmax}]------------------画一元函数在范围[xmin,xmax]的图形

19

Plot[{f,g,…}{x,xmin,xmax}]------------画多个一元函数在范围[xmin,xmax]的图

ListPlot[{y1,y2,y3,…}]------------画数据表{y1,y2,y3,…}的散点图,自变量为1,

2,3…

ListPlot[{{x1,y1},{x2,y2},…}]----------------画数据表{{x1,y1},{x2,y2},…}的散

点图

ParametricPlot[{fx,fy},{t,min,max}]--------------------------画参数方程的图

ParametricPlot[{{fx,fy},{gx,gy}},{t,min,max}]-------------画多个参数方程的图

Show[p1,p2,p3]-----------------------把图形p1,p2,p3重叠在一起

ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]---------------画f(x,y)的等高线

ListContourPlot[array]---------------------------------画三元数组的等高线图

In[1]:=

ListPlot[{{2,5},{5,8},{7,8},{9,7}},PlotStyle?{PointSize[0.04],RGBColor[0,0,1]}]

In[2]:=p1=Plot[{Sin[2x],Cos[3x]},{x,0,Pi},PlotStyle?RGBColor[1,0,0]]

In[3]:=p2=ParametricPlot[{Cos[t]^3,Sin[t]^3},{t,0,2Pi}]

In[4]:=Show[p1,p2]

20

In[5]:=ListContourPlot[{{22,33,55},{32,42,23},{34,44,52},{43,52,45}}]

2、立体图形

ListPlot3D[Array]-------------------------------画三元数组散点图

Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}]----------画二元函数曲面图

ParametricPlot3D[{fx,fy,fz},{t,min,max}]----------画参数方程表示的空间曲线

ParametricPlot3D[{fx,fy,fz},{t,t1,t2},{u,u1,u2}]---画参数方程表示的曲面图

例In[1]:=da={{3,4,2},{5,6,8},{7,9,4}};ListPlot3D[da]

In[2]:=Plot3D[Exp[-(x^2+y^2)],{x,-2,2},{y,-2,2},Axes->Fal,Boxed->Fal]

In[3]:=Plot3D[x^2-y^2,{x,-3,3},{y,-3,3},Axes->Fal]

21

In[4]:=ParametricPlot3D[{Sin[t],Cos[t],t/8},{t,0,15},Axes->Fal]

In[5]:=ParametricPlot3D[{Cos[t](3+Cos[u]),Sin[t](3+Cos[u]),Sin[u]},{t,0,2Pi},{u

,0,2Pi}]

In[6]:=ParametricPlot3D[{10Sin[t]Cos[u],10Sin[t]Sin[u],10Cos[t]},{t,0,Pi},{u,0,2

Pi}]

3、声音

Play[f,{t,min,max}]----------------------根据函数f的值来播放声音

In[1]:=Play[Sin[700t+250t*Sin[15t]],{t,0,3}]

编程

1、条件控制

(1)If[cond,then,el]-----如果cond成立,则执行then,否则执行el

(2)Which[cond1,valu1,cond2,valu2,…]-----如果condi成立,则执行valuei

(3)Switch[expr,form1,value1,form2,value2,…]----比较expr与每个formi,给出

第一个匹配的value

22

例定义一个分段函数

In[1]:=f[x_]:=If[x>=0&&x<=1,5x,If[x>=1&&x<=3,9-2x,3]];Plot[f[x],{x,0,10}]

定义函数r(x)为x除3,余0时值为a,余1时值为b,余2时值为c.

In[2]:=r[x_]:=Switch[Mod[x,3],0,a,1,b,2,c]

2、循环控制

(1)For[start,test,incr,body]----以start为初值,重复执行body和incr,直到test

不成立

(2)Do[expr,{n}]----执行n次expr

(3)Do[expr,{n,min,max,d}]----n从min到max,步长为d,执行expr

(4)While[cond,body]---------若cond成立,则执行body,直到cond不成立

例In[1]:=t=x;Do[t=1/(1+k*t),{k,2,6,2}];t

Out[1]=

In[2]:=n=15;While[Floor[n/2]>0,n=Floor[n/2];Print[n]]

7

3

1

3、简单例子

(1)旋转曲面

f[x_]=Cos[x]+1;

For[i=1,i<=10,i++,

23

p[i]=ParametricPlot3D[{f[t]Cos[s],f[t]Sin[s],t},{t,-Pi,Pi},{s,0,

2Pi*i/10},PlotRange->{{-2,2},{-2,2},{-3,3}}]]

(2)柱面

y=Cos[x];g1=ParametricPlot3D[{x,y,z},{z,-0.01,0},{x,-Pi,Pi}]

For[i=1,i<=10,i++,

g2=ParametricPlot3D[{x,y,z},{z,0,5},{x,-Pi,-Pi+2Pi*i/10},

PlotRange->{{-Pi,Pi},{-1,1},{0,5}},

DisplayFunction->Identity];

Show[g1,g2,DisplayFunction->$DisplayFunction,Boxed->Fal,

Axes->None]]

(3)螺旋线

rr=MovieParametricPlot[{sCos[2Pis+t],sSin[2Pis+t]},{s,0,

4},{t,0,2Pi},Frames->10,Axes->Fal,AspectRatio->Automatic,

PlotRange->{{-4,4},{-4,4}}];SpinShow[rr,Frames->10,

SpinRange->{0Degree,180Degree}]

(4)二分法

f[x_]=Sin[x]-x+1;aa=0.;bb=10.;eps=0.01;

g1=Plot[f[x],{x,aa,bb},DisplayFunction->Identity];

For[i=1,i<=10,i++,cc=(aa+bb)/2;

g4=Graphics[{RGBColor[1,0,1],PointSize[0.02],Point[{aa,0}]}];

g5=Graphics[{RGBColor[1,0,1],PointSize[0.02],Point[{bb,0}]}];

g2=Graphics[{RGBColor[1,0,0],PointSize[0.02],Point[{cc,0}]}];

g3=Graphics[{RGBColor[1,0,0],PointSize[0.02],Point[{cc,f[cc]}]}];

Show[g1,g2,g3,g4,g5,DisplayFunction->$DisplayFunction,

PlotRange->{{0,10},{f[0],f[10]}}];

If[f[cc]*f[aa]<0,bb=cc,aa=cc]]

(5)正态分布

mu=0;

normalf[x_]=Exp[-0.5((x-mu)/sigma)^2]/(Sqrt[2Pi]sigma);

For[k=0,k<=10,k++,sigma=1+0.2k;

24

Plot[normalf[x],{x,mu-3sigma,mu+3sigma},

PlotRange->{{-5,5},{0,0.4}}]]

综合实例

1、最速降线

一个在点O(0,0)静止的质点在重力作用下,该沿什么轨迹曲线C无摩擦地从

点O(0,0)滑到点B(1,1),才能使所花时间T最短?(见下图)

由于质点在下降时所增加的动能应等于所减少的势能,故质点在点A(x,y)处

的速度v满足.其中,m为质点的质量。从而,且利用微积

分的微元法可知T可由曲线积分求得:

理论上推断,曲线C为摆线时T的值最小[1],假如我们对此结论不太确信,

则不妨对曲线C分别为摆线、直线、圆弧和抛物线的各种不同情况计算一下T

的值并加以比较。

(1)C为摆线。先让我们来考察当C为摆线时T的值。过点O与点B的摆

线参数方程为

其中,t=0与t=t0=2.412088分别对应点O与点B,

25

用Mathematica软件求解,输入

输出T=0.583203.

(2)C为直线。我们总觉得,空间两点用直线连接时其路程最短,从而质点

运动时间好象也应该是最短的。让我们来算一下此时的T值。过点O与点B的

直线方程为x=y(0≤y≤1),

可见,的确是质点从点O到点B沿直线运动不如沿摆线运动快,T值增加了

9.55%,还不算小呢。

(3)C为圆弧。再让我们来考察当C为圆弧时T的值。此时过点O与点B

的圆弧方程为

其中,(a,b)为圆心坐标,r为半径且r≥1。因为圆心必在直线段OB的垂直平

分线上,故推得a+b=1,进而得

此时T是r的函数,显然r越大,C越接近直线。具体的曲线形状如何,可

以通过作图观察。在Mathematica软件中输入:

b=(1-Sqrt[-1+2r*r])/2;;Plot[

T,{r,1,3}];

可得下图,从图可见,T的最小值点在r=1.3附近。

26

再输入:FindMinimum[T,{r,1.3}],

得输出:{0.58512,{r->1.33136}}

这说明当曲线C为半径r=1.33136的圆弧时,质点从点O到点B的下降时间

达到最小值0.58512,比C为直线时要快,但不如C为摆线时快。

(4)C为抛物线。再让我们来考察当C为抛物线时T的值。此时过点O与

点B的抛物线方程为x=ay2+(1-a)y,其中,参数a(0≤a≤1)影响抛物线的弯曲程

度。

此时T是a的函数,显然a=0时,C为直线。我们可以作图观察T与a的关

系。

在Mathematica软件中输入:;

Plot[T,{a,0,1}]

可得下图,可见T的最小值点在a=0.9附近。

再输入:FindMinimum[T,{a,0.9}],

得输出:{0.583778,{a->0.913034}}

这说明当曲线C为a=0.913034的抛物线时,质点从点O到点B的下降时间T

达最小值0.583778,比C为圆弧时要快,但不如C为摆线时快。但也已经十分

接近,只是增加了0.1%.

27

以上从多个侧面验证了几种曲线都不如摆线的T值小,

这使我们更加确信理论推导的结论。

2、追逐线

一个追逐问题:如下图所示,正方形ABCD的四个顶点各有一人,分别是甲乙丙

丁。在某一时刻(设为t0=0),四人同时出发以匀速v走向顺时针方向的下一个人。

如果他们始终保持对准目标,则最终将按螺旋状曲线汇合于中心点O.请求出这

种情况下每个人的行进轨迹.

解建立平面直角坐标系,取时间间隔为Δt,采样并计算每个人在每一时刻t的

下一时刻t+Δt的位置(坐标)。设甲追逐乙,t时刻甲的坐标为(x1,y1),乙的坐标为

(x2,y2)。容易计算出甲在t+Δt的坐标为:

其中

问题的算法设计:

(1)赋初值:终止时间t,采样间隔Δt,行进速度v,及各点起始位置;

(2)确定循环次数n;

(3)对i=1,2,3,...,n循环计算:对j=13,3,4(对应四个人)循环计算:

当j+1=5时,改为1.

28

(4)分别将四人在各时刻对应的点连成折线,并画在同一图中即得四人的行

进轨迹.

t=10;dt=0.02;v=1;n=t/dt;robit={{{0,10}},{{10,10}},{{10,0}},{{0,

0}}};

For[i=1,i<=n,i++,

For[j=1,j<=4,j++,xx1=robit[[j,i,1]];yy1=robit[[j,i,2]];

If[j!=4,xx2=robit[[j+1,i,1]];yy2=robit[[j+1,i,2]],

xx2=robit[[1,i,1]];yy2=robit[[1,i,2]]];

dd=Sqrt[(xx2-xx1)^2+(yy2-yy1)^2]//N;

xx1=xx1+v*dt*(xx2-xx1)/dd;yy1=yy1+v*dt*(yy2-yy1)/dd;

robit[[j]]=Append[robit[[j]],{xx1,yy1}]]];

g1=ListPlot[robit[[1]],PlotJoined->True,DisplayFunction->Identity];

g2=ListPlot[robit[[2]],PlotJoined->True,DisplayFunction->Identity];

g3=ListPlot[robit[[3]],PlotJoined->True,DisplayFunction->Identity];

g4=ListPlot[robit[[4]],PlotJoined->True,DisplayFunction->Identity];

g5=ListPlot[{{0,10},{10,10},{10,0},{0,0}},PlotJoined->True,

DisplayFunction->Identity];

Show[{g1,g2,g3,g4,g5},DisplayFunction->$DisplayFunction]

3、验证歌德巴赫猜想

歌德巴克猜想:任何一个大于2的偶数都能分解为两个素数之和

BeginPackage["exp1`"]

Gedebahe::usage="Testtheguess"

Begin["`Private`"]

Gedebahe[n_]:=Module[{i,j},

If[EvenQ[n]&&n>=4,

For[i=1,!PrimeQ[n-Prime[i]],i++,];

j=n-Prime[i];

Print[StringForm["``=``+``",n,Prime[i],j]],

29

Message[Gedebahe::argerr]

]];

Gedebahe::argerr="argerror,argmustbeEvenandgreaterthan4"

End[]

EndPackage[]

本文发布于:2022-12-31 10:20:37,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/64845.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:缺席者
下一篇:戏谑
标签:mather
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图