Mathematica编程语句与例题
(完整版)Mathematica入门教程含习题与答案
Mathematica入门教程第1篇第1章MATHEMATICA概述 (3)1.1 M ATHEMATICA的启动与运行 (3)1.2 表达式的输入 (4)1.3 M ATHEMATICA的联机帮助系统 (6)第2章MATHEMATICA的基本量 (8)2.1 数据类型和常数 (8)2.2 变量 (10)2.3 函数 (11)2.4 表 (14)2.5 表达式 (17)2.6 常用的符号 (19)2.7 练习题 (19)第2篇第3章微积分的基本操作 (20)3.1 极限 (20)3.2 微分 (20)3.3 计算积分 (22)3.4 无穷级数 (24)3.5 练习题 (24)第4章微分方程的求解 (26)4.1 微分方程解 (26)4.2 微分方程的数值解 (26)4.3 练习题 (27)第3篇第5章MATHEMATICA的基本运算 (28)5.1 多项式的表示形式 (28)5.2 方程及其根的表示 (29)5.3 求和与求积 (32)5.4 练习题 (33)第6章函数作图 (35)6.1 基本的二维图形 (35)6.2 二维图形元素 (40)6.3 基本三维图形 (42)6.4 练习题 (46)第4篇第7章MATHEMATICA函数大全 (48)7.1 运算符和一些特殊符号,系统常数 (48)7.2 代数计算 (49)7.3 解方程 (50)7.4 微积分 (50)7.5 多项式函数 (51)7.6 随机函数 (52)7.7 数值函数 (52)7.8 表相关函数 (53)7.9 绘图函数 (54)7.10 流程控制 (57)第8章MATHEMATICA程序设计 (59)8.1 模块和块中的变量 (59)8.2 条件结构 (61)8.3 循环结构 (63)8.4 流程控制 (65)8.5 练习题 (67)--------------习题与答案在68页-------------------第1章Mathematica概述1.1 Mathematica的启动与运行Mathematica是美国Wolfram研究公司生产的一种数学分析型的软件,以符号计算见长,也具有高精度的数值计算功能和强大的图形功能。
60Mathematica数值计算
第六章数值计算命令与例题数值问题由一组已知数据来求出一组结果数据,使得这两组数据之间满足预先制定的某种关系的问题,数值计算就是通过对数学问题解有效的近似处理去获得比较满意解的计算方法。
这里只介绍与数值计算中最基本方法的一些命令与例题。
6.1求近似函数在生产和实验中, 人们经常遇到需要通过某个未知(或复杂)的函数f(x)在有限个给定点的函数值:{x i, y i}, i=1,2,…., n, 这里f(x i) = y i 去获得函数f(x)的近似函数ϕ(x), 以便于处理涉及到f(x)的计算或其他处理问题, 这种求近似函数ϕ(x)的方法主要有拟合方法和插值方法。
一般, 曲线拟合是常用的拟合方法, 而插值方法常用的有多项式插值与分段插值方法, 在Mathematica 中它们都有相应的命令来获得相应的近似函数。
6.1.1 曲线拟合曲线拟合主要用来求一元近似函数, 它是根据一组函数值(通常是测量值或试验数据)去寻找描述相应函数关系的一种常用数据逼近方法, 是根据最小二乘原理的意义下获得近似函数的, 此近似函数具有在数据点处的误差平方和最小的特点。
通过拟合得到的函数关系通常称为经验公式, 该函数不必经过任何的数据点, 是实际函数的一种近似函数。
曲线拟合结果的好坏与选用什么类型的函数作为拟和曲线类型有关。
记函数集合:M=Span[ϕ0, ϕ1, ϕ2,…, ϕm]={ ϕ(x)| ϕ(x)= a 0 ϕ0(x)+a1ϕ1(x)+…+a mϕm(x), a i∈R}称集合M为函数ϕ0, ϕ1, ϕ2,…, ϕm张成的空间,m+1个函数ϕ0(x), ϕ1(x), ϕ2(x),…, ϕm(x)称为拟合基函数集合, 它们都是已知的函数。
拟合基函数集合不同对应不同的拟合函数类, 如果要用曲线拟合方法得到经验公式, 通常是先画出所给数据的散点图, 再根据散点图选择合适的拟和函数类型做曲线拟合。
应该注意的是:选择不同的拟合函数类会得到不同的拟合函数,拟合函数的好坏依赖于所选的拟合函数类,如果你知道的曲线类型多, 就容易获得满意的拟合函数。
Mathematica教程第五章线性代数运算命令与例题
北京交通大学
5.1向量与矩阵的定义
数学上矩阵是这样定义的: 由个数排成m行n列的数表:
称为m行n列矩阵,特别,当m=1时就是线性代数中的向量。 记作:
两个矩阵称为同型矩阵。
nSinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5Sin4SinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5S4inSinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5Sin4SinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5Sin4SinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5S4inSinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6inS5inS4inS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nSi3nS8inS7inS6in5S4inSinS6inS5inS4Sini3nSi2nS7inS6inS5Sini4nS
{{d,b}{,c, a}
Out[20]:={a + 2 b, 3 a + 4 b, 5 a + 6 b}
1 2 3
4
bacdbacdbac{d{bdac,db}{,c, a}
例15:求矩阵
2 1
3 1
1 1
与 2
1
的乘积。
bacdbacdbacdbacd
1
(完整word版)Mathematica习题
复习题1、写出求极限11261lim 22+--∞→x x x x 的mathematica 程序和结果。
2、写出求函数2sin()arctan y x x =的导数的mathematica 程序和结果。
3、写出已知2sin )2cos(x x x y -=,写出求)4(y 的mathematica 程序和计算结果。
4、写出求dx e x x⎰3的mathematica 程序和结果。
5、计算定积分dx x x⎰--1145,写出mathematica 的程序和结果。
6、写出绘制函数12/)(23x e x x f x +=- 在区间[-3,3]的图形的mathematica程序。
7、设计一段mathematica 程序,用一个while 循环实现求22151...211+++。
请写出该程序。
8、设有函数⎪⎩⎪⎨⎧≥+<+=0,3sin 0,1)(2x x e x x x f x ,试在mathematica 中定义该函数,并写出绘制该函数在区间[-5,5]上的图形,写出定义函数的程序和绘制图形的程序。
9、编写程序在同一窗口绘制曲线1sin(2x 0.3)y =-;23cos(x 0.5)y =+在[0,2]π区间上的图像。
10、某药店对顾客所购买营养品实行打折销售,标准如下(药品价格用price 来表示):200price < 没有折扣200500price ≤< 3%折扣5001000price ≤< 5%折扣10002500price ≤< 8%折扣25005000price ≤< 10%折扣5000price ≤ 14%折扣输入所售药品的价格,求其实际销售价格。
11、给定非负实数0a ,0b 满足00a b ≠,按递推公式1n n 11(a b )2(n 0,1,2,......)n n a b ++⎧=+⎪=⎨⎪=⎩产生的数列{}n a ,{}n b 称为高斯算术-几何平均数列。
Mathematica使用教程
Mathematica 使用教程一、要点● Mathematica 是一个敏感的软件. 所有的Mathematica 函数都以大写字母开头;● 圆括号( ),花括号{ },方括号[ ]都有特殊用途, 应特别注意;● 句号“.”,分号“;”,逗号“,”感叹号“!”等都有特殊用途, 应特别注意;● 用主键盘区的组合键Shfit+Enter 或数字键盘中的Enter 键执行命令.二、介绍案例1. 输入与输出例1 计算 1+1:在打开的命令窗口中输入1+2+3并按组合键Shfit+Enter 执行上述命令,则屏幕上将显示:In[1] : =1+2+3Out[1] =6这里In[1] : = 表示第一个输入,Out[1]= 表示第一个输出,即计算结果.2. 数学常数Pi 表示圆周率π; E 表示无理数e; I 表示虚数单位i ;Degree 表示π/180; Infinity 表示无穷大.注:Pi,Degree,Infinity 的第一个字母必须大写,其后面的字母必须小写.3. 算术运算Mathematica 中用“+”、“-”、“*”、“/” 和“^”分别表示算术运算中的加、减、乘、除和乘方.例2 计算 π⋅⎪⎭⎫ ⎝⎛⋅+⎪⎭⎫ ⎝⎛⋅--213121494891100.输入 100^(1/4)*(1/9)^(-1/2)+8^(-1/3)*(4/9)^(1/2)*Pi则输出 3103π+这是准确值. 如果要求近似值,再输入N[%]则输出 10.543这里%表示上一次输出的结果,命令N[%]表示对上一次的结果取近似值. 还用 %% 表示上上次输出的结果,用 %6表示Out[6]的输出结果.注:关于乘号*,Mathematica 常用空格来代替. 例如,x y z 则表示x*y*z,而xyz 表示字符串,Mathematica 将它理解为一个变量名. 常数与字符之间的乘号或空格可以省略.4. 代数运算例3 分解因式 232++x x输入 Factor[x^2+3x+2]输出 )x 2)(x 1(++例4 展开因式 )2)(1(x x ++输入 Expand[(1+x)(2+x)]输出 2x x 32++例5 通分 3122+++x x输入 Together[1/(x+3)+2/(x+2)]输出 )x 3)(x 2(x 38+++ 例6 将表达式)3)(2(38x x x +++ 展开成部分分式 输入 Apart[(8+3x)/((2+x)(3+x))]输出 3x 12x 2+++ 例7 化简表达式 )3)(1()2)(1(x x x x +++++输入 Simplify[(1+x)(2+x)+(1+x)(3+x)] 输出 2x 2x 75++三、部分函数1. 内部函数Mathematica 系统内部定义了许多函数,并且常用英文全名作为函数名,所有函数名的第一个字母都必须大写,后面的字母必须小写. 当函数名是由两个单词组成时,每个单词的第一个字母都 必须大写,其余的字母必须小写. Mathematica 函数(命令)的基本格式为函数名[表达式,选项]下面列举了一些常用函数: 算术平方根x Sqrt[x]指数函数x eExp[x] 对数函数x a logLog[a,x] 对数函数x lnLog[x] 三角函数Sin[x], Cos[x], Tan[x], Cot[x], Sec[x], Csc[x] 反三角函数 ArcSin[x], ArcCos[x], ArcTan[x],ArcCot[x], AsrcSec[x], ArcCsc[x]双曲函数 Sinh[x], Cosh[x], Tanh[x],反双曲函数 ArcSinh[x], ArcCosh[x], ArcTanh[x]四舍五入函数 Round[x] (*取最接近x 的整数*)取整函数 Floor[x] (*取不超过x 的最大整数*)取模 Mod[m,n] (*求m/n 的模*)取绝对值函数 Abs[x]n 的阶乘 n!符号函数 Sign[x]取近似值 N[x,n] (*取x 的有n 位有效数字的近似值,当n 缺省时,n 的默认值为6*)例8 求π的有6位和20位有效数字的近似值.输入 N[Pi] 输出 3.14159输入 N[Pi, 20] 输出 3.1415926535897932285注:第一个输入语句也常用另一种形式:输入 Pi//N 输出 3.14159例9 计算函数值(1) 输入 Sin[Pi/3] 输出23(2) 输入 ArcSin[.45] 输出 0.466765(3) 输入 Round[-1.52] 输出 -2例10 计算表达式 )6.0arctan(226sin 2ln 1132+-+-e π 的值输入 1/(1+Log[2])*Sin[Pi/6]-Exp[-2]/(2+2^(2/3))*ArcTan[.6]输出 0.2749212. 自定义函数在Mathematica 系统内,由字母开头的字母数字串都可用作变量名,但要注意其中不能包含空格或标点符号.变量的赋值有两种方式. 立即赋值运算符是“=”,延迟赋值运算符是“: =”. 定义函数使用的符号是延迟赋值运算符“: =”.例11 定义函数 12)(23++=x x x f ,并计算)2(f ,)4(f ,)6(f .输入Clear[f,x]; (*清除对变量f 原先的赋值*)f[x_]:=x^3+2*x^2+1; (*定义函数的表达式*)f[2] (*求)2(f 的值*)f[x]/.{x->4} (*求)4(f 的值,另一种方法*)x=6; (*给变量x 立即赋值6*)f[x] (*求)6(f 的值,又一种方法*)输出1797289注:本例1、2、5行的结尾有“;”,它表示这些语句的输出结果不在屏幕上显示.四、解方程在Mathematica 系统内,方程中的等号用符号“==”表示. 最基本的求解方程的命令为Solve[eqns, vars]它表示对系数按常规约定求出方程(组)的全部解,其中eqns 表示方程(组),vars 表示所求未知变量.例12 解方程0232=++x x输入 Solve[x^2+3x+2==0, x]输出 }}1x {},2x {{-→-→例13 解方程组 ⎩⎨⎧=+=+10dy cx by ax 输入 Solve[{a x + b y == 0,c x + d y ==1}, {x,y}]输出 ⎭⎬⎫⎩⎨⎧⎭⎬⎫⎩⎨⎧+-→-→ad bc a y ,ad bc b x 例14 解无理方程a x x =++-11输入 Solve[Sqrt[x-1]+ Sqrt[x+1] == a, x]输出 ⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧+→24a 4a 4x很多方程是根本不能求出准确解的,此时应转而求其近似解. 求方程的近似解的方法有两种,一种是在方程组的系数中使用小数,这样所求的解即为方程的近似解;另一种是利用下列专门用于求方程(组)数值解的命令:NSolve[eqns, vars] (*求代数方程(组)的全部数值解*)FindRoot[eqns, {x, x0}, {y, y0}Λ,]后一个命令表示从点),,(00Λy x 出发找方程(组)的一个近似解,这时常常需要利用图像法先大致确定所求根的范围,是大致在什么点的附近.例15 求方程013=-x 的近似解输入 NSolve[x^3-1== 0, x]输出 {{→x -0.5-0.866025ii},{→x -0.5+0.866025ii},{→x 1.}}输入 FindRoot[x^3-1==0,{x, .5}]输出 {→x 1.}下面再介绍一个很有用的命令:Eliminate[eqns, elims] (*从一组等式中消去变量(组)elims*)例16从方程组 ⎪⎩⎪⎨⎧=+=-+-+=++11)1()1(1222222y x z y x z y x 消去未知数y 、z .输入Eliminate[{x^2+y^2+z^2 ==1,x^2+(y-1)^2 + (z-1)^2 ==1, x + y== 1},{y, z}]输出 0x 3x 22==+-注:上面这个输入语句为多行语句,它可以像上面例子中那样在行尾处有逗号的地方将行与行隔开, 来迫使Mathematica 从前一行继续到下一行在执行该语句. 有时候多行语句的意义不太明 确,通常发生在其中有一行本身就是可执行的语句的情形,此时可在该行尾放一个继续的记号“\”, 来迫使Mathematica 继续到下一行再执行该语句.五、保存与退出Mathematica 很容易保存Notebook 中显示的内容,打开位于窗口第一行的File 菜单,点击Save后得到保存文件时的对话框,按要求操作后即可把所要的内容存为 *.nb 文件. 如果只想保存全部 输入的命令,而不想保存全部输出结果,则可以打开下拉式菜单Kernel,选中Delete All Output,然后 再执行保存命令. 而退出Mathematica 与退出Word 的操作是一样的.六、查询与帮助查询某个函数(命令)的基本功能,键入“?函数名”,想要了解更多一些,键入“??函数名”,例如,输入?Plot则输出Plot[f,{x,xmin,xmax}] generates a plot of f as a functionof x from xmin to xmax. Plot[{f1,f2,…},{x,xmin,xmax}] plots several functions fi它告诉了我们关于绘图命令“Plot ”的基本使用方法.例17 在区间]1,1[-上作出抛物线2x y =的图形.输入 Plot[x^2,{x,-1,1}]则输出-1-0.50.510.20.40.60.81例18 π.输入 Plot[{Sin[x],Cos[x]},{x,0,2Pi}]则输出123456-1-0.50.51??Plot则Mathematica 会输出关于这个命令的选项的详细说明,请读者试之.此外,Mathematica 的Help 菜单中提供了大量的帮助信息,其中Help 菜单中的第一项HelpBrowser(帮助游览器)是常用的查询工具,读者若想了解更多的使用信息,则应自己通过Help 菜单去学习.编辑本段Mathematica 基本运算a+mathematica 数学实验(第2版)b+c 加a-b 减a b c 或a*b*c 乘a/b 除-a 负号a^b 次方Mathematica 数字的形式256 整数2.56 实数11/35 分数2+6I 复数常用的数学常数Pi 圆周率,π=3.141592654…E 尤拉常数,e=2.71828182…Degree 角度转换弧度的常数,Pi/180I 虚数,其值为√-1Infinity 无限大指定之前计算结果的方法% 前一个运算结果%% 前二个运算结果%%…%(n个%) 前n个运算结果%n 或Out[n] 前n个运算结果复数的运算指令a+bI 复数Conjugate[a+bI] 共轭复数Re[z], Im[z] 复数z的实数/虚数部分Abs[z] 复数z的大小或模数(Modulus)Arg[z] 复数z的幅角(Argument)Mathematica 输出的控制指令expr1; expr2; expr3 做数个运算,但只印出最後一个运算的结果expr1; expr2; expr3; 做数个运算,但都不印出结果expr; 做运算,但不印出结果编辑本段常用数学函数Sin[x],Cos[x],Tan[x],Cot[x],Sec[x],Csc[x] 三角函数,其引数的单位为弪度Sinh[x],Cosh[x],Tanh[x],… 双曲函数ArcSin[x],ArcCos[x],ArcTan[x] 反三角函数ArcCot[x],ArcSec[x],ArcCsc[x]Arc Sinh[x],ArcCosh[x],ArcTanh[x],… 反双曲函数Sqrt[x] 根号Exp[x] 指数Log[x] 自然对数Log[a,x] 以a为底的对数Abs[x] 绝对值Round[x] 最接近x的整数Floor[x] 小於或等於x的最大整数Ceiling[x] 大於或等於x的最小整数Mod[a,b] a/b所得的馀数n! 阶乘Random[] 0至1之间的随机数(最新版本已经不用这个函数,改为使用RandomReal[])Max[a,b,c,...],Min[a,b,c,…] a,b,c,…的极大/极小值编辑本段数之设定x=a 将变数x的值设为ax=y=b 将变数x和y的值均设为bx=. 或Clear[x] 除去变数x所存的值变数使用的一些法则xy 中间没有空格,视为变数xyx y x乘上y3x 3乘上xx3 变数x3x^2y 为x^2 y次方运算子比乘法的运算子有较高的处理顺序编辑本段四个常用处理代数的指令Expand[expr] 将expr展开Factor[expr] 将expr因式分解Simplify[expr] 将expr化简成精简的式子FullSimplify[expr] Mathematica 会尝试更多的化简公式,将expr化成更精简的式子编辑本段多项式/分式转换的函数ExpandAll[expr] 把算是全部展开Together[expr] 将expr各项通分在并成一项Apart[expr] 把分式拆开成数项分式的和Apart[expr,var] 视var以外的变数为常数,将expr拆成数项的和Cancel[expr] 把分子和分母共同的因子消去编辑本段分母/分子的运算Denominator[expr] 取出expr的分母Numerator[expr] 取出expr的分子ExpandDenominator[expr] 展开expr的分母ExpandNumerator[expr] 展开expr的分子编辑本段多项式的另二种转换函数Collect[expr,x] 将expr表示成x的多项式,如Collect[expr,{x,y,…}] 将expr分别表示成x,y,…的多项式FactorTerms[expr] 将expr的数值因子提出,如4x+2=2(2x+1)FactorTerms[expr,x] 将expr中把所有不包含x项的因子提出FactorTerms[expr,{x,y,…}] 将expr中把所有不包含{x,y,...}项的因子提出编辑本段三角函数、双曲函数和指数的运算TrigExpand[expr] 将三角函数展开TrigFactor[expr] 将三角函数所组成的数学式因式分解TrigReduce[expr] 将相乘或次方的三角函数化成一次方的基本三角函数之组合ExpToTrig[expr] 将指数函数化成三角函数或双曲函数TrigToExp[expr] 将三角函数或双曲函数化成指数函数复数、次方乘积之展开ComplexExpand[expr] 假设所有的变数都是实数来对expr展开ComplexExpand[expr,{x,y,…}] 假设x,y,..等变数均为复数来对expr展开PowerExpand[expr] 将多项式项次、系数与最高次方之取得Coefficient[expr,form] 於expr中form的系数Exponent[expr,form] 於expr中form的最高次方Part[expr,n] 或expr[[n]] 在expr项中第n个项代换运算子expr/.x->value 将expr里所有的x均代换成valueexpr/.{x->value1,y->value2,…} 执行数个不同变数的代换expr/.{{x->value1},{x->value2},…} 将expr代入不同的x值expr//.{x->value1,y->value2,…} 重复代换到expr不再改变为止求解方程式的根Solve[lhs==rhs,x] 解方程式lhs==rhs,求xNsolve[lhs==rhs,x] 解方程式lhs==rhs的数值解Solve[{lhs1==rhs1,lhs2==rhs2,…},{x,y,…}] 解联立方程式,求x,y,…NSolve[{lhs1==rhs1,lhs2==rhs2,…},{x,y,…}] 解联立方程式的数值解FindRoot[lhs==rhs,{x,x0}] 由初始点x0求lhs==rhs的根Mathematica 的四种括号(term) 圆括号,括号内的term先计算f[x] 方括号,内放函数的引数{x,y,z} 大括号或串列括号,内放串列的元素p[[i ]] 或Part[p,i] 双方括号,p的第i项元素p[[i,j]] 或Part[p,i,j] p的第i项第j个元素缩短Mathematica输出的指令expr//Short 显示一行的计算结果Short[expr,n] 显示n行的计算结果Command; 执行command,但不列出结果查询Mathematica的物件?Command 查询Command的语法及说明??Command 查询Command的语法和属性及选择项?Aaaa* 查询所有开头为Aaaa的物件函数的定义、查询与清除f[x_]= expr 立即定义函数f[x]f[x_]:= expr 延迟定义函数f[x]f[x_,y_,…] 函数f有两个以上的引数?f 查询函数f的定义Clear[f] 或f=. 清除f的定义Remove[f] 将f自系统中清除掉含有预设值的Patterna_+b_. b的预设值为0,即若b从缺,则b以0代替x_ y_ y的预设值为1x_^y_ y的预设值为1条件式的自订函数lhs:=rhs/;condition 当condition成立时,lhs才会定义成rhsIf指令If[test,then,else] 若test为真,则回应then,否则回应elseIf[test,then,else,unknow] 同上,若test无法判定真或假时,则回应unknow 极限Limit[expr,x->c] 当x趋近c时,求expr的极限Limit[expr,x->c,Direction->1]Limit[expr,x->c,Direction->-1]微分D[f,x] 函数f对x作微分D[f,x1,x2,…] 函数f对x1,x2,…作微分D[f,{x,n}] 函数f对x微分n次D[f,x,NonConstants->{y,z,…}] 函数f对x作微分,将y,z,…视为x的函数全微分Dt[f] 全微分dfDt[f,x] 全微分Dt[f,x1,x2,…] 全微分Dt[f,x,Constants->{c1,c2,…}] 全微分,视c1,c2,…为常数不定积分Integrate[f,x] 不定积分∫f dx定积分Integrate[f,{x,xmin,xmax}] 定积分Integrate[f,{x,xmin,xmax},{y,ymin,ymax}] 定积分数列之和与积Sum[f,{i,imin,imax}] 求和Sum[f,{i,imin,imax,di}] 求数列和,引数i以di递增Sum[f,{i,imin,imax},{j,jmin,jmax}]Product[f,{i,imin,imax}] 求积Product[f,{i,imin,imax,di}] 求数列之积,引数i以di递增Product[f,{i,imin,imax},{j,jmin,jmax}]函数之泰勒展开式Series[expr,{x,x0,n}] 对expr於x0点作泰勒级数展开至(x-x0)n项Series[expr,{x,x0,m},{y,y0,n}] 对x0和y0展开关系运算子a==b 等於a>b 大於a>=b 大於等於a<b 小於a<=b 小於等於a!=b 不等於逻辑运算子!p notp||q||… orp&&q&&… andXor[p,q,…] exclusive orLogicalExpand[expr] 将逻辑表示式展开基本二维绘图指令Plot[f,{x,xmin,xmax}]画出f在xmin到xmax之间的图形Plot[{f1,f2,…},{x,xmin,xmax}]同时画出数个函数图形Plot[f,{x,xmin,xmax},option->value]指定特殊的绘图选项,画出函数f的图形Plot[]几种常用选项的指令选项预设值说明AspectRatio 1/GoldenRatio 图形高和宽之比例,高/宽Axes True 是否把坐标轴画出AxesLabel Automatic 为坐标轴贴上标记,若设定为AxesLabel->{?ylabel?},则为y轴之标记。
Mathematica编程语句与例题
例4:写出一元二次方程ax2 + bx + c = 0判 : 别根的类型的Mathematica自定义函数形式。 解:一元二次方程根的判别式为 =b2 -4ac, 当>0时方程有两个实根; 当<0时方程有 两个复根; 当=0时方程有两个实重根, 它 有多于两种的选择,故可以用Which语句表 示。 Mathematica命令为 Mathematica命令为 c_]:=(w=b^2In[8]:=g[a_, b_, c_]:=(w=b^24*a*c;Which[w>0,"two real roots", w<0,"two complex roots",w == 0,"duplicate roots" ]) In[9]:=g[0,1,2] Out[9]= two real roots In[10]:=g[3,1,2] Out[10]= two complex roots In[11]:=g[3,0,0] Out[11]=duplicate roots
命令描述下面问题:先产生一个函数 例1:用Mathematica命令描述下面问题 先产生一个函数 用 命令描述下面问题 先产生一个函数[0,1]内的 内的 随机实数,再判断该随机数是否小于 再判断该随机数是否小于0.5, 如果小于 如果小于0.5, 则将此 随机实数 再判断该随机数是否小于 随机数显示出来,否则显示”***”。 随机数显示出来 否则显示” ” 否则显示 解: Mathematica 命令为: In[1]:= p= Random[]; If[p<0.5, p, “***”] Out[1]=0.202857 In[2]:= If[(p=Random[])<0.5, p, “***”]) Out[2]= *** 例2: 写出分段函数
利用Mathematica求函数极值
4
x 2 3 y 2 9x (2)求函数 f ( x, y) x 3 y 3 3的最值 解 自定义函数 f[x_,y_]:=x^3-y^3+3*x^2+3*y^2-9*x; 求驻点 Solve[{D[f[x,y],x]==0,D[f[x,y],y]==0}] \输出结果为{{x->-3,y->0},{x->-3,y->2},{x>1,y->0},{x->1,y->2}} 比较各点函数值 f[x,y]/.% \输出结果为 {27,31, -5,-1} 可求得最值为31
边学边做: (一)用命令FindMinimum求极小值: FindMinimum[f[x],{x,x0}] FindMinimum[f[x,y],{x,x0},{y,y0}] (1)先作图,观察之后求函数 f ( x) x 4 在 2 x 2 [-3,3] 内的极值 3x 2 y 3 (2)作图之后求函数 f ( x, y) x 2 y 2 xy 的极值 (二)用求驻点的方法求函数极值 (1)求函数 的极值 4( x 1)
处 有极值,求此极值,并说明是极大值还是极小 值. 3 2 f ( x ) ax bx cx d 在x=-1处有极大 (2)若函数 值为8,在x=2处有极小值为-19,求a,b,c,d. (3)把一根直径为d的圆木锯成截面为矩形的梁, 问矩形截面高h与宽b如何选择时,才能使梁 1 2 W bh 达到最大? 的抗弯截面系数 6 (4)求表面积为a2且体积最大的长方体体积.
f ( x)
(2)求函数
x2 1
f ( x, y) x 3 y 3 3x 2 3 y 2 9x
的最值
Mathematica的所有画图函数或命令进行总结和分类及部分习题
一、对Mathematica的所有画图函数或命令进行总结和分类(对它的一些重要可选项进行说明),并画出一些有趣的图形我们首先可以把Mathematica的画图函数做如下分类:有趣的图形:1、2、三、(1) 这是一个兔子繁殖的模型,一对子兔一个月后成为一对成兔,而成年兔每个月能繁殖一对子兔,这样下去,每个月统计一下成年兔的数目,有如下的关系:月份: 1 2 3 4 5 6 7 8 …… Fn : 1 1 2 3 5 8 13 21 …… 不难看出:2121;1;1--+===n n n F F F F F 。
这就是著名的裴波那奇数列。
通过数学软件编程,请问第40年、80年有多少成年兔?你能给出几种求裴波那奇数列通项的方法。
满足21--+=n n n F F F 的数列完全由前两项决定,既由向量),(21F F 决定,能否利用线性代数中的子空间和向量线性表示的理论给出它的通项的一种求法。
(2)雌鸟每年只育一只小雌鸟,次年各自又育一只雌鸟,每鸟只能育十次。
请问第30年、100年有多少雌鸟?你能求出第n 年有多少雌鸟吗(通项)?(设鸟都不死)解:(1)、第40年的成年兔: 第80念得成年兔:求斐波那契数列通项的方法: 方法一、(向量线性表示)已知数列: A 0=a ,A 1=b , F[n+1]=c*F[n]+d*F[n-1] (a=b=c=d1时就是斐波那契数列) 求F[n]的表达式解:这个数列经过整理后可得一个F[n]与F[n-1]的线性组合,即A*F[n]+B*F[n-1]是一个等比数列的形式 令 F[n+1]- k F[n]=p(F[n] - k F[n-1])————————————————————-(1)这样 如果令B[n+1]=F[n+1] – k F[n],则B[n](n=1, to n) 是一个等比数列。
(1)=> F[n+1]= p F[n]+k F[n] –pk F[n-1]和 F[n+1]=c*F[n]+d*F[n-1] 比较,可知有 p+k=c ,pk=-d 这样知道 p 和 k 是 x^2 - cx -d=0 的两个根。
mathematica典型例子(非常实用)
k
f [x0, x1,..., xk ]
f (xi )
k
,
i0 (xi x j )
j0
ji
三、目的和意义 1、 学会常用的插值方法,求函数的近似表达式,以解决其它实际问题; 2、 明确插值多项式和分段插值多项式各自的优缺点; 3、 熟悉插值方法的程序编制; 4、 如果绘出插值函数的曲线,观察其光滑性。
a[label][j]=temp;
}
}
//==========================================
for (j=k+1;j<=n+1;j++) a[k][j]=a[k][j]/a[k][k]; a[k][k]=1.0; i=1; for(i=k+1;i<=n;i++) {
for (j=k+1;j<=n+1;j++) a[i][j]=a[i][j]-a[i][k]*a[k][j];
a[i][k]=0.0; } k++; if(k==n) {
a[k][k+1] /= a[k][k]; a[k][k] = 1.0; break; } }while(1); // 消元结束
// 消元
iputsthesolvechasetxt中的数据113111211141141作业三最小二乘法一问题提出从随机的数据中找出其规律性给出其近似表达式的问题在生产实践和科学实验中大量存在通常利用数据的最小二乘法求得拟合曲线
作业一 函数插值方法
一、问题提出
对于给定的一元函数 y f (x) 的 n 1个节点值 yi f (xi ) 。试用Lagrange公式
Mathematica语言
附录Mathematica 软件简介Mathematica是一个功能强大的数学软件.它集数值计算、符号运算,绘图功能于一身,堪称众多数学软件中的佼佼者.加之其语法规则简单,操作使用方便,深受广大科技工作者的喜爱,得到广泛的使用.数学函数和常数Mathematica提供了大量的数学函数,给运算带来很大方便.下面列出一些常用的函数.注:Mithematica提供的函数,其名称中的字母大小写是固定的(特别开头字母均为大写),不得误用;函数的自变量以方括号[ ]括起来.Mathemaica还提供了许多数学常数,下面列出了一些常数(均以大写字母开头).Pi -------------------π; E---------------------e; Infinity--------------∞I----------------------1函数和常数均可参与运算,下面是一些运算的例子.In[ l]:=Pi^2Out[ 1]=π2In[2]:=N[ Pi,11]Out[2]=3.1415626535In[3]:=Log[E^8]Out[3]=8In[4]:=Sin[Sqrt[%1]/6]Out[4]=1/2用户不仅可以使用Mathemaica提供的函数和常数,还可以自定义函数和常数.方法如下:形式功能f[x_]:= expr-------------定义函数ff[x_,y_]:=exp r-----------定义多变量的函数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;其中输入语句后的分号“;”表示不显示输出结果,定义了函数、变量以后,便可以在运算中使用.In[4]:=f[2]Out[4]=32In[5]:=f[1+b]Out[5]=(1+b)2In[6]:=g[z,4]Out[6]=5如果忘记了已定义的函数的内容,可以使用?f查询f的定义.当函数或变量使用完以后,最好将其清除,以免带来麻烦.3.符号运算符号运算即代数式的运算.它是Mathemaica的重要功能.下面简介符号运算的主要功能.(1)符号赋值Mathemaica不仅可以把一个常值赋给一个符号,还可以把一个表达式赋给一个符号.其规则如下:x =value--------------------将value 赋给x x =.-----------------------清除赋给x 的值expr/.x-> value -------------用value 替换expr 中的xexpr/.{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 In[4]:=l- t^ 2 Out[4]=1-t 2 In[5]:=%2/.x->2Out[5]=-8(2)代数式变换Mathernatica 提供了许多进行代数式变换的一些函数,下面列出常用的函数. Expand[expr]-----------------------展开exprExpandAll[expr]--------------------展开expr 的分子、分母 Factor[expr]-------------------------对expr 进行因式分解 Together[expr]----------------------对expr 进行通分 Apart [expr ]---------------------将 expr 分解为简单分式 Cancel[expr]----------------------消去exp r 的分子、分母的公因式 Simplify[expr]--------------------把expr 化为最少项形式 例: In[1]:=t=(x-1)^2(2+x)/((1+x)(x-3)^2),)x ()x ()x ()x (++-++-=1321Out[1]22 In[2]:=Expand[t] (展开分子,分母不变)x)(1x)3(x)(1x)3(3x)(1x)(-32Out[2]2322++-+++--++=x x In[3]:=ExpandAll[t] (展开分子、分母)323323253953935392Out[3]x x x x x x x x x x x +-+++-+-+-+=In[4]:=Together[%] (通分)32353932Out[4]x x x x x +-++-=In[5]:=Apart[%] (化为部分分式)x )4(11x )4(-319x )(-351Out[5]2++++++= In[6]:=Factor[%] (分解因式)x)(1x)(-3x)(2x)(-1Out[6]22++++= In[7]:=Simplify[%5] (将表达式化简)322539x )(2x )(-1Out[7]xx x +-+++= 除了上述常用的变换外,Mathematica 还可以进行许多种类型的变换.下面再看一些例子.In[8]:=Expand[2Cos[x]^3*Sin[2x]^2, Trig->True] (展开三角函数)Out[8]:=Cos @x D 3-Cos @x D 7+6Cos @x D 5Sin @x D 2-Cos @x D 3Sin @x D4In[9]:=Factor[%,Trig->True] Out[9]=8 Cos[x]5Sin[x]2In[10]:=ComplexExpand[Sin[x+y*I]] (展开复函数) Out[10]:=Cosh[y]Sin[x]+ICos[x]Sin[y]In[11]:=s=Expand[(x+y)^3];In[12]:=Coefficient[s,x^2] (取出s 中x^2项的系数) Out[12]=3yIn[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]=8x ?-2<,8x ?-H -1L 1?3<,8x ?H -1L 2?3<当求不出精确解时,Mathemaica 以符号形式给出结果In[4]:=x^5+5x+1==0; In[5]:=Solve[%4,x]Out[5]=8x ?Root @1+5#1+#15&,1D <,8x ?Root @1+5#1+#15&,2D <,8x ?Root @1+5#1+#15&,3D <,8x ?Root @1+5#1+#15&,4D <,8x ?Root @1+5#1+#15&,5D <上述方程求不出精确解,此时可求数值解. In[6]:=NSolve[%4,x]Out[6]= 8x ?-1.0045-1.06095?<,8x ?-1.0045+1.06095?<,8x ?-0.199936<,8x ?1.10447-1.05983?<,8x ?1.10447+1.05983?<如果要求在某点附近的数值解,使用FindRoot In[7]:=FindRoot[x*Sin[x]==1/2,{x,1}] Out[7]={x->0.740841}使用 Solve 还可以求解方程组.Out[8]三 微积分进行高等数学中的各种运算是Mathematica 的主要功能.Mathematica 可进行微积分、线性代数和工程数学中的许多运算.特别是其符号运算能力,令人惊叹.现在Mathematica 已受到越来越多科技工作者的欢迎和使用。
数学物理问题的 Mathematica 求解
对 a2 进行化简。设 a>0,写成习惯的形式为
u(x,t) = C1(x − at) + C2 (x + at)
按照方程的要求,这两个任意函数都应该存在二阶偏导数。
我们也可以用 DSolve 来求拉普拉斯方程 uxx + uyy = 0 的通解,命令语句为
Table[ Plot [Evaluate[u[x,t]/.First[%]],{t,0,0.3},PlotRange->{0,0.25}],{x,0.1,0.9,0.4}]
输出的结果为
x= 0.25
0.2
0.15
0.1
0.05
0.25 0.2
0.15 0.1
0.05
0.05 0.1 0.15 0.2 0.25 0.3 x=
DSolveB:uH2,0L@t, xD uH0,2L@t, xD, u@0, xD −x2, uH1,0L@0, xD 2 −x2 x>, u@t, xD, 8t, x<F
Mathematica 也是把输入的 uyy = y=0 = 2x
∫ ut
=
a2uxx 虽然存在形式上的通解 u(x, t)
=
1 2a πt
∞
− ( x−s)2
ϕ(s)e 4at ds ,但是用 DSolve 命令
−∞
DSolve[D[u[t,x],t] a^2 D[u[t,x],x,x],u[t,x],{t,x}] 得到的结果为
DSolve@uH1,0L@t, xD a2 uH0,2L@t, xD, u@t, xD, 8t, x<D
Mathematical用法 大全 实用版
In[6]:=Inverse[a](求a的逆矩阵);In[7]:=Det[a](矩阵的行列式);
In[8]:=Eigenvalues[a](求特征值);In[9]:=Eigenvectors[a](求特征向量);
设置默认工作文件夹:In[1]:=SetDirectory["D:\MODEL"]
读数据文件:先建立数据文件lianxi.txt,其中的数据用空格分隔。
In[1]:=d=ReadList[“lianxi.txt”,Table[Number,{2}]] (读到矩阵d中)
注:可用“File”菜单中的“Save”命令保存所有的输入和输出。
2.解方程:In[1]:=Solve[x^2+3*x = = 2];In[2]:=N[%];
In[3]:=Solve[a*x-b= = 0, x];
In[4]:=NSolve[{x-2*y= =0,x^2-y= =1},{x,y}](解方程组并得到数值解)
3.自定义函数:In[1]:= f [x_ ]:=x^2+2*x;In[2]:=f[5]+7;In[3]:=f[a+b]
In[10]:=RowReduce[a](把a化为阶梯形,可用于求矩阵的秩、判断线性相关性);In[11]:= b ={{5,6,7},{8,9,10}};In[12]:= a.b(矩阵a与b的乘积)
10.解线性方程组:
In[1]:= a ={{3,4,5,6},{6,8,10,12},{4,5,6,7},{5,6,7,8}};(a的秩为2)
11.求和:In[1]:=NSum[Sin[n]/n^3,{n,1,Infinity}](求级数 的和)
30Mathematica基本代数运算l
第三章初等代数运算命令与例题3.1多项式运算多项式是我们最熟悉的简单表达式,n 次一元多项式的一般形式为:P n(x) =a 0 +a1x+ a2x 2 +…+a n x n在Mathematica 中, 有关表达式的任何运算都可以应用到多项式中,特别,多项式的加减乘除四则运算只要用Mathematica 中的加减乘除号来连接两个多项式即可, 如:数学形式Mathematica 输入形式多项式相加(3+x 2) + (1-2x5 ) (3+x^2)+(1-2*x^5)多项式相减(3+x 2) - (1-2x5 ) (3+x^2)-(1-2*x^5)多项式相乘(3+x 2)(1-2x5 ) (3+x^2)*(1-2*x^5)多项式相除(3+x 2) ÷ (1-2x5 ) (3+x^2)/(1-2*x^5)上述多项式的运算只有多项式的加减可以计算外,多项式的乘除实际上不进行真正的运算,而只是以乘积或有理分式的形式表出,要想真正产生运算需用Mathematica 提供的多项式展开命令。
Mathematica 提供还提供了多项式因式分解,提取多项式幂次和系数等处理多项式的一些函数,下面列举其中的常用函数及功能:Mathematica 函数形式功能1) Expand[多项式] 把多项式按升幂展开2) Factor[多项式] 对多项式进行因式分解3) Collect[多项式,x] 把多项式按x的同次幂合并形式展开4) Simplify[多项式] 把多项式写成项数最小的形式5) Exponent[多项式, x] 取出多项式中x的最高幂数6) Coefficient[多项式,form] 取出多项式中form的系数7) Part[多项式, n] 取出多项式的第n项8) Length[多项式] 给出多项式的项数9) PolynomialQuotient[p,q, x] 计算p÷q的商,这里p,q是关于x的多项式10) PolynomialRemainder[p,q, x] 计算p÷q的余式,这里p,q是关于x的多项式11) PolynomialGCD[p,q, …] 求多项式p,q,…的最大公因子12) PolynomialGCD[p,q, …] 求多项式p,q,…的最小公倍数注:函数中的多项式可以是多元多项式,通常可以把多项式存放在一个变量中(用赋值语句),这样该变量就代表存入的多项式,使处理多项式更简单。
Mathematica编程语句与例题
例7: 用函数描述如下结果:任给一个整数x, 显示它被3除的余数。 解: Mathematica自定义函数:
In[19]:=f[x_]:=Switch[Mod[x,3], 0, Print["0 is the remainder on division of" ,x ,"by 3"], 1, Print["1 is the remainder on division of" ,x ,"by 3"], 2, Print["2 is the remainder on division of" ,x ,"by 3"] ] In[20]:= f[126] Out[20]= 0 is the remainder on division of 126 by 3 In[21]:= f[346] Out[21]= 1 is the remainder on division of 346 by 3 In[22]:= f[599] Out[22]= 2 is the remainder on division of 599 by 3
8.1.3 过程
在Mathematica中,一个用分号隔开的表达式序列称为一个复合表达式,它 也称为一个过程。 例如: In[11]:=s=1;u=s+3;u*u Out[11]=16 ★Mathematica的过程可以作为Module模块命令的表达式,如果不关心局部 变量问题,可以把一个过程用小括号括起来构成一个整体,这样可以用由小 括号括起来的过程来定义一个函数。 例如:已知有n个元素的一个数表x={a1,a2,…,an},定义一个计算此类数表最 大数与最小数平方差的函数,用过程来定义可以写为: In[12]:=g[x_]:=(m =Max[x];n = Min[x];m*m - n*n) 如果不用小括号括起来,而是写为 In[13]:=g[x_]:=m =Max[x];n = Min[x];m*m-n*n 则In[13]定义的g[x]实际上是Max[x],不是数表最大数与最小数平方差函数, 应该注意过程加小括号与不加括号的区别。本例题还可以用模块来定义函数: In[14]:=g[x_]:=Module[{m, n}, m =Max[x];n = Min[x];m*m-n*n]
Mathematica初等代数运算命令与例题
第三章初等代数运算命令与例题3.1多项式运算多项式是我们最熟悉的简单表达式,n 次一元多项式的一般形式为:P n(x) =a 0 +a1x+ a2x 2 +…+a n x n在Mathematica 中, 有关表达式的任何运算都可以应用到多项式中,特别,多项式的加减乘除四则运算只要用Mathematica 中的加减乘除号来连接两个多项式即可, 如:数学形式Mathematica 输入形式多项式相加(3+x 2) + (1-2x5 ) (3+x^2)+(1-2*x^5)多项式相减(3+x 2) - (1-2x5 ) (3+x^2)-(1-2*x^5)多项式相乘(3+x 2)(1-2x5 ) (3+x^2)*(1-2*x^5)多项式相除(3+x 2) ÷ (1-2x5 ) (3+x^2)/(1-2*x^5)上述多项式的运算只有多项式的加减可以计算外,多项式的乘除实际上不进行真正的运算,而只是以乘积或有理分式的形式表出,要想真正产生运算需用Mathematica 提供的多项式展开命令。
Mathematica 提供还提供了多项式因式分解,提取多项式幂次和系数等处理多项式的一些函数,下面列举其中的常用函数及功能:Mathematica 函数形式功能1) Expand[多项式] 把多项式按升幂展开2) Factor[多项式] 对多项式进行因式分解3) Collect[多项式,x] 把多项式按x的同次幂合并形式展开4) Simplify[多项式] 把多项式写成项数最小的形式5) Exponent[多项式, x] 取出多项式中x的最高幂数6) Coefficient[多项式,form] 取出多项式中form的系数7) Part[多项式, n] 取出多项式的第n项8) Length[多项式] 给出多项式的项数9) PolynomialQuotient[p,q, x] 计算p÷q的商,这里p,q是关于x的多项式10) PolynomialRemainder[p,q, x] 计算p÷q的余式,这里p,q是关于x的多项式11) PolynomialGCD[p,q, …] 求多项式p,q,…的最大公因子12) PolynomialGCD[p,q, …] 求多项式p,q,…的最小公倍数注:函数中的多项式可以是多元多项式,通常可以把多项式存放在一个变量中(用赋值语句),这样该变量就代表存入的多项式,使处理多项式更简单。
Mathematica编程语言基础
f
is assumed to have a numerical value when its arguments are numeric quantities values of
f
f
cannot be changed
attributes of values of
f
cannot be changed
f
Out[13]=
p x_ ? NumberQ :FactorInteger x ; p 20
2, 18 , 3, 8 , 5, 4 , 7, 2 , 11, 1 , 13, 1 , 17, 1 , 19, 1
11
多种选择方案 |
Cases f a , f a, b , f a, a, a , f a ..
f a , f a, a, a
17
逻辑判断符号
的值相等时, 当x与y的值相等时,返回 与 的值相等时 返回true, 否则返回false 否则返回 x!=y或x≠y当x与y的值不相等时 返回true, x!=y或x≠y当x与y的值不相等时,返回true, 的值不相等时, 否则返回false 否则返回 x>y x<y x<=y或x≤y 或 x>=y或x≥y 或
Map ^ 2 &, a b c . & a, b, c
a2 b2 c2
3
a2 b2 c2 Out[410]=
Out[411]=
具有非符号头部的表达式
这是由纯函数所产生的一种结果
In[422]:=
Out[422]= Out[423]= Out[424]=
Out[425]//FullForm=
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例5 任给向量x=(x1,x2,…,xn),定义一个可以计算如下三中向量范数 的函数: 2
x 1 xi
i 1 n
x2
x
i 1
n
i
x
Max xi
解: In[12]:= norm[x_,p_]:=Which[p==1,Sum[Abs[x][[i]],{i,1,Length[x]}], p==2,Sqrt[Sum[Abs[x][[i]]^2,{i,1, Length[x]}]], True,Max[Abs[x]]] In[13]:=x={3, -4, 0}; In[14]:= norm[x,1] Out[14]=7 In[15]:= norm[x,2] Out[15]=5 In[16]:= norm[x,0] Out[16]=4
8.1.3 过程
在Mathematica中,一个用分号隔开的表达式序列称为一个复合表达式,它 也称为一个过程。 例如: In[11]:=s=1;u=s+3;u*u Out[11]=16 ★Mathematica的过程可以作为Module模块命令的表达式,如果不关心局部 变量问题,可以把一个过程用小括号括起来构成一个整体,这样可以用由小 括号括起来的过程来定义一个函数。 例如:已知有n个元素的一个数表x={a1,a2,…,an},定义一个计算此类数表最 大数与最小数平方差的函数,用过程来定义可以写为: In[12]:=g[x_]:=(m =Max[x];n = Min[x];m*m - n*n) 如果不用小括号括起来,而是写为 In[13]:=g[x_]:=m =Max[x];n = Min[x];m*m-n*n 则In[13]定义的g[x]实际上是Max[x],不是数表最大数与最小数平方差函数, 应该注意过程加小括号与不加括号的区别。本例题还可以用模块来定义函数: In[14]:=g[x_]:=Module[{m, n}, m =Max[x];n = Min[x];m*m-n*n]
例2: 写出分段函数
x sin x f ( x) x cos x
x 1 x 1
的Mathematica自定义函数形式,并画出其在[3,3]上的图形
解: 因此Mathematica 命令为: In[3]:= f[x_]:=If[x<1, x+Sin[x], x*Cos[x]] (或f[x_]:=If[x<1, x+Sin[x],x*Cos[x],”err”] ) In[4]:= Plot[f[x],{x,-3, 3}]
命令形式2:If [条件, 语句1, 语句2] 功能:根据条件的成立与否确定执行哪一个语句,具体执行为:条件 成立时,执行语句1,否则,执行语句2,并将语句执行结果作为If 语句的值。
命令形式3:If [条件, 语句1, 语句2, 语句3] 功能:根据条件的成立与否确定执行哪一个语句, 具体执行为:条件成 立时,执行语句1,条件不成立时,执行语句2,否则,执行语句3, 并将语 句执行结果作为If语句的值。
例7: 用函数描述如下结果:任给一个整数x, 显示它被3除的余数。
解: Mathematica自定义函数: In[19]:=f[x_]:=Switch[Mod[x,3], 0, Print["0 is the remainder on division of" ,x ,"by 3"], 1, Print["1 is the remainder on division of" ,x ,"by 3"], 2, Print["2 is the remainder on division of" ,x ,"by 3"] ] In[20]:= f[126] Out[20]= 0 is the remainder on division of 126 by 3 In[21]:= f[346] Out[21]= 1 is the remainder on division of 346 by 3 In[22]:= f[599] Out[22]= 2 is the remainder on division of 599 by 3
例1:用Mathematica命令描述下面问题:先产生一个函数[0,1]内的 随机实数,再判断该随机数是否小于0.5, 如果小于0.5, 则将此 随机数显示出来,否则显示”***”。 解: Mathematica 命令为: In[1]:= p= Random[]; If[p<0.5, p, “***”] Out[1]=0.202857 In[2]:= If[(p=Random[])<0.5, p, “***”]) Out[2]= ***
第八章 Mathematica编程语句与例题
北京交通大学
8.1全局变量、局部变量、过程
8.1.1全局变量
在Mathematica中键入的各种命令或在Mathematica的程序语句 中, 变量被赋值后, 必须用Mathematica清除变量的命令才能使其 还原为符号的变量, 称为全局变量。察看某变量是否为全局变量, 可以键入命令: ?变量名 Global`变量名… 说明该变量是全局变量,否则,就不是全局变量。
不同于全局变量, 称变量的赋值效果只在某一模块内有效的 变量为局部变量。
Mathematica 中Module模块的命令为: Module[{变量表}, 表达式 ] 例如: 在Mathematica键入 In[4]:= u=5; In[5]: = s=Module[{u, v=1}, u=1; v=u+v+3] Out[5]= 5 In[6]:= Print[u, " ", v, " " ,s] Out[6]= 5 v 5
的Mathematica自定义函数形式,并画出其在[0,60]上的图形。 解: 因此Mathematica 命令为: In[17]:=f[x_]:= Which[x<=0,0,x<=10,10+2x,x<=20,30,x<=40,30(x-20)/2, x<=50,20,x<=60,20-(x-50)*2,x>60,0 ] In[18]:= Plot[f[x],{x,0,60}]
8.2.2 Which 语句
命令形式1:Which[条件1,语句1,条件2,语句2, ... ,条件n,语
句n] 功能:由条件1开始按顺序依次判断相应的条件是否成立,若第 一个成立的条件为条件k,则执行对应的语句k。
命令形式2:Which[条件1,语句1,条件2,语句2, ... ,条件n,语
8.3循环控制语句
Mathematica的循环控制语句有三种语句: Do 语句,For语句,While语句。 为处理有时需要中途退出循环语句的问题, Mathematica 还提供了在执 行循环语句时退出循环体的语句: Return[expr] 退出函数所有过程和循环,返回expr值 Break[] 结束本层循环 Continue[ ] 转向本层For语句或While语句的下一次循环
命令中的变量s, u的值将会影响随后的命令, 如果写成 此时命令中的变量s, u就是局部变量, 它们的值将不会影响随 后的命令。
In[10]:= Module[{s, u, x}, s=Sin[x];u= Cos[x]; D[s*u, x]] Out[10]= Cos2[x$1] - Sin2[x$1]
8.2条件控制语句
Mathematica涉及条件选择的语句有好几种,这里介绍常用的三种语 句: if 语句, Which 语句,Switch 语句。
8.2.1 If 语句 If 语句的一般形式为: If[ 条件, 语句或语句列] 具体形式有 命令形式1:If [条件, 语句1] 功能:如果条件成立,则执行对应的语句1,并将语句执行结果作为If 语句的值,如果条件不成立,不执行语句1。
句n,True,"字符串"] 功能:由条件1开始按顺序依次判断相应的条件是否成立,若第 一个成立的条件为条件k,则执行对应的语句k,若直到条件n 都不成立时,则返回符号字符串。
例4:写出一元二次方程ax2 + bx + c = 0判 别根的类型的Mathematica自定义函数形式。 解:一元二次方程根的判别式为 =b2 -4ac, 当>0时方程有两个实根; 当<0时方程有 两个复根; 当=0时方程有两个实重根, 它 有多于两种的选择,故可以用Which语句表 示。 Mathematica命令为 In[8]:=g[a_, b_, c_]:=(w=b^24*a*c;Which[w>0,"two real roots", w<0,"two complex roots",w == 0,"duplicate roots" ]) In[9]:=g[0,1,2] Out[9]= two real roots In[10]:=g[3,1,2] Out[10]= two complex roots In[11]:=g[3,0,0] Out[11]=duplicate roots
在Mathematica的循环结构中,使用如下表示式,可以达到简洁,快速的目的. k++ 表示赋值关系 k = k+1 , ++k 表示先处理k的值,再做赋值 k=k+1 k-- 表示赋值关系 k = k-1 --k 表示先处理k的值,再做赋值 k=k-1 {x,y}={y,x} 表示交换x与y 值 x+=k 表示 x = x + k x*=k 表示 x = x * k