490 likes | 901 Vues
第 一 篇 Mathematica. 基础知识 编写简单的 Mathematica 程序 图形处理(二维、三维及其参数方程的形式) 求解数学问题(极限、微分与积分、求解方程(组)、微分方程(组)、在线形代数方面的应用、数值处理) 文件及其它高级操作 Mathematica 与 C/C++ 、 .net 的结合. 第一章 基础知识. 一、 Mathematica3.0 界面及运行介绍 二、基本数值运算 1. 整数运算:加、减、乘、除、幂、阶乘 2. 数学常量: E 、 Pi 、 I 、 Degree 、 Infinity 3. 函数及数学函数
E N D
基础知识 • 编写简单的Mathematica程序 • 图形处理(二维、三维及其参数方程的形式) • 求解数学问题(极限、微分与积分、求解方程(组)、微分方程(组)、在线形代数方面的应用、数值处理) • 文件及其它高级操作 • Mathematica与C/C++、.net的结合
第一章 基础知识 一、Mathematica3.0 界面及运行介绍 二、基本数值运算 1. 整数运算:加、减、乘、除、幂、阶乘 2. 数学常量:E、Pi、I、Degree、Infinity 3. 函数及数学函数 4. 浮点数及复数运算:N函数
三、变量及表达式 1. 变量的定义及清除 ◆ 变量的特点 (1) 变量的默认作用域是全局的 (2) 全局变量不需事先定义或声明 (3) 尽量避免使用下划线定义变量 2. 表达式“头”的概念: Head及Apply函数
3. 多项式及其操作 (1)定义、替换符操作 (2)常用操作: Expand、Factor、Together、Apart Simplify、Collect、Coefficient、 Exponent
四、序列及其操作 1. 序列的定义 2. 序列的生成:Table函数 3. 序列的操作 (1) 检测:Length、Count、Position (2) 添加删除:Append、Prepend、Insert、 Delete、DeleteCases (3) 取元素:Part、Take、Drop、Select
五、自定义函数 1. 一元函数 例: Clear[f,x] f[x_]:= x^2+4x-2 2. 多元函数 例: f[x_,y_]:= x^2+y^2-3 3. 迭代函数 例:f[n_]:= f[n-1]+f[n-2]; f[0]= 1; f[1]=1;
第二章 编程语言 1· 条件语句 ◆ 逻辑判断符 == >= <= > < != === =!=
◆ 逻辑运算符 ! || && ◆ /;运算符 x = a /;test 仅当test为True时才执行赋值语句 ◆ If 语句 语法:If [test, then, else] 若test为 True,则执行then,若test为False,则执行else.
◆ Which 语句 语法:Which [test1, value1, test2,…] 依次计算testi,给出对应第一个test为True 的value ◆ Switch[expr,form1,value1,form2,…] 比较expr与formi,给出与第一个form值匹配的value
例1. 定义如下的函数: • 使用 /; 定义: • f [x_]:= 0 /;x<=0 • f [x_]:= x /; x>0&&x<=2 • f [x_]:= x^2 /; x>2
② 使用 If 定义: f [x_]:= If [ x<=0, 0, If [x>2, x^2, x ] ] ③ 使用Which定义: f [x_]:= Which [ x<=0, 0, x>2, x^2, True, x ] 2· 输出语句Print
3· 循环语句 ◆ Do 语句 语法:Do[expr, {i, imin, imax, di}] 计算expr,i=imin,…,imax,步长为di ◆ While 语句 语法:While[test, body] 当test为True时,计算body
◆ For 语句 语法:For[start, test, incr, body] 以start为起始值,重复计算body和 incr,直到test为False时为止 ◆ 循环控制语句Break和Continue Break[] 退出最里面的循环 Continue[] 转入当前循环的下一步
第三章 图形处理 基本二维图形 ① Plot[ f, { x,xmin,xmax}],用于绘制形如y =f (x)的函数的图形。 当将多个图形绘制在同一坐标系上时,形如: Plot[{ f1,…,fn},{x,xmin,xmax}] 注意:有时需要使用Evaluate函数。
例:在同一坐标系下绘出 sinx, sin2x, sin3x, sin4x, sin5x 的图形。 常用的选项: PlotStyle->Hue[a] 设置线条颜色 PlotRange->{a,b} 控制显示范围 DisplayFunction控制图形显示 AspectRatio 图形的宽、高比 AxesOrigin 设置原点坐标
例:有如下的抛物线簇: 程序: Clear[a,y,x] v=200;g=9.8; y[a_,x_]:=Tan[a]*x-g*x^2*Sec[a]^2/(2v^2) Plot[Evaluate[Table[y[i,x],{i,Pi/12,5Pi/12, Pi/12}]],{x,0,4000}]
② ListPlot [List],用于绘制散点图。 注意,List的形式应为: 例:在同一坐标系下绘制下列两组散点图 p1={{0,0},{0,45},{5.3,89.6},{22.6,131.2}}; p2={{0,0},{2.68,44.8},{12.57,88.28},{27,130.3}}; 程序: g1=ListPlot[p1,PlotJoined->True, DisplayFunction -> Identity]; g2=ListPlot[p2,PlotJoined -> True, DisplayFunction -> Identity]; Show[g1,g2,DisplayFunction -> $DisplayFunction];
③ ParametricPlot [{ fx , fy},{t,tmin,tmax}] 用于绘制形如{x = fx(t) , y = fy(t)}的参数方程图形。 例:绘制以点(3,4)为圆心,半径为2的圆。 ParametricPlot[{3+2Cos[t],4+2Sin[t]}, {t,0,2Pi}] 可增加如下选项: AspectRatio->1, AxesOrigin->{0,0}
2. 其它二维图形 ① ContourPlot[ f, {x,xmin,xmax}, {y,ymin, ymax}],用于绘制形如z =f (x, y)的函数的等高线图。 ②DensityPlot[ f, {x,xmin,xmax}, {y,ymin, ymax}],用于绘制形如z =f (x, y)的函数的密度图。 例:绘制函数 f=sinx·siny的等高线图和密度图
3. 三维图形 ①Plot3D[ f,{x,xmin,xmax},{y,ymin,ymax}] 绘制形如Z = f (x, y)的三维图形。 例:绘制以下的函数图形: Z = 10sin(x+siny) 命令:Plot3D[10 Sin[x+Sin[y]],{x,-10,10}, {y,-10,10}] 可增加选项: PlotPoints->40
② ParametricPlot3D [{ fx , fy , fz}, {t,tmin,tmax} ,{u,umin,umax}] 用于绘制形如{x = fx(t) , y = fy(t) , z = fz(t)}的参数图形。
4. 利用函数包绘制特殊图形 载入图形函数包的方法: <<类名`包名` 例:<<Graphics`Graphics` PolarPlot[r,{t,tmin,tmax}] 绘制极坐标图形 LogPlot[f,{x,xmin,xmax}] 画对数线性图 BarChart[list] 画出list的条形图 PieChart[list] 画出list的百分图
例:<<Graphics`ImplicitPlot` ImplicitPlot[eqn,{x,xmin,xmax}] 绘制形如 f (x,y)=0的隐函数图形 例:绘制以点(3,4)为圆心,半径为2的圆。 ImplicitPlot[(x-3)^2+(y-4)^2==2,{x,0,5}]
第四章 幂级数、极限、微分与积分 1. 幂级数展开 Series[expr,{x, xo ,n}] 求在点 x=xo处至多n 次的幂级数展开 例:求ex 在点 x=0处 x4级幂级数展开 注:使用Normal函数可以去掉级数中的极小项,从而转变成一般表达式。
例: 2. 极限 Limit[expr,x-> xo] 求 x 逼近 xo时expr的极限 某些函数在一点处的极限随逼近方向不同而不同,可用Direction选择方向: Limit[expr, x-> xo, Direction ->1] 左极限 Limit[expr, x-> xo,Direction-> -1] 右极限 例:求1/x 的左右极限
3. 微分 D[ f ,{x,n}] 求f 的n阶偏微分 Dt[ f ] 求f 的全微分 例:D[x^n,{x,3}] Dt[x^2+y^2] 例:y = xarctgx,求其100阶导数及其在0 点的值
4. 积分 Integrate[ f , x] 求f 的不定积分 Integrate[ f ,{x,xmin,xmax}] 求 f 的定积分 Integrate[ f ,{x,xmin,xmax}, {y,ymin,ymax}] 求 f 的多重积分 例:
第三章 线性代数 1. 构造矩阵和向量 Table[ f ,{i,m} ,{j,n}] 构造m×n矩阵,f 是 i, j的函数,给出[i, j]项值 Array[ f ,{m, n}] 构造m×n矩阵,[i, j] 项的值是 f [i, j] DiagonalMatrix[ List] 生成对角线元素为 List的对角矩阵 IdentityMatrix[n] 构造n阶单位阵
截取矩阵块 • M[[i]] 取矩阵M的第 i 行 • Map[#[[i]]&, M] 取矩阵M的第 i 列 • M[[i, j ]] 取矩阵M的i, j 位置的元素 • M[[{i1,…,ir}, {j1,…,js}]] 矩阵M的r×s子 矩阵,元素行标为ik,列标为jk • M[[Range{i0,i1}, Range{j0,j1}]] 矩阵M的从 i0到i1行, j0到j1列元素组成的子矩阵
3. 矩阵及向量的运算 M.N 对M、N做矩阵乘法(向量内积) M*N 将M、N的对应位置元素相乘 Outer[Times,M,N] 求M、N的外积 Dimensions[ M ] 给出矩阵M的维数 Transpose[ M ] 转置 Inverse[ M ] 求逆 Det[ M] 方阵M的行列式值
MatrixPower[M,n] n阶矩阵幂 MatrixExp[M] 矩阵指数 Eigenvalues[ M ] M的特征值 Eigenvectors[M] M的特征向量
第四章 求解方程(组)、微分方程(组) 1. 求解多项式方程(组) Solve[ eqns ,vars] 求解多项式方程 Solve[{eqn1,…eqnn}, {var1,…varn}] 求解多项式方程组 注:Solve只能给出多项式方程(组)的解,因此它们只适用于幂次不高、规模不大的多项式方程(组)。
NSolve[ eqns ,vars] 求多项式方程的数值解 NSolve[{eqn1,…eqnn}, {var1,…varn}] 求多项式方程组的数值解 对于数值解,可以直接用NSolve求解 例:求解以下方程(组) x2+ax=2 x3+34x+1=0 x5-1331x+11= 0
2. 求解微分方程(组) DSolve[ eqns ,y[x], x] 求解y[x]的微分方程 DSolve[ eqns ,y, x] 以纯函数的形式给出y的解 DSolve[{eqn1, eqn2,…}, {y1, y2, …}, x] 求解微分方程组 例:求解以下微分方程(组) y’ = y y’’- ky =1
第五章 数值处理 • 1. 数值积分 • NIntegrate[expr , {x,xmin,xmax}] • 注意,NIntegrate直接计算数值积分,不先给出符号结果,而Integrate[…]//N会尽可能的先求精确解的形式。 • 数值根求解 • FindRoot[lhs==rhs , {x, x0}] 以x0为初始点求方程的数值解
FindRoot[lhs==rhs , {x, {x0 ,x1}}] 给出两个 初值求数值根(方程的符号导数无法求出 时,必须使用此形式) FindRoot[{eqn1, eqn2,…}, {x, x0},{y, y0 }, …] 对联立方程 eqni 求数值解 例:求解下列方程(组) cosx =x x600+5x+3=0
3. 微分方程数值解 NDSolve[{eqn1, eqn2,…}, y,{x,xmin,xmax}] 求函数y的数值解,x的范围为{xmin,xmax} NDSolve[{eqn1, eqn2,…},{y1, y2, …}, {x,xmin,xmax}]求函数yi的数值解 注:以上两种形式用于求解常微分方程(组) NDSolve以InterpolatingFunction目标生成函数yi的解。 InterpolatingFunction目标提供独立变量x在xmin到xmax范围内yi的近似值。
例:求解以下微分方程(组)并画出函数y的图形例:求解以下微分方程(组)并画出函数y的图形
NDSolve[{eqn1, eqn2,…}, y,{x,xmin,xmax}, {t,tmin,tmax}]求由函数y构成的偏微分方 程的数值解 NDSolve[{eqn1, eqn2,…},{y1, y2, …}, {x,xmin,xmax} ,{t,tmin,tmax}]求由函数yi构 成的偏微分方程组的数值解 例:求下面微分方程的数值解并绘图。
4. 极大极小值 ConstrainedMax[f, {inequalities}, {x, y, …}] ConstrainedMax[f, {inequalities}, {x, y, …}] 求由目标函数 f 和不等式约束inequalities构成的线形规划 例:ConstrainedMax[x+y,{x<1,y<2},{x, y}] FindMinimum[f, {x, x0}]以x0为初始点,求函数的局部极小值 注:FindMinimum的用法与FindRoot完全相同。
Minimize和NMinimize用于求解带约束条件的极值问题Minimize和NMinimize用于求解带约束条件的极值问题
5. 曲线拟合 Fit [data, funs, vars] 用变量为vars的函数funs拟合一组数据data 例:points={{0,-1},{1,2},{3,7},{4,6},{7,9},{11,14}}; 注:5.0 及以上版本可用FindFit函数代替
第五章 文 件 及 相 关 操 作 1. 目录及文件操作 SetDirectory[“dir”] 设定当前工作目录 FileNames[“form”] 列出符合形式的文件 CopyFile[“file1”, “ file2 ”] DeleteFile[“file”]
2. 数据文件的读入和输出 ReadList[“file”,type] 从文件中读入数据 “file”为文件名,可以包含路径 type为数据类型,常用的如:Number, String,Character等 3. 局部变量 Block[{x=x0, y=y0,……},body]