联立四个方程解方程组,用mathematica求方程组怎么做

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
MATHEMATICA中如何解方程组已知3个平面的公式为x+2y+3z=42x+3y+4z=5x+3y+5z=7如何用MATHEMATICA求出其交线的公式
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
在新浪上有同一个问题,不知道是不是你问的,输入:Reduce[{x + 2 y + 3 z == 4,2 x + 3 y + 4 z == 5,x + 3 y + 5 z == 7},{x,y,z}]输出:Out[1]= y == -1 - 2 x && z == 2 + x做题时把双等号改成等号,&&换成大括号就行了.
为您推荐:
其他类似问题
扫描下载二维码联立四个方程解方程组,用mathematica怎么做?
联立四个方程解方程组,用mathematica怎么做?
08-12-26 &
请登录后再发表评论!
类似以下格式,自己看吧,我估计你mathematica符号表达式用不来,建议借书看看,肯定有例题 Solve[{x*(0..21372*(1 - y*Exp[-2z]) - a) == 0.00137, x*(0..21372*(1 - y*Exp[-16z]) - a) == 0.00393, x*(0..21372*(1 - y*Exp[-109z]) - a) == 0.01332, x*(0..21372*(1 - y*Exp[-207z]) - a) == 0.01453}, {x, y, z, a}]
请登录后再发表评论!Mathematica教程(中科大教案)_学霸学习网
Mathematica教程(中科大教案)
绪论0.1 符号计算系统简介# 数值计算与符号计算1946 年 世 界 上 第 一 台 计 算 机 ENIAC (The Electronic Numerical Integratorand Computer)是为数值积分服务的。 一提起计算机求解人们立刻想到的是数值求解,这是因为计算机的早期应用范围主 要是数值求解。其实数值求解是计算机求解的一个方面,计算机进行计算的另一方面即 对数学表示式的处理已形成一门新的科学分支,称为符号计算或计算机代数,它是一门 研究使用计算机进行数学公式推导的理论和方法,演算数学公式的理论和算法是它研究 的中心课题。 数值计算: 常量、变量、函数、运算符 --〉数值、字符、逻辑量 表达式一个值 多 一 近似计算 例:计算 y=sin10+ln10。其结果是 1.75856。 在高级语言中,算术表达式由常 量、变量、函数和运算符等组成,算术表达式的 值为某一精度范围内的数值。计算各类表达式的值是高级语言的主要工作。 符号计算(计算机代数): 常量、变量值、函数值 --〉数值、字符、逻辑量 表达式表达式 多 多 准确计算??x sinxdx=-(-2+x )cosx+2xsinx2 2与数值计算相比,符号计算对计算机硬件和软件提出了更高的要求。#符号计算系统符号计算系统是一个表示数学知识和数学工具的系统, 一个集成化的计算机数学软件系统。 # # # # 数值计算、 符号计算、 图形演示 程序设计公式推导、数值计算和图形可视化操作一致性和连贯性。 符号计算系统的对象从初 等数学到高等数学,几乎涉及所有数学学科。包括各种数 学表达式的化简、多项式的四则运算、求最大公因式、因式分解(factor)、常微分方程 和偏微分方程的解函数。各种特殊函数的推导、函数的级数展开、矩阵和行列式的各种 运算和线性方程组的符号解等。 和数值计算一样,算法也是符号计算的核心。就算法而言,符号计算比数值计算能 继承更多的更丰富的数学遗产,古典数学家许多算法仍然是核心算法的成员,近代数学 的算法成果也在不断地充实到符号计算中。 符号计算已成功地应用于几乎所有的科学技术和工程领域,其中包括数学理论领 域。由于它和数值计算一样,能够正确地完成人在短时间内无法完成的公式推导计算, 使得不少研究领域的前沿向前推移。# 符号计算的应用?验证公式的工具 在十九世纪,法国文学家 CharlesDelaunay 计算月亮的位置作为时间函数。从 1847 年到 1867 年用了 20 年的时间,完成并发表了长达数百页的计算方面的文章,推导了 近 四万个公式。到 1970 年 MIT 的一个研究小组以 Drprit 为首用符号计算软件对于 Delaunay 的计算公式进行复算,只用了 20 小时的 CPU 便完成了。复算表明原先的计 算只有 3 个 错误,其中一个错误是某项的系数是 3 而不是 2,另外两个错误是由此而 引起的。这是 一个很有代表性的例子。 例如:一个七个自由度行走的机器人,从运动方程求解加速度时,包括大量的多维 转换公式推导,可以有上百项,甚至上千项。这时只能用符号计算系统才能迅速、准确 的求解,在推导有限元的刚度矩阵中,在计算行列式展开和合并中,都可以用任何一个 符号计算系统来完成公式演算。 用符号计算系统进行公式推导,简单、正确和快速。它帮助科研人员摆脱了理论推 导中繁琐的一面,将精力更多的放在创造性的思维中。 ?理论研究中的实验方法 在物理、化学和生物学等许多自然科学领域中,实验是科学研究的一个手段。符号 计算系统的出现为数学领域和一些理论研究领域提供了“实验”工具。部分高校的“数 学实验室”应运而生。数学的创造大多来自直觉,用符号计算系统对设想的定理结论直 接验证,将待研究的方程绘出图形以观察变化趋势,会给科研人员带来不同程度的灵感 和启发,甚至会得到意想不到的收获。再将结果进行理论深化并加以严格证明。如今数 学实验已被一些数学工作者所接受。数学实验课程已列入国家教委 21 世纪教学改革的 重点课程之一。# 符号计算系统软件简介符号计算已有几十个软件系统,一般有专用系统和通用系统两类。通用符号计算系 统都具有数值计算、符号计算和图形功能。都有适合于从工作站到微机使用的多种版本。 符号计算语言是这种算法在计算机上的工具。符号计算系统由符号计算语言和若干软件 包组成。目前,典型的通用符号计算系统有:(按字母顺序排列) Axiom Macsyma Maple Mathematica Reduce Derive 符号计算系统通常都有两种运行方式:一种是交互式,每发一个命令,就执行一种 相应的数学计算。 另一种方式是写一段程序,执行一系列的命令,就想用 Fortran 或 C 写程序一样。 每个符号计算系统都有自己的程序设计语言,这些语言与通用的高级语言大同小异。请 看 C 语言和 Mathematica 中的几个语句形式:2 C 语 言 if(表达式)语句 1 else 语句 2 while(表达式)语句 for(初值;终值条件;增量)语句Mathematica If [表达式,语句 1, 语句 2] While[表达式,语句] For[初值,终值条件,增量,语句]1.2 Mathematica 简介Mathematica 是 美 国 Wolfram 研 究 公 司 开 发 的 符 号 计 算 系 统 。 1988 年 发 布 Mathematica 系统的 1.0 版,因系统精致的结构和强大的计算能力而广为流传,经不断 扩充和修改后,在 1991 年和 1997 年推出了功能更加充实和完善的 Mathematica2.0 版和 Mathematica3.0 版,在 1999 年推出了 Mathematica4.0 版。 Mathematica 是最大的单应用程序之一,它内容丰富功能强大的函数覆盖了初等数 学、微积分和线性代数等众多的数学领域,它包含了数学多方向的新方法和新技术;它 包含的近百个作图函数是数据可视化的最好工具;它的编辑功能完备的工作平台 Notebooks 已成为许多报告和论文的通用标准;在给用户最大自由限度的集成环境和优 良的系统开放性前题下,吸引了各领域和各行各业的用户。 现在 Mathematica 在世界上拥有超过一百万的用户,已在工程领域、计算机科学、 生物医学、金融和经济、数学、物理、化学和社会科学等范围得到应用。尤其在科研院 所和高等院校流行。 目前,至少有 14 种语言写成的 200 多册书籍和几种专门介绍 Mathematica 的期刊。 在英国和日本都有大学将 Mathematica 作为理工科学生入校必修的计算机课程之一。它 也是“数学模型”和“数学实验”课程最好的工具之一。世界各地的大学和高等教育工 作者已开发基于 Mathematica 的多门课程。 Mathematica 是用 C 语言编写的,Mathematica1.2 版大约有 150,000 行长。它吸取 了不同类型的软件的特点。 ?具有 BASIC 语言的简单易学的交户式操作方式 ?具有 MathCAD,Matlab 那样强的数值计算功能 ?具有 Maccsyma,Maple,Reduce 和 SMP 那样的符号计算功能 ?具有 APL 和 LISP 那样的人工智能列表处理功能 ?像 C 与 PASCAL 那样的结构化程序设计语言 # Mathematica 的开发者 Stephen Wolfram 是 Mathematica 的 创 始 人 , 并 公认 是 当 今 科 学 计 算 的 先 驱 。 Wolfram 1959 年生于伦敦。他在 Eton(伊顿公学),Oxford(牛津大学)和 Caltech(加州理工 学院)受教育。他在 15 岁发表了第一篇科技论文,于 1979 年 20 岁时在加州理 工学院 获理论物理学博士学位。 从 1973 年开始使用计算机,1981 年主持开发了第一个计算机代数系统 SMP。 Wolfram 的研究范围包括了物理学、数学和计算机的许多领域。他早期的工作主要 在能物理、量子场论和宇宙学方面。由于他在物理和计算方面的成绩,1981 年成为最年 轻的麦克阿(MacArthur)奖学金获奖者。Wolfram 所做的元细胞自动机(cellularautomata)的计 算模型应用到数学和物理出现的复杂系统。Wolfram 关于元细胞自动机的工作已在3 许多不同的邻域得到广泛的应用,它导致生物学和物理学中图样生成的新模型,以及研 究混沌和随机性的新方法。Wolfram 发明了基于元细胞自动机的快速加密系统。1986 年, 他创办了杂志 Comliex Systems。担任过伊里诺大学复杂系统研究中心的主任,物理学、 数学和计算机科学教授。 从 Wolfram Research 公司创办开始,Stephen Wolfram 就担任公司的总裁并致力于 Mathematica 的发展,Wolfram 负责 Mathematica 的总体设计,他写了 Mathematica 大部 分的基本核心代码。 DanielR.Grayson 是伊里诺大学的数学教授。他于 1976 年在麻省理工获得数学博士 学位,曾在哥伦比亚大学和高等研究所工作。他写了 Mathematica 的数学部分的许多内 容,包括任意精度的算术运算、解方程、矩阵演算、幂级数和椭圆函数。Grayson 主要 的研究兴趣是代数 K 理论,这个数学分支把代数几何、线性代数和数论的概念结合在一 起。Grayson 广泛地使用计算机研究数论中的猜想。在参加 Mathematica 工作以前, Grayson 开发了一种用于数论研究的交互式计算机系统。 Roman E.Maeder 负责 Mathematica 的符号积分、多项式因式分解和其它多项式运 算。Maeder 于 1986 年在苏黎世高等工艺学院获得博士学位,其论文是关于程序设计语 言的数学理论。从 1983 年起,Maeder 的工作领域是计算机代数及其对数学教育的应用。 他给计算数学研究生开设了“数学实验室”课程。 StephenM.Omobundro 写了 Mathematica 的三维图形程序代码。Omobundro 于 1985 年在伯克力加州大学获数学物理学博士学位。1985 至 1986 年他曾在 Think Machines 公 司从事大规模并行计算的算法方面的工作。他是 Connection Machine 计算机用的 LISP 语言设计者之一。1.3 初识 MathematicaMathematica 是什么? Mathematica 能做什么? 希望 Mathematica 会成为你工作和学习中的好伙伴!# 进入 math4.0在“开始”菜单中的“程序”中单击,进入 Mathematica4.0之后,得到如下的 Notebook 窗口,并给 Notebook 暂时取名 Untitled-1,直到用户保存时 另命名为止。 假定用户已经掌握 windows 中下列常规操作: ?单击:单击鼠标左键;双击:快速地连续击两次鼠标左键; 拖放:按住鼠标左键拖动鼠标。 在文件菜单中保存、打开关闭文件等操作。图 0 -1 Mathematic 4.0 窗口4 # 退出 math4.0在“File”菜单中选择“Exit”命令或按“Alt+F4”。如果窗口中还有内容没有保存到 Notebook 中,这时会出现一个对话框,系统要问你是否保存 Notebook,单击对话框上的“否(N)” 按钮则关闭窗口;单击“是(Y)”按钮,则保存 Notebooks 后退出窗口。退出后返回到调 入 Mathematica 以前的状态。# 输入和计算表达式运行命令方式:按 Shift+Enter In[1]:= Out[1]= (* 像在用一个计算器*) 对 x ?12x ?145x+1716 因式分解; In[2]:= Factor[x^3-12x^2-145x+1716] Out[2]= (-13 + x) (-11 + x) (12 +x) In[3]:=Expand[(x-3)(y^2-x+6)] (* 展开多项式*) Out[3]= ?18 + 9 x ??x ??3 y + x y In[4]:=GCD[391,561,357] Out[4]=17 In[5]:=LCM[21,29,35] Out[5]=3045 解方程组 ??? (* 计算 21,29,35 的最小公倍数*)2 2 2 3 2计算 391,561,357 的最大公约数;?3x?2y?5 ?? x ??y ??5In[6]:=Solve[{3x-2y==5,x+y==5},{x,y}] Out[6]={{x-&3,y-&2}} 计算dx 2 sinx dx2In[7]:=D[x^2Sin[x],x] Out[7]=x Cos[x] + 2 xSin[x]计算不定积分??x sinxdx2 2In[8]:=Integrate[x^2Sin[x],x] Out[8]= -(-2 + x1.3)Cos[x] + 2 xSin[x]2计算定积分cosx??2 ??? sin xdx1.1In[9]:=Integrate[(Cos[x]+2)/Sin[x]^2,{x,1.1,1.3}]5 Out[9]=0.546958 定义矩阵 AA,AB,AC; In[10]:=AA={{1,2,3,4},{3,2,5,6},{1,2,-1,2},{0,2,5,7}}; AB={{7,6,5,4},{8,5,3,2},{9,6,1,8},{0,-3,-4,5}}; AC={{3,1,2,0},{4,5,0,8},{6,7,1,9},{7,8,2,3}} In[11]:=TableForm[AA.AB+AC] (* 矩阵运算如此简单 !*) In[12]:=Plot[x^5-3x+7,{x,-3,3}]15 12.5 10 7.5 5 2.5 -3 -2 -1 1 2 3图 0-3Out[12]=-Graphics(* 一个命令,一个图形呼之而出*) In[13]:= ParametricPlot[{Sin[0.99t]0.7*Cos[3.01t],Cos[1.01t]+0.1Sin[15.03t]},{t,-150,150}, PlotStyle -& RGBColor[0.2, 0.5,0.3],PlotPoints -& 300, Axes &None]画出马鞍面 z?? x ?? y ,?5?? x??5,?5?? y??52 2In[14]:=Plot3D[x^2-y^2,{x,-5,5},{y,-5,5}, BoxRatios -&{1,1,1}]6 画一副分形图。 In[15]:= f[x_,y_,lim_]:=Module[{z, ct =0}, z = x + I While[Abs[z] & 2.0 && ct &=lim, z = z^2 +Sin[ x]+ I ++ct];ct] DensityPlot[f[x,y,50],{x,-2,1},{y,-1.5,1.5}, PlotPoints -&200,Mesh -&False,ColorFunction-&Hue]打开与计算机相连的音响,运行下列命令后,你会听到 Sin 抑扬顿挫的声音和声 波的振幅数据图。In[16]:= Play[Sin[1599t ^3 - 75 Sin[59t]],{t,0,9}]7 0.4 获胜帮助# 获取函数和命令的帮助在 Windows 和 DOS 下都用?或??可向系统简单而直接获取帮助信息。用? 或??可向系统查询运算符、函数和命令的定义和用法。 ? name 显示有关 name 的信息 ??name 显示有关 name 的详细信息 ? A* 显示以字母 A 为开头的一 切客体的名称例如, 向系统查询运算 符 :=的定义 In[1]:=?:= 向系统查询求和函数 Sum 的用法; In[2]:=?Sum 显示所有以 Plot 为开头的函数。 In[3]:=?Plot*# Mathmatica 6.0 帮助文档中心8 # Mathmatica 4.0 Help 菜单选项卡名称 Built - inFunction Add-ons MathematicaBook GettingStarted/Demos OtherInformation MasterIndex 说 明 内建函数按数值计算、代数计算、图形和编程分类存放 程序包(StandardPackages),MathLinkLibrary 等内容 The 一本完整的 Mathematica 的使用手册 初学者首选处,有初学者入门指南和多种演示 菜单命令的快捷键,二维输入格式等 按字母顺序给出命令、函数和选项的索引表9 第 1 章 Mathematica 的基本量1.1 数与数的表示1.1.1 数值类型Mathematica 的简单数值类型有整数、有理数、实数和复数。 简单数值类型 类型 整数 有理数 实数 复数 例题:In[1]:=2^1000 In[2]= In[3]:=1+1/2+0.2 In[4]:=Sqrt[-9] In[5]:=Exp[3.+7I]描述 Integer Rational Real Complex例 43/.3 I特 征 说明 任意长度的精确整数 化简过的分数 任意精确度的近似实数 实部和虚部可为整数、有理数、实数 表 1 -11.1.2 数学常数在 Mathematica 中定义了一些数学常数.例如:表示圆周率的?,无穷大的?? 。 数学常数 Pi E Degree I Infinity 意义 ?=3.14159… 自然对数的底 e =2.71828...1o (1 度),?/180 虚数单位 i = ?1?,无穷大表 1 -2 数学常数可以直接用在公式推导中,Mathematica 中的数学常数都是精确数;用在 数值计算中的数学常数可以取任意精确度。 In[1]:=2Pi+Pi^2 2 Out[1]= 2p + p (* 结果仍是准确值*) In[2]:=Pi+1.2 (*或 ?+1.2 *) Out[2]=4.34159 (* ??取值 3.14159*)10 1.1.3 有理数与实数的转换(* % 对 1/3 取 18 位有效数字 *)In[2]:=Rationalize[%] (* %表示上一个输出结果*) 有些 实数无法转换为有理数,这时要给出转换时允许的误差范围。 In[3]:=Rationalize[N[Pi]] Out[3]=3.14159 (* 找不到完全等于?? 的有理数,只能保存实数形式的? *) In[4]:= Rationalize[N[Pi],10^(-9)]In[1]:=N[1/3,18]数值转换函数 N[x] N[x,n] Rationalize[x] Rationalize[x,dx]说明 将 x 转变实数形式 将 x 转变为最多具有 n 个数字位精确度的近似实数 给出一个近似于 x 的有理数 给出一个误差在 dx 内近似于 x 的有理数 表 1 -31.1.4 数的输出形式数值输出函数 N [表达式] N [表达式, n] ScientificForm [表 达 式]说明 以实数形式输出表达式 以 n 位精度的实数形式表示表达式 科学记数法 表 1 -4观察 In[1]和 In[2]运算结果的区别 In[1]:=Sin[2/3] + Cos[1/3] + Pi - 3Sin[2/3] In[2]:=Sin[2./3] + Cos[1/3] + Pi - 3Sin[2/3] In[2]:=N[Pi,20] 要求运算结果共有 20 位有效数字, In[3]:=ScientificForm[%*12345]Out[3]//ScientificForm=3.In[4]:=ScientificForm[a+b]a 和 b 没有数值,输出?1.2 变量1.2.1 给变量取名在 Mathematica 中变量名以英文字母开头,后跟字母或数字,变量名字符的长度 不限。英文字母中大小写意义不同,因此 A 与 a 表示两个不同的变量。在 Mathematica 中变量即取即用,不需要先说明变量的类型再使用。在 Mathematica 中变量不仅可存放 一个整数或复数,还可存放一个多项式或复杂的图形。11 1.2.2 给变量赋值在 Mathematica 中,运算符“=”或“:=”起赋值作用,有关运算符“:=”的定 义请看第 7 章。运算符“=”的一般形式为: 变量 =表达式 变量 1= 变量 2= 表达式In[1]:= u = v =1 (* 与 C 语言类似,可给变量连续赋值*) Out[1]=1 In[2]:= f =x^2+x-3.2;f 表示一个多项式,输入命令后以分号结尾,则不输出运算结果。In[3]:= m =Table[i+j,{i,5},{j,5}];m 表示一个 5 行 5 列的表,In[4]:= d = Plot[Sin[x],{x,-Pi,Pi}] In[5]:=Show[d](* d 表示一个图形*)屏幕再现变量 d 所保存的图形,图略。 在 In[1]中给 u 和 v 赋值 1,如果要给 u 和 v 赋以不同的值,可用两次定义赋值, 也可用形式:{u,v}={值 1, 值 2}。有了这种变量的赋值形式,交换两个或多个变量的 值也就有了{ u, v}= { v ,u}的形式。例如: In[1]:={x, y, z}= {11,22,33} Out[1]={11, 22,33}In[2]:= 3 x+2y Out[2]=77 In[3]:= {x, y}={y,x}Out[3]={22,1 1}In[4]:= 3 x+2y Out[4]=88 下列给变量赋值的常用形式: 赋值形式 x = value x = y = value {x, y} = {value1,value2} {x, y} = {y, x} x=. Clear[x]意 义 给 x 定义值 value 给 x 和 y 定义同一值 value 给 x 和 y 定义不同的值 交换 x 和 y 的值 清除变量 x 的值 清除变量 x 的定义和定义的值 表 1 -51.2.3 变量替换变量有两种获取值的方式,赋值是一种方式,变量替换是另一种方式。 变量替换的一般形式: expr /. lhs -& rhs 用 rhs 替换 expr 中的 lhs expr /. {lhs1 -& rhs1, lhs2 -& rhs2,…} 分别用 rhsi 替换 expr 中的 lhsi 定义中的 lhs 可为变量名、函数名等多种成分。 In[1]= f =x^2+1 In[2]:= f/.x-&1 (* 用 1 替换 f 中的 x *) In[3]:=f/.x-&2.5 In[4]:= g =x^2+y^2;12 g/.{x-&2,y-&1} (*在 g 中替换 x,y 两个变量*) 还能对 表达式中的函数名做替换,更复杂的替换规则,请看第 7 章。In[5]:=Sin[1-x]+ Sin[x]/.Sin -&Cos Out[5]=Cos[1-x]+Cos[x]1.3 表将一些有关联的数据元素组成一个整体,在 Mathematica 中,这样的数据结构称为表 (List)。用表可以表示数学中的集合、向量和矩阵,也可表示数据库中的一组记录。在 Mathematica 中,既可对整体数据表操作,也可对表的单个元素操作。 表在形式上是用花括号括起来的若干元素,元素之间用逗号分割。 表中的元素 可为任何数据类型。表的元素可为数值、表达式和表。表是一种嵌套 结构形式的定义。同一个表中的元素可为不同的数据类型。表中元素较少时,直接使 用形式: 变量={元素 1,元素 2,...}键入表中元素,即在给出表名的同时又建立了表中元 素。在学习建表命令前,先了解 Mathematica 中的循环描述。 循环描述形式:{ 循环变量,循环初值,循环终值,步长} 循环变量从循环初值开始,按步长逐步递增或递减(步长可为正值或负值),一直 做到循环终值的界限终止。 循环变量、循环初值、循环终值和步长可为整数、有理数和实数。 表 1 - 6 列出几种常用的循环形式: 循环描述 {i, min, max,step} {i, min,max} {i,max} {max} {i, imin, imax},{j, jmin,jmax} {i,i0,i1,istep},{j,j0,j1,jstep} 说 明 i 从 min 到 max ,按步长 step 增加 同上。步长 step 为 1 时可省略不写 i 从 1 到 max 。初值 min 为 1 时可省略不写 重复 max 次 i 从 imin 到 imax,对每一个 i 值,j 从 jmin 到 jmax 同上。i 的步长 isep,j 的步长 jstep 表 1 -61.3.1 建表函数用建表命令 Table 能方便地构造既有表的大小范围,又有表的元素的表。用 Range 生成元素为数值的数列。本节面向一般的表,有关建立向量和矩阵的细则,请参阅第 4 章。建表命令的一般形式如下: Table[通项公式,{循环范围},{循环范围}…] 按循环范围定义表的大小范围和层次,用通项公式的规则定义表的元素。 Range[初值,终值,步长] 生成值为{初值,初值+步长,….}的数值表,其中最后的值不超过终值。 下面给出建表函数常用形式和实例。 建 表 函数 说 明 Table [f, {i, min, max,step}] 定义 f 的数值表,i 从 min 变到 max,以 step 为步长 Table [f, {i, min,max}] 定义 f 的数值表,i 从 min 变到 max ,步长为 1 Table[f,{max}] 给出 max 个元素 f 的表13 Table [f,{i,imin,imax,},{j,jmin,jmax},...]生成一个多维表 TableForm[a] 以表列格式显示表 a Range [n] 生成一个 {1,2,...,n}的数列 Range [n1,n2,d] 生成 {n1,n1+d,n1+2d,...}的数列 表 1 -7 In[1]:=Range[3,10,2] In[2]:= a = Table[Random[],{3}] In[3]:= b =Table[i+j?1,{i,1,3},{j,1,3}] In[4]:=TableForm[%]Out[4]//TableForm=1 2 32 3 43 4 51.3.2 表的分量表示表的分量 t[[n]] 或 Part [t,n] t[[?n]] 或 Part [t,?n] First [list] Last [list] t[[{n1,n2,...}]]或 Part [t,{n1,n2,n3....}] t[[i,j]]In[1]:=s=Range[2,12,2]说明 t 中的第 n 个元素 t 的倒数第 n 个元素 list 中的第一个元素 list 中的最后一个元素 给出由 t 的第 n1,n2,n3....个元素组成的表 t 的第 i 个子表的第 j 个元素 表 1 -8In[2]:={Last[s], s[[1]], First[s], s[[?6]], Part[s,?1]} In[3]:= u =Table[10*m+n,{m,3},{n,3}]表 u 的第一个子表是矩阵的第一行元素。 In[4]:= {First[u],Last[u]} In[5]:=u[[2,2]] (* 表 u 的第二个子表的第二个元素*) 而由表 u 的第二个子表和第三个子表的组合为: In[6]:=u[[{2,3}]] Mathematica 还提供了一些表操作的函数,例如:插入或删除表的单个元素或部分 元素。在函数中,用正数表示表的顺数元素的位置,用负数表示表的倒数元素的位置。 在操作中,要特别注意的是在执行插入或删除表的元素后,表本身有没有变化。例如: In[1]:=x={1,2,3,4} Out[1]={1,2,3,4} In[2]:=Insert[x,5,2] (*在表的第 2 个位置插入元素 5 *) Out[2]={1,5,2,3,4} In[3]:=x Out[3]={1,2,3,4} In[4]:=Append[x,6] Out[4]={1,2,3,4,6} In[5]:=x Out[5]={1,2,3,4} (* 表的元素没有变化*) In[6]:=AppendTo[x,6] Out[6]={1,2,3,4,6}In [7]:=x14 Out[7]={1,2,3,4,6}(* AppendTo 的插入效果*)下面列出有关表的操作函数: 表的编辑函数 Insert [list, expr, n] Insert [list, expr,?n] Prepend [list, expr] Append [list,expr] AppendTo [list,expr] Take [list, n] Take [list,?n] Take[list,{m,n}] Rest[list] Drop[list, n] Drop[list,?n] Drop[list, {m,n}] ReplacePart[list, expr,n] Length[list]说明 给出在表 list 的第 n 位置插入 expr 后的结果 给出在表 list 的倒数第 n 位置插入 expr 后的结果 给出在表 list 的首部插入元素 expr 后的结果 给出在表 list 的末尾插入元素 expr 的表 在表 list 的末尾插入元素 expr 取 list 中的前 n 个元素 取 list 的后 n 个元素 取从 m 到 n 的元素(包括 m,n 在内) 给出删掉 list 第一个元素之后的集合 给出删掉 list 前 n 个元素之后的集合 给出删掉 list 后 n 个元素之后的集合 给出删掉 list 第 m 到第 n 个元素的集合 用 expr 替换 list 中第 n 个元素 给出表 list 中元素的数目 表 1 -9In[1]:=s={a,b,c,d,e}; In[2]:={Take[s,2],Take[s,2],Take[s,{2,4}]}In[3]:=s=Insert[s,u,3] In[4]:=Drop[s,{2,3}] Out[4]={a,c,d,e} (*删掉第 2 和第 3 个元素之后的 s*) In[5]:=s (* s 并没有变化*) Out[5]={a, b, u, c, d,e}In[6]:=ReplacePart[s, M,2]In[7]:=ReplacePart[s,N,-2]1.3.3 表的结构运算当一个表与一个标量作四则运算时,标量与每个表元素作用一次,运算结果仍然 是表,当二个表进行加减运算时,要求两个表的大小结构相同。二个表进行乘除和其 它运算请看线性代数部分。下面给出有关表的运算函数和实例。 函 数 说明 Join [list1, list2,...] 把几个表连成一个表 Union [list1, list2,...] 合并几个表,去掉表中重复的元素,然后对元素排 序 Sort [list] 将表 list 的元素按照标准顺序排序 Union [list] 去掉重复的元素后对元素排序 Reverse [list] 将表 list 中元素的顺序倒过来 RotateLeft [list, n] 将表 list 中元素向左转 n 个位置 RotateRight [list, n] 将表 list 中元素向右转 n 个位置 Apply [Plus,list] 把 list 中的所有元素加在一起 Apply [Times,list] 把 list 中的所有元素乘在一起 表 1 -1015 函数 Apply 的一般形式: Apply [ f, expr ] 可以看成函数或算子 f 作用于表达式 expr。Apply 的用法简单灵 活,我们将多次用到不同的对象中。 In[1]:= a={5,8,5,7,2,6}; 将表 a 中所有的元素相加;In[2]:=Apply[Plus,a] Out[2]=33将表 a 中所有的元素相乘;In[3]:=Apply[Times,a] Out[3]=16800 In[4]:=b=Table[Random[Integer,{10,100}],{12}] Out[4]={56,93,88,20,42,90,65,29,17,67,26,47}将随机形成 10 至 100 以内的整数元素表 b 由小至大顺序排列;In[5]:=Sort[b] Out[5]={17,20,26,29,42,47,56,65,67,88,90,93}反转表 b,即表元素由大至小排列;In[6]:=Reverse[%] Out[6]={93,90,88,67,65,56,47,42,29,26,20,17}删除表中第一个元素;In[7]:=Rest[%] Out[7]={90,88,67,65,56,47,42,29,26,20,17}删除表中第三至第五个元素;In[8]:=Drop[%,{3,5}]在表的第 1 个位置上插入元素 99 ;In[9]:=Insert[%,99,1]计算表中元素的个数。In[10]:=Length[%]1.3.4 表的集合运算关数学集合运算的函数: 集合运算函数 Union [list1,list2,...] Intersection [list1,list2,...] Complement[un,list1,list2,...] 说明 给出表 list1, list2,..中不同元素的一个表 给出表 list1, list2,..中公共元素的一个表 给出在 un 中但不在表 list1,list2,..中的元素 表 1-11In[1]:=Union[{c,a,b},{d,a,c},{a,e}] Out[1]={a,b,c,d,e} In[2]:=Join[{c,a,b},{d,a,c},{a,e}] Out[2]={c,a,b,d,a,c,a,e} Out[3]={a,b}(* 只保存一个 a 元素*)(* 所有的 a 元素都保存*) (* 表{a,c,b}与{b,a,d,a}的相同元素*)In[3]:=Intersection[{a,c,b},{b,a,d,a}]16 In[4]:=Complement[{a,b,c,d},{a,d}] Out[4]={b,c}(* 给出在{a,b,c,d}中而不在{a,d}中的元素*)1.4 函数# 常用数值函数实变量的数值函数 Round [x] Floor [x] Ceiling [x] Abs[x] Sign [x] IntegerPart [x] FractionalPart [x] Max[x1,x2,...] 或 Max[s] Min [x1,x2,...] 或 Min[s] 说明 最接近 x 的整数 不大于 x 的最大整数 不小于 x 的最大整数 x 的绝对值 取符号函数。x&0 时为 1,x=0 时为 0, x&0 时为-1 取数 x 的整数部分 取数 x 的小数部分 取 x1,x2,...中的最大值。s 为一集合或数组 取 x1,x2,...中的最小值。s 为一集合或数组 表 1 -12 In[1]:={Round[9.7],Floor[9.7],Ceiling[9.7]} In[2]:= {Round[?9.7], Floor[?9.7],Ceiling[?9.7]} In[3]:=Min[1,9,7,5,2] (* 计算{1,9,7,5,2}中的最小元素*) 计算矩阵 b 的最大元素 In[4]:= b ={{1,2,3},{2,3,4},{3,4,5}};Max[b] In[5]:=Max[b[[1]]] (*计算 b 的第一行的最大元素*)在 Mathematica 中有复数的数值类型,也有相应的用复数运算的函数。计算复数 的 模(Abs)、复数的幅角(Arg)和取复数的虚部都是复数运算中的常规操作。当 z 是 实变量时,Abs[z]是 z 的绝对值 |z| ; 当z 是复变量时,Abs[z]是 z 的模 下面列出常用的复变量的数值函数和实例。 复变量的数值函数 Re [z] Im[z] Conjugate [z] Abs[z] Arg[z] (z=x+I y) 取复数的实部 取复数的虚部 共轭函数 复数的模 复数的幅角 表 1 -132 x2 ? y。In[6]:=z=3.?5I; In[7]:={Abs[z],Arg[z],Conjugate[z]}In[ 8]:= u=3?5I (* 请观察 z 与 u 的区别 *)In[9]:={Abs[u],Arg[u],Conjugate[u]}# 三角函数变量可为实数或复数的函数 Exp [z] 说明 指数函数, e .z17 Log [z] Log [b,z] Sin[z],Cos[z],Tan[z],Cot[z] Csc[z],Sec[z] ArcSin[z],ArcCos[z],ArcTan[z],ArcCot[z] ArcCsc[z],ArcSec[z] Sinh[z],Cosh[z],Tanh[z],Coth[z], Csch[z],Sech[z] ArcSinh[z],ArcCosh[z],ArcTanh[z], ArcCoth[z],ArcCsch[z], ArcSech[z]以 e 为底的对数函数,ln z 以 b 为底的对数函数,logbz 正弦、余弦、正切和余切函数 余割,正割 反三角函数 双曲函数 反双曲函数 表 1 - 14# 伪随机函数Random [ 数据类型,数据范围,n] 生成在“数据范围”内的 n 位精度“数据类型”限定的随机数。其中数据类型有: 整数、实数和复数。 伪随机函数 Random [] Random [Real, xmax, n] Random[Real,{xmin,xmax}] Random[Complex] Random[Complex,{zmin,zmax}] Random[Integer] Random[Integer,{imin,imax}] SeedRandom [] SeedRandom[s] 说明 0 到 1 之间的一个伪随机实数 0 到 xmax 之间的一个 n 位精度的伪随机实数 Xmin 到 xmax 之间的一个伪随机实数 单位正方形中的一个伪随机复数 由 zmin 和 zmax 确定的长方形中的一个伪随机复数 0 或 1 的随机数 Imin 到 imax 之间的一个伪随机整数 用当前时间作为伪随机数发生器的种子 用整数 s 作为种子 表 1 - 15# 整数和组合函数在 Mathematica 中,计算整数 m 与 n 相除的正余数用 Mod[m,n],计算 n1,n2,..的 最 大公因子用 GCD [n1,n2,...],计算 n1,n2,..的最小公倍数用 LCM [n1,n2,...],要计算 5!+16!!,不必设计循环语句构造阶乘运算,直接使用阶乘符号“!”和双阶乘符号“!!”。下 面列出 Mathematica 中的部分整数和组合函数和实例: 函数 Mod [m,n] Quotient [m,n] GCD [n1,n2,...] LCM [n1,n2,...] Prime[k] PrimeQ[n] n! n!! Binomial[n,m] Permutations[list] Multinomial[n1,n2,...] BernoulliB[n] 说明 m 被 n 除的正余数 m/n 的整数部分 n1,n2,...的最大公因子 n1,n2,...的最小公倍数 第 k 个素数 当 n 为是素数时为 True,否则为 False 阶乘 n(n?1)(n?2)???1 双阶乘 n(n?2)(n?4)??? 二项式系数 Cn 列出 list 中元素的所有排列 多项式系数 伯努利系数 Bnm18 BernoulliB[n,x] EulerE[n] EulerE[n,x] PartitionsP[n] PartitionsQ[n]伯努利多项式 B n(x) 第 n 个欧拉数 En 欧拉多项式 E n(x) 整数 n 的自由划分数 p(n) n 的相异部分的划分数 q[n] 表 1-16计算 77, 91, 147 的最大公因子 In[1]:= GCD[77, 91,147] 计算 77, 91, 147 的最小公倍数 In[2]:=LCM[77,91,147] In[3]:={Prime[3],Prime[5],Prime[55]} In[4]:=9! In[5]:=9!! (* 9!! = 9*7*5*3*1 *) 2 In[6]:=Binomial[7,2] (*计算 C 7 *) In[7]:=Permutations[{1,2,5}] (* 列出 {1,2,5} 的所有排列*)1.5 表达式1.5.1 算术运算符和表达式算术表达式由常数、变量、函数、算术运算符和括号组成。常数和变量的类型有: 整型、有理数、实型、复数型、列表、向量和矩阵。函数包括系统定义的函数、用户定 义的函数和程序包中的函数。其中:方括号[]内放函数变量,花括号{}表示元素的分界符, 用圆括号()组织运算量之间的顺序。 下列 Mathematica 中的算术运算符: 符号 + ?? *(星号) /(斜杆) ^ %(百分号) %% 说明 加号 减号或负号 乘号 除号 乘方 上一个计算结果 上上个计算结果 例 a+b x?y,?u s*t 或 s t m/n 2^3表 1-17 在表达式中,乘号可用空格符号代替。在两个变量或数值之间放一个空格即表示 求这两个量的乘积。在不引起误解的情况下,乘号可以省略。例如:当数值与变量或 函数相乘时,2a,2*a,2 a 的意义是相同的。(a-b)(c+d)与(a-b)*(c+d)意义也是相同的。 算术运算的顺序遵守数学中的习惯,次序为^ ? * , / ? +, ?? 。 同级运 算符遵守从左到右的顺序。1.5.2 逻辑表达式和逻辑运算符关系表达式的一般形式:&表达式&&关系运算符&&表达式&19 其中表达式可为数值表达式、字符表达式和意义更广泛的表达式。例如一个图形 表达式。在实用中关系运算符两边常常挑着数值表达式或字符表达式。 关系运算符 == != & &= & &= 数学符号和意义 = 等于 ? 不等于 & 大于 ? 大于等于 & 小于 ? 小于等于 实例 3x==y-1 x!=y x&y,x&y&z x+y &=y/z u&v y/s &= z表 1-18 用一个关系表达式只能表示一个判定条件,要表示几个判定条件的组合必须用逻 辑运算符将关系表达式组在一起。我们称表示判定条件的表达式为逻辑表达式。 逻辑表达式的一般形式为: &关系表达式&&逻辑运算符&&关系表达式& 设 A,B,C 是关系表达式: 逻辑运算符 说明 ! 非。逻辑否,A 是真,则!A 是假;A 是假,则!A 是真。 && 与。逻辑乘,仅当 A 和 B 都是真时,A&&B 的值才是真。 || 或。逻辑加,当 A 或 B 是真时,A||B 的值是真。 XOR 异或,Xor[e1,e2,…],如果 e1,e2,…中有偶数个值为 True, 其余为 False,则 Xor 给出 True,否则给出 False。 Implies 隐含,Implies[p,q]表示逻辑隐含关系 p??q。 表 1 -19 通常,我们已经习惯地认为逻辑表达式的值非真即假。在 Mathematica 中,逻辑表 达式的值有三个:真、假和非真非假。当判定条件成立时,逻辑表达式的值为 True(真); 当判定条件不成立时,逻辑表达式的值为 False ;当判定条件无法判断时,逻辑表达 式的值非真非假。非真非假的逻辑表达式是什么值?它仍然是一个逻辑表达式。例如: In[1]:= x=3; x &y Out[1]= 3&y (* 因为没有给 y 赋值, Mathematica 也就无法判断 x 是否大于 y*) In[2]:= x&0 In[3]:= x &10 例:写出满足下列数学条件的 Mathematica 逻辑表达式: 1)m&s 和 m??t ,即 m??(s,t] 2)x & 10 或 x &-10,即 x ??[-10, 10] 3)x ??(-3, 6] 和 y ?? [-3,7] 4)有 3 个互不相交的圆, 圆心分别为(x1,y1), (x2, y2), (x3, y3); 半径分别为 r1, r2, 和 r,给出点 D(x,y)的座标,判别点 D 是否在 3 个圆内之一。1.5.3 字符及其运算# 字符输入 在 Mathematica 中输入字符或字符串时,用双引号 &作为输入内容的分界符。如 果要输入双引号字符&,则输入\&。还有两个需要注意的的输入标记,\n 表示一个换行, 通常输入中的回车在输出时无效;\t 表示 4 个空格的跳格。20 In[1]:={&ABC&,&abc&,&ab In[2]:=&abcc&}def&In[3]:=&abc\ndef\tabc&#字符串运算符 字符串的运算符有连接(&&)和相等比较(==)。连接运算符(&&)将两个或多个字符串 组成新的字符串;= =运算符比较两个字符串是否相等。 In[5]:=a=&abcde&; b=&bcdef&; a && b &&a In[6]:={a == b, a &b} # 字符串编辑函数系统提供了在字符串中插入、替换、截取和删除部分字符的函数。 这些函数表示 被操作字符位置的方法与表格中表示元素位置完全相同。 字符串编辑函数 说明 StringInsert[s,new,n] 在 s 的第 n 位置处插入字符 new StringTake[s,n]/ StringTake[s,{n}] 截取 s 中前 n 个字符/第 n 个字符 StringTake[s,{n1,n2}] 截取 s 中第 n1 到第 n2 个字符 StringDrop[s,n]/StringDrop[s,{n}] 删除 s 中前 n 个字符/第 n 个字符 StringDrop[s,{n1,n2}] 删除 s 中第 n1 到第 n2 个字符 StringReplace[s,{s1-&p1,s2-&p2,…}] 用 pi 替换 si StringReplacePart[s,new,{{m1,n1},{m2,n2},…}] 用 new 替换 m1 到 n1,m2 到 n2,…的字符 StringPosition[s,sub] 给出 sub 的位置信息 表 1-20 In[7]:=x= &abc***ghabcdefg&;StringDrop[x,{4,6}]In[8]:=Str ingReplace[x,&abc&-&&$$$&]在字符串&aabbcc&的第 2,第 4 和倒数第 1 的位置处插入&***&。 In[9]:=StringInsert[&aabbcc&,&***&,{2,4,1}]In[10]:=ToCharacterCode[&a+b=?&]In[11]:=FromChara cterCode[{36,43,54,65,76,87,98}]In[12]:=ToUpperCase [&aAbB&] 字符串运算函数 说明 StringLength[s] 给出字符串 s 的字符个数 StringReverse[s] 给出字符串 s 的逆序 ToUpperCase[s] 将 s 的字符全部转换为大写字母 ToLowerCase[s] 将 s 的字符全部转换为小写字母 ToCharacterCode [&sty&] 给出字符串 s 的字符编码 FromCharacterCode[n] 给出整数 n 对应的字符 Characters[s] 给出字符串 s 的字符集合 StringJoin[list] 按字符集合构造字符串 表 1-2121 第 2 章初等代数运算2.1 多项式运算多项式加、减、乘、除(商、余数)因 式分解 多项式展开、有理式展开(只展开分子、只展开分母)同分 将表达式分解成部分分式之和替换多 项式的某元素2.1.1 多项式的化简下面列出表示多项式结构运算的常用函数: 函 数 说明 按幂次展开多项式 expr 对多项式 expr 因式分解 提出多项式 expr 各项中的公因子 把 expr 写成 x 的幂次之和 写成 x,y,...的幂次之和 把多项式 expr 写成最简形式 写成无平方幂次因式的乘积 展开多项式 expr 中所有的幂次项 表 2 -1 Expand[expr] Factor [expr] FactorTerms [expr] Collect [ expr, x] Collect[ expr,{x,y,...}] Simplify[expr] FactorSquareFree[expr] PowerExpand [expr] 例:展开(x+2y+1) , p =Expand[(x+2y+1)^2] 对 x ?y 因式分解6 6 2,2Factor[x^6 ????y^6] 按 y 的幂次排列 (x+2y+1) , Collect[p,y]Length[p] s=Expand[(xy)^n+(x+y)^4]PowerExpand[%]22 2.1.2 取出多项式的部分元素表示多项式部分元素 Exponent [ poly,x] Coefficient [poly,exp] Coefficient [poly, exp,n] Coefficient [poly, exp,0] Coefficient[poly,{x1,x2,....}] poly[[n]] 或 Part[poly,n] CoefficientList[poly, {x1,x2,…}] 意 义多项式 poly 中 x 的最高次数 多项式中 exp 的系数 多项式中 exp 的系数 显示多项式 poly 中与 exp 无关的项 多项式 poly 中 x1,x2,...的系数串 多项式 poly 第 n 项 生成 poly 的变量 xi 的系数表 表 2 -2n例题: s =Expand[(x?1)(y^2?1)] Coefficient[s,y^2] (* 列出多项式 s 的 y 的系数 *)Coefficient[s,x,0] (*列出多项式 s 中的不含 x 项的系数 *)s[[2]] (*取 s 的第二项*) s[[3]]=7y; (* 给 s 的第三项赋值*) Coefficient [(x y)^n + (x + y)^4, (x +y)^4] 如果要查看表达式是否为多项式或计算多项式的总项数等属性。则用下列函数。 函 数 说明 判断 expr 是否为 x 的多项式 判断 expr 是否为{x1,x2,...}的多项式 列出多项式的变量表 给出多项式的总项数 表 2 -3 In[1]:= s=Expand[(x?1)(y^2?1)] Out[1]=1?x?y +xy In[2]:=PolynomialQ[s,x] (* s 是否为 x 的多项式 ?*) Out[2]=True (* s 是 x 的多项式*) In[3]:=Variables[s] (* 列出多项式 s 的变量表 *)Out[3]={x,y} (* 多项式 s 的变量是 x,y*)In[4]:=Length[s] (*多项式 s 共有多少项 ? *)Out[4]=4 (*多项式 s 共有 4 项*)2 2 2PolynomialQ[expr,x] PolynomialQ[expr,{x1,x2,...}] Variables [ 多项式] Length [ 多项式]23 2.1.3 有理多项式有理多项式展开 ExpandNumerator[expr] ExpandDenominator[expr] Expand[expr] ExpandAll[expr] 说明 只展开有理式的分子 只展开有理式的分母 展开分子,每项除以分母 分子和分母完全展开 表 2 -4 In[1]:= t=(1+x)^2/(x(1-x))+(1-x)/(1+x)^2 In[2]:=ExpandNumerator[t] In[3]:=ExpandDenominator[t] In[4]:=Together[%] 下列常用的有理式化简的函数。 有理式的结构操作 Together[expr] Apart[expr] Cancel[expr] Factor[expr] 意 义 把所有项合成在一个公共分母上的分式 将表达式分解成部分分式之和 约去分子分母的公因式 完全分解 表 2 -5 (*只展开多项式 t 的分母*)2.1.4 多项式的代数运算多项式的代数运算有加法 (+) ,减法(?) ,乘法(*) 和除法(/) 。其中多项式的加法、减 法和乘法的运算符号与代数中运算符号的相同,做乘法时要用 Expand、Factor 或 Simplify 对计算结果提出具体要求。除号略有不同。如果用除号“/”做多项式除法,只能达到初中 学生的数学水平,最多约去明显分子分母的公因子。在做多项式除法时要用函数 PolynomialQuotient 或 PolynomialRemainder 才能得到得到商式或余式。 例题: t1= x^2?2x?3 ; t2 = x?3; t1+t2 (*做多项式的加法*) t1?t2 (*做多项式的减法 *)Expand[t1*t2] (*做多项式的乘法 *)t1/t2 (*做多项式的除法DD无效*) Cancel[t1/t2] (*约去分子分母的公因式才有收效*)24 给定两个多项式 p(x) 和 q(x)作除法,可以唯一地写出 a(x) 为多项式 p 和 q 相除的商式, 的阶。例题: p = 1 ?? x^6q =1?x^2 PolynomialQuotient[p,q,x] PolynomialRemainder[p,q,x] 函 数p(x) b(x) ,其中 ??a( x)?? q(x ) q (x )b(x) q (x )为多项式 p 和 q 相除的余式,b(x)的阶小于 q(x)(*计算 p/q 的商式*) (*计算余式*) 说明 计算关于 x 的多项式 p 和 g 相除的商式 计算多项式 p 和 g 相除的余式 计算多项式 p 和 m 余式 计算多项式 1, 多项式 2,...的最大公因子 计算多项式 1, 多项式 2,...的最小公倍式 计算两多项式的结式 给出关于 x 的 n 阶割圆多项式 Cn(x) 表 2-6PolynomialQuotient [p, q,x] PolynomialRemainder [p, q,x] PolynomialMod[poly,m] PolynomialGCD[多项式 1, 多项式 2,...] PolynomialLCM[多项式 1, 多项式 2,...] Resultant[多项式 1, 多项式 2,x] Cyclotomic [n,x] p=x2 2+xy?y?122q=x y+x z?y?z PolynomialGCD[p,q] PolynomialLCM[p,q](*计算 p 和 q 的公因式*)分解函数 Decompose,将多项式 Q (x )化为 q1(q 2 (L(x)L))复合形式。 Decompose [poly,x] 例题: 化简多项式为一列复合多项式。Decompose[1+x^3+x^6,x] q1[x_]=1-2x+x^3;q2[x_]=2x^23x^3;Expand[q1[q2[x]]] Decompose[%,x] q1[x_]=1-2x+x^3q2[x_] = 3 - x^2 -3x^3q3[x_] = 2 C xExpand[q1[q2[q3[x]x]]] Decompose[%,x]25 2.1.5 附加条件化简函数Mathematica 可对操作对象附加条件。在化简函数中附加条件,计算结果更具有针对 性。 Simplify[1/Sqrt[x]Sqrt[1/x]]Simplify[1/Sqrt[x] - Sqrt[1/x], x &0] Simplify[(x + y)/2 &= Sqrt[x y], x &= 0 && y &=0] 化简函数 Simplify [ expr, assum] FullSimplify[expr, assum] FunctionExpand[expr, assum] 说 明按条件 assum 成立化简表达式 expr。 与 Simplify 类似,但化简能力更强。 展开带有特殊条件的函数的表达式。 表 2-72.2 方程求根方程及其根的表示 求解方程或方程组 解不等式方程 解递归方程2.2.1 方程及其根的表示代数方程中的等号使用逻辑等号“==”表示,例如:x^2-6x-5 ==0。这样, Mathematica 用一个逻辑表达式表示一个方程,它的意义是方程中等号两边的量是否相等。例如: In[1]:= x=1; x^2?6x?5==0 Out[2]=False In[3]:= Roots[x^2+x==6,x] Out[3]= x == ?3 ||x==22.2.2 一元方程# 解方程函数 Solve 和 NSolve 函数 Solve 主要解多项式方程。Solve 的目标是找出方程的精确解。Mathematica 总可26 以解出四阶或四阶以下多项式方程的精确解。对于三次或四次方程,结果可能相当复杂。在 解四次以上的多项式方程时,Mathematica 碰到数学理论上的障碍而不能给出精确解的表达 式,只能得到方程的数值解。但仍有两大类方程可以给出精确解。第一类可用因式分解法 (Factor)将方程写成低次多项式的方程。第二类是可用复合分解法 (Decompose) 写成低次多 项式组的方程。这样 Solve 也能解出许多高次多项式方程精确的代数解。 解方程函数的一般形式: Solve [ 方程或方程组,{变量表 列} ]NSolve [ 方程或方程组,{变量表 列}] 下列函数 Solve 和 NSolve 的常用形式: 函 数 确解 删除变量 zi 后解方程组 对变量{x1, x2,...}求解方程的近似数值 解 对 eqns 中所有的变量求数值解 表 2-8 说明 对变量{x1, x2,...} 解方程组 eqns 准Solve [eqns, {x1,x2,...}] Solve[eqns,{x1, x2,...},{z1,z2,…}] NSolve [eqns, {x1,x2,...}] NSolve[eqns] Solve[6x^25x+1==0,x]NSolve[6x^25x+1==0,x] Solve[x^5+9x+1==0,x] N[%] NSolve[x^5+9x+1==0,x] y=x/.% y[[3]] #(*找不到方程的精确解*) (*直接求数值解*)(*将方程的解组成一个表*) (*取出第 3 个解*)超越方程与 FindRoot 对于超越方程,例如:求解方程 Cos x = x 在 x =1 附近的根,可用函数 FindRoot 计算它的根。 In[1]:=FindRoot[Cos[x]?x==0,{x,1}] Out[1]= { x -& 0.739085} 求根函数的一般形式: FindRoot[方程,{变量,初值}] 例如:求方程 x Sin x ??0.5 = 0 的根 In [2]:= Plot[x Sin[x] ????0.5,{x,?10,10 }] (* 根的分布一目了然*)27 图 2-1 In[3]:=FindRoot[xSin[x]?0.5==0,{x,3}] Out[3]={x-&2.97259}2.2.3 线性方程组# Solve 与方程组本节只例举中学阶段能解出的方程组。有关怎样解高阶方程组的内容 分请看第 4 章线 性代数部分。 例: 解方程 1) ???3x?2y?5a ???x ??y ??5b?,2) ??? x2?y2?1 ???x ??y ??1In[1]:=Solve[{3x?2y==5a,x+y==5b},{x,y}] Out[1]={{x-&a+2b,y-&?a+3b}} In[2]:= Solve[{x^2+y^2==1,x+y==1},{x,y}] 解联立方程组时用花括号将方程组括起来,方程组在花括号中也有三种排列的方法。 Solve[{3x?2y,x+y}=={5a,5b},{x,y}]Solve[{ 3x?2y==5a &&x+y==5b},{x,y}] 下列联立方程的表示方式: Solve [{lhs1= =b1, lhs2= =b2, ...}, vars ]Solve [{lhs1= =b1&&lhs2= =b2&&...}, vars]Solve [{lhs1, lhs2,...}= ={b1,b2...}, vars ] vars 表示变量列表。 q1=3Sin[x]+Cos[x]==1;q2=Sin[x]^2+Cos[x]^2==1;Solve[{q1,q2},{Sin[x],Cos [x]}] # 函数 Reduce 函数 Solve 计算方程或方程组的一般解,Reduce 表明在什么条件下特定方程有解,尽量化简 方程并保留方程的所有解。例: Reduce[a x ==0,x]28 Reduce[ax+b==0,x]Reduce[a x^2+b x+c= =0,x] # 消去变量函数 Eliminate 下列消去变量的函数如下: Eliminate[eqns,elims] 消去变量 elims,重组方程组Solve[eqns,vars,elims] 例如:消去变量 elims 后对变量 vars 求解方程或方程组In[5]:= eqns ={x ==1+a/2, y==1+2x}; In[6]:= Eliminate[eqns,x] (* 用 Eliminate 也能达到解方程的目的*) Out[6]= a ==?3+y Eliminate[{a x^2+b x y+cy^2==0,x+y==1},x]2 2 2 Out[7]=-a+2ay -by -ay +by ==cy2.2.4 不等式方程和递归方程# 解不等式方程 函数 InequalitySolve 解不等式方程或不等式方程组。在有些 Mathematica 版本中可直 接调用 InequalitySolve ,有些版本中要从 Algebra 包中调入该函数。不等式方程中含有逻 辑运算符,计算后给出不等式方程的解集。 函数 InequalitySolve 的一般形式: InequalitySolve [ ineq, x] InequalitySolve [ {ineq1, ineq2}, {x, y} ] 解关于变量 x 的不等式方程 ineq 解关于变量{x, y}的不等式方程组例如,调入函数 InequalitiySolve,并解不等式方程 && Algebra`InequalitySolve`Inequali tySolve[Abs[x^2-3]&1,x] 不等式方程可以有两个变量或多个变量, InequalitySolve[Abs[x^2-3] &y,{x,y}] 解不等式方程组:??|x2 ??3|??1 ;?|x2?1|?y2 ??x ??5 ??1InequalitySolve[{Abs[x^2 - 1] & y, x^2 - 5 & 1},{x,y}]29 # 解递归方程函数 RSolve 求解递归方程的函数 RSolve 位于 DiscreteMath`RSolve`程序包中。 RSolve[eqn, a[n],n] 解递归方程 eqn,求 a[n]的表达式 RSolve[{eqn1, eqn2, …}, {a1, a2, …}, n] 求解一列递归方程 In[1]:=&&DiscreteMath`RSolve` (* 调入程序包*) In[2]:=RSolve[{a[n] == na[n-1],a[1]==1},a[n],n] Out[2]={{a[n] -&n!}} 再解一个我们熟悉的菲波拉契函数 In[3]:=RSolve[{a[n] == a[n-1]+a[n-2],a[0]==a[1]==1},a[n],n]2.3 和与积求和函数的一般形式:Sum [ f i ,循环范围] ?? f iNSum [ f i ,循环范围] 其中 f i 是和式的通项公式,可为各类初等函数和自定义函数(请看第 7 章),它能计算 有限项或无限项的和,循环范围的一般形式是:{循环初值,循环终值,循环步长}。循环范 围可为一重、两重或多重循环。 Sum 与 NSum; 例如:计算 Solve 与 NSolve。n?x5 n ?0,10n!??1k3 5k ?1Sum[x^n/n!,{n,0,5}] Sum[1/k^3,{k,1,10}] N[%] (*近似数值*)(*? n!n ?0xn*)(* Sum 给出和的精确值*) (*计算Sum[1/i^3,{i,1,Infinity}]???? i ?11*)i3N[%] (*总能算出近似数值*) NSum[1/k^3,{k,1,10}] (*直接给出和式的数值和*) NSum[1/i^3,{i,1,Infinity}] 上列实例中求和式中的循环范围都是步长为 1 的一重循环。在 Sum 和 NSum 的循环范围中 步长可取整数、有理数和实数;循环可为两重循环或多重循环。例如: Sum[x^n,{n,1,5,2}] Sum[x+y,{x,1,9},{y,3,6}] (* 先做 y 循环再做 x 循环*) 乘积函数 Product、NProduct 的定义形式和使用方法与 Sum、NSum 类似,不再详细给 出。 Product[Sin[k],{k,1,5,2}]30 NProduct[Sin[k],{k,1,5,2}] Product[x+y,{x,1,3}] (*计算? ( x ??y)*)x?13Product[(u?6)(v+6+s),{u,1,3},{v,1,3}] 下列 Sum 和 Product 的常用形式。 和与积的函数 Sum [ f i ,{I, min,max}] Sum [ f i ,{I, min, max,di}] Sum[fi,j,{i,i0,i1},{j,j0,j1}] Product [ f i ,{i, min,max}] Product [ f i ,{i, min, max,di}] Product[fi,j,{i,i0,i1,is},{j,j0,j1,js}] 数学意义 计算和式:i?min??fmaxi以步长 di 计算和式计算两重和式:i?i0j??j0????fii1j1i,j计算乘积式:i?min??fmax以步长 di 计算 f i 的乘积计算两重乘积式:???fi?i0 j??j0i1j1i ,j表 2 -92.4 三角函数在 Mathematica 中任何三角函数都可看作有理指数函数,通常在进行代数运算中并不 做 Sin[2x]= 2Sin[x]Cos[x] 这样的三角函数变换。在设置 Trig -& True 后,才能进行半角与倍 角之间的变换。 Expand [expr, Trig-&True] sin2xTrigExpand[expr] Factor [expr, Trig-&True] TrigFactor[expr] 例题: Expand[Sin[x]^2+Sin[2x]^2]Expa nd[%, Trig &True]TrigExpand[Sin[x]^2+Sin[2 x]^2] 分解 expr 时将 sin2x 转换成 sin x2展开 expr 时将 sin x 转换成231 函数 TrigExpand [expr] TrigFactor [expr] TrigFactorList [expr] TrigReduce [expr] TrigToExp [expr] ExpToTrig [expr]说明 将三角表达式展开为和项形式 将三角表达式展开为乘积形式 用列表形式给出每一项及其指数 化简为多倍角表达式 将三角函数表示为指数形式 将指数表示为三角函数形式In[4]:=TrigExpand[Sin[2x]Cos[3x]]In[5]: =TrigFactor[%]In[6]:=TrigReduce[%]In[7] :=TrigFactorList[%]In[8]:=TrigToExp[Sin h[x]]In[9]:=ExpToTrig[%]表 2 -1032 第 3 章微积分3.1 求极限计算函数极限 lim f ( x) 的一般形式是:Limit [ f [x], x -& x0]x???x0下列计算函数极限的三种形式: Limit [expr, x -&x0] Limit [expr, x -& x0, Direction ?&1] Limit [expr, x -& x0, Direction ?&?1] 例如:计算 1) limx??0x -&x0 时函数 expr 的极限 x-&x 0 时函数 expr 的极限?? ??sinx x 1 xx -&x0 2) limx????时函数 expr 的极限2x ??14 x 2 ??7 x ??1 1 x3) limsinx??01 x4) limx ??0 ???5) limx ??0 ???6) limxg(x)x??17) limx??0例题:tan x ??xx 3Limit[Sin[x]/x,x-&0] Limit[(x^2-1)/(4x^2-7x +1),x-&Infinity] Limit[Sin[1/x], x-&0] Limit[1/x, x -&0, Direction -&1]Limit[1/x, x -& 0, Direction -&-1]Limit[x g[x], x-&1]Limit[E^x^x - E^x^(2 x),x-&Infinity]3.2 微商和微分3.2.1 微商(导数)微商函数 D[f,x] 功能 计算偏导数??? f ?x3 --133 D[f, x1,x2,....] D[f, {x,n}] D[f, x, NonConstants -&{v1,v2,....}]计算多重导数 计算 n 阶导数 计算?? f ?x2)?? ????...f ?x1?x2 ??n f ?xn其中 v1,v2,....依赖于 x例如:1) 计算 xxx的一阶导数?表 3-1?x ?y? zsin(x2y2)3) 计算 cx 的二阶导数 D[x^x^x,x] D[z Sin[x^2y^2],x,y] D[cx^n,{x,2}] D[z[1]^2+Sin[z[1]+z[2]],z[1]] (*以 z[1]为变量求导*) D[x^2+y^2, x, NonConstants-&{y}] (* y 是 x 的函数*)n3.2.2 全导数# 全微分函数 Dt 全微分函数 Dt Dt[f] Dt [f,x] Dt [f, x1,x2,...] Dt [f, x, Constants-&{c1,c2,...}] y/: Dt [y, x] =0 说明 全微分 df 全导数df dx d多重全导数d...f d(ci) =0) dxdx1dx2全导数,说明 ci 为常数(即 置dy =0 dx表 3 -2 2) 计算 d(x ?? y )22例如: 1) 计算 3) 全导数??( x ??y ) ?x2 2ddx(x2 ?? y2)4)d dx(x2 ?? y2 ??z2)D[x^2+y^2,x]D t[x^2+y^2] Dt[x^2+y^2,x]34 Dt[x^2+y^2+z^2,x]Dt[x^2+y^2+z^2,x,Constants ?&{z}] (* 说明 z 为常数,即 Dt[z,x]=0 *) 设 u ??ea ???cos(a lnr),证明:??2 u?r 2??2 1 ??? u 1 ?u ?? ??? 0 2 r ???2 r?ru = Exp[a s]Cos[aLog[r]]; D[u,{r,2}]+1/r^2D[u,{s,2}]+1/rD[u,r]Simplif y[%] 令 F ( x )???e1x2costdt,计算 F'(x )F’[x] #抽象函数的导数表示在表达式中也能使用微积分中计算导数 的撇号标记。例如:f '[x] f ''' [x]f[x_]:=Sin[x^2] D[x g[2x],x]单变量函数的一阶导数 单变量函数的三阶微分 (*定义函数 f (x)= x2*)f[x]+f'[x]+f''[x]D[h[x,y],x,x,y](*计算?? ???h(3) (x, y)*) ?x2 ?y3.2.3 定义导数在 Mathematica 中 定 义 函 数 的 一 阶 导 数 的 方 式 就 像 定 义 函 数 一 样 , 例 如 : f '[x_]:=hf[x]x_ 表示 x 是函数变量,相当于函数定义中的形式参量,有关定义函数的详细描述 请看第 7 章。定义函数的高阶导数或多个参量的导数要用函数 Derivative。 下列定义导数的一般形式: f '[x]:=rhs Derivative [n][f][x]:=rhs Derivative [n1,n2,...][g][x1,x2,...]:=rhs 例如:In[1]:= f'[x_]:= h f[x]+gf[x] In[2]:=D[f[x^2],x]定义 f 的一阶导数 定义 f 的 n 阶导数 定义相对于 g 的多个参量的导数35 3.3 不定积分和定积分3.3.1 积分计算函数 Integrate [f, x] 计算不定积分??f ( x)dx ,输出结果中省略积分常数。Integrate 函数假定任何不显含积分变量的对象与积分变量无关,都当常数处理,因而 Integrate 很象微分 D 的逆。?? Integrate [f, x, y] 计算不定积分??dx?? f(x,y)dy Integrate [f, x, y,z] 计算不定积分??dx??dy?? f(x,y,z)dz 例如:计算 1)??3ax dx 2) ?? 3f '(x)f (x)dx 3) ??(3x ??2y)dxdy 4) ? tgx dxIntegrate [f,x] 计算不定积分 f(x)dx2 2 2Integrate[3a x^2, x]Integrate[3f’[x]f[x]^2,x ]Integrate[3x^2+2y, x, y]Integrate[Sqrt[Tan[x]],x] 积分Integrate[Sqrt[Cos[x]],x]Integrate[Si n[ax]/x,{x,0,Infinity}] 给出明确的附加条件 Im[a]为零,积分值也随之确定。 Integrate[Sin[a x]/x,{x,0,Infinity},Assumptions -& Im[a] ==0]??cosx dx 的结果是椭圆函数。3.3.2 不定积分的计算范围In[1]:=Integrate[Sin[Sin[x]],x] (*原函数不是初等函数 *)Out[1]=Integrate[Sin[Sin[x]],x] (*算不出结果按原输入命令输出*)有时 Mathematica 积出被积函数的一部分,将剩余部分用 Integrate[g,x] 表示。Mathematica 除了能计算简单积分外,还能计算一类如贝塞尔 BesselJ[n,z]、Gamma[z] 等二三十个数学物理特殊函数。这些特殊函数极大地扩充了 Mathematica 的积分范围。??例如:Gamma[z]函数定义的积分? ( z) ?? ?? ta?1e??tdt036 Beta [a,b]函数定义的积分B(a,b)=? ( a ) ?( b ) ?(a ??b)?? ?? ta?1(1??t)b?1dt01还可以通过定义函数或程序包来增强 Mathematica 积分的功能。3.3.3 定积分计算计算定积分和计算不定积分是同一个 Integrate 函数,在计算定积分时,除了要给出变量外 还要给出积分的上下限。当定积分算不出准确结果时,用 N[%]命令总能得到其数值解。 NIntegrate 也是计算定积分的函数,其使用方法和 Integrate 函数相同。Integrate 按牛顿-莱 布尼兹公式公式计算定积分得到的是近似数值解。计算多重积分时,按照从右至左的次序计算积分。 积分函数 Integrate [f, {x, a,b}] NIntegrate[f, {x, a,b}] Integrate [f, {x, a, b},{y, c,d}] NIntegrate[f,{x,a,b},{y,c,d} ] 说明b?bf (x)dx ???F (b) ??F (a) 计算定积分得到的是准确解,NIntegrate 用数值积分a? f(x )dx 的准确解 计算定积分 ? f(x )dx 的数值解 计算定积分 ?? dx f(x ,y )dy 的准确解 ? 计算定积分 ?? dx f(x ,y )dy 的数值解 ?计算定积分a b ba d a b a c d c表 3 -31例如:计算定积分??(cos02x ??sin3x)dxIntegrate[Cos[x]^2+Sin[x]^3,{x,0,1}] N[Integrate[Cos[x]^2+Sin[x]^3,{x,0.,1}],20] N[Integrate[Cos[x]^2+Sin[x]^3,{x,0,1}],20] NIntegrate[Cos[x]^2+Sin[x]^3, {x,0,1}]a x计算定积分 dx (x?? y)dyb 0?? ??Integrate[2x+2y,{x,0,a},{y,0,b}]3.4 幂级数3.4.1 幂级数展开幂级数展开函数 Series 的一般形式:37 Series [expr, {x, x0,n}] Series [expr, {x, x0, n},{y, y0, m}] Series[Sin[2x],{x,0,6}] Series[f[x],{x,0,3}] 在 x =??? 处展开expr 在 x=x0 点展开到 n 阶的幂级数 先对 y 展开到 m 阶再对 x 展开 n 阶幂级数Series[Exp[1/x],{x,Infinity,3}] 对有分数指数的函数展开。 Series[Exp[Sqrt[x]],{x,0,3}] Series 在处理多元函数幂级数时,同 Integrate 和 Sum 等一样,从最后一个变量到第一个 变量逐个展开。 Series[Cos[x]Cos[y],{x,0,3},{y,0,3}] 用求和函数 Sum 也能算出一些幂级数,例如: Sum[x^n/n!,{n,0,Infinity}]ex有些幂级数只能用特殊函数表示. Sum[x^n/(n!^2),{n,0,Infinity}] Sum[x^k/k!,{k,0,n}]3.4.2 幂级数的运算# 幂级数的简单运算 Mathematica 能对幂级数进行多种运算,当一个普通表达式和一个幂级数进行运算时, Mathematica 尽可能将表达式的各项并入幂级数中。Mathematica 保留幂级数的次数与初始幂 级数的次数基本一致,正如数学运算中保留实数精度的方式。函数 Normal [ 幂级数],去掉 截断误差项 O[x] ,将幂级数转化为一般表达式。例如: t =Series[Log[x+1],{x,0,4}] %^2 D[%,x] Normal[%] SeriesCoefficient[%,2] (*给出 2 次项系数*)n# 幂级数的复合和反演对于已经展开的幂级数,如果要继续对它的每一项再做幂级数展开, 称为幂级数复合。 用“幂级数 1/.x?&幂级数 2”可完成幂级数复合运算。也可以直接对复合函数做幂级数展开。 下面 In[3] 的工作量与 In[1]和 In[2]的工作等价。38 设 y(x) = 1 ??x ??x234x x ??O[x]5,这时 y 是 x 的函数。如何计算反函数 x(y) ? ?? 2 6 24的表达式 ?请用函数 InverseSeries [幂级数, y]。下列幂 级数的复合和反演函数的一般形式和实例:幂级数 1 /. x ?&幂级数 2 幂级数复合 InverseSeries [幂级数,y] InverseSeries[幂级数] 例题: t=Series[Sin[x],{x,0,5}] %/. x -&Series[Sin[x],{x,0,5}] Series[Sin[Sin[x]],{x,0,5}]InverseS eries[t] % /. x -& tInverseSeries[t,y] 以变量 y 表示反演幂级数 用原变量表示反演幂级数3.4.3 残数计算Limit [expr, x -& x0 ]计算当 x 趋于 x0 表达式 expr 的极限值。当极限值为无穷大时,则 计算 expr 在 x 在 x0 处的残数(留数)。残数(residue)是表达式 expr 在 x0 处幂级数展开中( x ?? x0)?1 的系数。Residue 的一般形式: Residue [ expr, {x,x0}] 例,分别计算 计算表达式 expr 在 x0 处的残数cosx x3在 x=0 的残数和 x 趋于 0 的极限;In[1]:={Residue[Cos[x]/x^3,{x,0}],Limit[Cos[x]/x^3,x -&0]} Out[1]=1 {?? ,?} 2也可用幂级数展开计算残数。In[2]:=Series[Cos[x]/x^3,{x,0,3}](*函数在解析点处残数为 0*)In[3]:={Residue[Sin[x]/x,{x,0}],Limit[Sin[x]/x,x&0]}Out[3]={0,1}39 3.5 微分方程3.5.1 常微分方程DSolve 解线性与非线性的常微分方程,以及联立常微分方程组。在没有给定方程的初 值条件情况下,所得的解包括了待定的系数 C[1],C[2]等。 用 DSolve 函数得到的是常微分方程的准确解。 NDSolve 求解常微分方程的数值解,这时要给出求解区间{x, xmin,xmax}。 一般形式: DSolve [eqns, y[x],x] DSolve [eqns, y,x] 解 y(x)的微分方程或方程组 eqns,x 为变量。 在纯函数的形式下求解,纯函数部分请看第 7 章。NDSolve [eqns, y[x], {x, xmin, xmax}] 在区间{xmin, xmax}上求解变量是 x 的常微分方程或联立常微分方程组 eqns。 例如:解微分方程 y ' (x)=ay(x)Out[1]={{y[x]???? Eax。In[1]:= DSolve[y’[x] = =ay[x],y[x],x]C[1]}}解微分方程y ' (x)= a y (x),边界条件:y(0)=1。ss=DSolve[{y’[x]==ay[x],y[0]==1},y[x],x]Plot [y[x]/.ss,{x,-20,20} 解联立常微分方程组:??? x(t )??y '(t ) ??y(t)????x'(t)DSolve[{x[t]==-y'[t],y[t]==-x'[t]},{x[t],y[t]},t] 当用 DSolve 求 y[x]时,y[x]以替换规则形式:y[x] ?& expr,在含有微分的表达式中不能替换 y'[x] ;如果用 DSolve 求 y ,直接可替换 y'[x]等项。 DSolve[y'[x]==x+y[x],y[x],x] DSolve[y'[x]==x+y[x],y,x] y''[x]+y[x] /.%DSolve[y''''[x] ==y[x],y[x],x] DSolve 解出 Bernoulli 方程, In[7]:=DSolve[y'[x] - x y[x]^2 - y[x] ==0,y[x],x]40 3.5.2 偏微分方程DSolve 不仅能解单变量的常微分方程,也能解多个变量的偏微分方程。 DSolve [{eqn1,eqn2,…}, y [x1, x2,…], {x1,x2,…} ] 计算偏微分方程组的准确解 DSolve [eqn, y [x1, x2,…], {x1,x2,…}] 解偏微分方程 y [x1,x2,…] DSolve [eqn, y,{x1,x2,…}] 解偏微分方程的纯函数 y NDSolve [{eqn1,eqn2,…}, y [x1, x2,…], {x1,x2,…} ] 计算偏微分方程组的数值解 计算有两个独立变量的偏微分方程?y ( x 1 , x 2 ) ?y ( x 1 , x 2 ) 1 ?? ? ?x1 ?x2 x1x2DSolve[D[y[x1,x2],x1]+D[y[x1,x2],x2]==1/(x1x2),y[x1,x2],{x1,x2}] 计算 x1 ?y(x1 , x2 ) ??x 2 ?y ( x1,x 2)?e x1 x2?x1?x2由于 y 和它的微分满足一个线性方程,所以它的通解是存在的。 DSolve[x1 D[y[x1, x2], x1] + x2 D[y[x1, x2],x2] == Exp[x1 x2], y[x1, x2], {x1, x2}] 下面的非线性偏微分方程存在一个通解。 DSolve[D[y[x1,x2],x1]+D[y[x1,x2],x2] ==Exp[y[x1,x2]],y[x1,x2],{x1,x2}]3.5.3 矢量运算在工程计算中,常需要对矢量作运算。矢量运算函数放在 Calculus 的子 VectorAnalysis 程序包中, 运算前用运算符“&&”调入该程序包。表 3 - 4 列出部分矢量运算函数及其使用说明。 函数 &&Calculus`VectorAnalysis` SetCoordinates[system[names]] Div[f] Curl[f] Grad[f] Laplacian[f] Biharmonic[f] Div[f,coordsys],Curl[f,coordsys],… 说明 载入向量运算包 设定坐标系(Cartesian,Cylindrical,Spherical 等) 计算矢量场 f 在缺省坐标系下的散度??? f 计算矢量场 f 在缺省坐标系下的旋度???? f 计算标量 f 在缺省坐标系下的梯度?f 计算标量 f 在缺省坐标系下的? f2计算标量 f 在缺省坐标系下的? f2按给定的坐标系计算散度、旋度… 表 3 -441 调入向量运算程序包,In[1]:=&&Calculus`VectorAnalysis`设定球面坐标系,In[2]:= SetCoordinates[Spherical[r, theta,phi]] Out[2]= Spherical[r, theta,phi]计算梯度,In[3]:= Grad[r^2Sin[theta]] Out[3]= {2 r Sin[theta], r Cos[theta],0}计算散度,In[4]:=Div[{x^2y, y, z}, Cartesian[x, y,z]] Out[4]=2 + 2 xy计算拉普拉斯算子。In[5]:=Laplacian[x + y^3, Cartesian[x, y,z]]3.6 积分变换3.6.1 Laplace 变换? ?st函数 f(t)的 Laplace 变换为?f( t ) edt 。函数 F(s)的 Laplace 反变换为0Laplace 的数学形式与 Fourier 变换非常相似,但变换结果差别很大。因为它对原函数 f(t)的要求 相对比较弱,而对于某些问题 Laplace 变换比 Fourier 变换适应面更广。 下列 Laplace 变换函数常用形式: LaplaceTransform[expr, t,s] InverseLaplaceTransform[expr, s,t ] 例如对 t cost 做 Laplace 变换,得到In[1]:=LaplaceTransform[t^3Cos[t],t,s]3?? 2?i ??1???i??i??F( s)e ds。stexpr 的 Laplace(拉普拉斯)变换 expr 的 Laplace 反变换再做 Laplace 反变换,则In[2]:=InverseLaplaceTransform[%,s,t]甚至一些简单的变换也常会包含特殊的函数。In[3]:=LaplaceTransform[1/(1 +t^2),t,s]Laplace 变换能将积分和微分运算转化为基本代 数运算。也可做高维 Laplace 变换或反变换。 LaplaceTransform [expr, {t1,t2,…},{s1,s2,…}] expr 的高维 Laplace 变换 InverseLaplaceTransform [ expr, {s1,s2,…},{t1,t2,…}] expr 的高维 Laplace 反变换42 3.6.2 Fourier 变换 1在 Mathematica 中,函数 f(t)的 Fourier 变换为 为? iwt2?? ???f(t )edt ,函数 F(t)的 Fourier 反变换1 2?????F (w)e?iwtdw。???下列 Laplace 变换函数常用形式: FourierTransform [expr, t, w] InverseFourierTransform [expr, w, t]expr 的 Fourier 变换 expr 的 Fourier 反变换FourierTransform[1/(1+t^4),t,?]InverseFouri erTransform[%, ?,t] 在不同的应用领域对 Fourier 变换有不同的定义形式,用选项 FourierParameters 可以指定其中一 种。 Fourier 变换形式 FourierSinTransform[expr, t,w] FourierCosTransform[expr, t,w] InverseFourierSinTransform[expr, w,t] InverseFourierCosTransform[expr, w,t] 说明 Fourier 正弦变换 Fourier 余弦变换 Fourier 正弦反变换 Fourier 余弦反变换 表 3 -53.6.3Z 变换函数 f(n)的 Z 变换为的??f(n)zn ?0???n。Z 变换后常得到复变量 Z 的函数,因此称为 Z 变换。它是一种有效的离散的拉普拉斯形式。主要应用数字信号处理、控制论和解微分方程等离散系统 分析中。可以认为它产生某种类似于组合数学和数论中常用的生成函数。 F(z)的逆 Z 变换为 常用形式: ZTransform[expr,n,z] InverseZTransform[expr,z,n] 例题: expr 的 Z 变换 expr 的逆 Z 变换2?i ??F( z) z1n? 1dz。ZTransform[1/n!,n,z]InverseZTransform[%,z,n]43 第 4 章线性代数4.1 矩阵的定义Table [ f , 循环范围] 一重循环范围的一般形式为: {循环变量名,循环初值,循环终值,循环步长} Array [ 向量元素名,n, first] 定义有 n 个元素的向量,first 表示向量的起始下标,当 first 是 1 时可省略。 Array [ 矩阵元素名,{m, n},{m0,n0}] 定义 m 行 n 列的矩阵,m0,n0 表示行和列起始下标,当 m0,n0 是 1 时可省略。 Table[ic,{i,1,3,1}] Table[a[i,j],{i,2},{j,2}] Array[a,{2,2}]Array[m,4,? 1] Table[i+j-1,{i,3},{j,3}] Table[u[k,j],{k,0,1},{j,0,1}] 定义下三角矩阵, Table[If[i &= j,i+j?1,0],{i,4},{j,4}] Table[a[i,j],{i,1,5,2},{j,2,6,2}]//MatrixForm 在 Mathematica 的 LinearAlgebra`MatrixManipulation`程序包中有一些创建特殊矩 阵 的函数。矩阵与矩阵分量例如:A = Array[a,{3},{3}]或 A = Table[a[i,j], {i,3}, {j,3}]。 矩阵大名[[行号,列号 ]];、 元素小名 [行号,列号] 矩阵的小名即矩阵元素名 矩阵名 [[ k]] 表示矩阵的第 k 行, 矩阵名 [[ All, k ]] 或 Transpose [矩阵名] [ k ] 表示矩阵的第 k 列。 矩阵的分量表示 A[[i, j]] 或 a[i,j] A[[i]] A[[All, j]] Transpose[A][[j]] A[[{i1,i2,..ip},{j1,j2,...jq}]] 说明 A = Array[a,{m, n}] 的第 i 行第 j 列元素 A 的第 i 行的 n 个元素 A 的第 j 列的 m 个元素(*4.0) A 的第 j 列的 m 个元素 由行为{i1,i2,..ip}和列为{j1,j2,...jq}组成的子矩阵44 A[[Range[{i0,i1}],Range[{j0,j1}]] Take [ A, { i0, i1}, {j0, j1} ] Tr [ A, List]由 A 的 i0 到 i1 行和 j0 到 j1 列组成的子矩阵 由 A 的 i0 到 i1 行和 j0 到 j1 列组成的子矩阵 按列表给出矩阵 A 的对角线元素 表 4 -4有了矩阵行和列的表示方式,很容易对矩阵做各种初等变换。 B={{1,2,2}, {3,-3,5},{4,5,6}}; B[[2]]=3B[[1]]+B[[2]]B[[3]]=2B[[3]];B4.2 矩阵基本运算矩阵的加法、减法和乘法矩阵基本运算 A+c A+B cA A.B U.V Outer[Times, U,V] Cross[U,V] 说明 A 为矩阵,c 为标量,c 与 A 中的每个元素相加 A,B 为同阶向量或矩阵,A 与 B 的对应元素相加 A 为矩阵,c 为标量,c 与 A 中的每个元素相乘 矩阵 A 与矩阵 B 相乘,要求 A 的列数等于 B 的行数 向量 U 与 V 的内积(行向量乘列向量) 列向量 U 乘行向量 V 向量 U 与向量 V 的外积 表 4-7 V={1,2,1};V .V {a,b}.{c,d} (*计算向量的内积 *) Outer[Times,{a,b},{c,d}] v1 = {a,b,c} ; v2={d,e,f}; Cross[v1,v2] (* 计算向量的外积*)45 矩阵的转置和逆矩阵矩阵运算函数说明Det[A] Transpose [A] Inverse[A] Minor [A,k] Tr [ A] Sum[A[[i,i]],{i,Length[M]}] MatrixPower [m,n]计算矩阵 A 行列式的值 A 的转置矩阵(AT 或 A') 计算矩阵 M 的逆矩阵(A ) A 的 k 阶子式组成的表 计算矩阵 A 的迹(*4.0) 计算矩阵 A 的迹(矩阵对角元素和) 计算矩阵 m 的 n 次方?1M={{1,3,1},{-1,2,1},{1,1,0}}; Det[M]Inve rse[M] Tr[M] (*或用 Sum [M[[i, i]],{i, Lenth[M]}]*) 在 Mathematica 的 LinearAlgebra`MatrixManipulation`程序包中还提供了计算向量和矩 阵范数 和条件数等函数。 向量和矩阵范数 VectorNorm [vec,p] VectorNorm[vec] MatrixNorm [mat,p] MatrixNorm[mat] InverseMatrixNorm [mat,p] InverseMatrixNorm[mat] MatrixConditionNorm [mat,p] MatrixConditionNorm[mat] 计算 向量 vec 的 p 范数,1??p???? 向量 vec 的??范数 矩阵 mat 的 p 范数,p 为 1、2 和?? 矩阵 mat 的??范数 mat 逆矩阵的 p 范数,p 为 1、2 和?? mat 逆矩阵的?? 范数 按 p 范数计算矩阵 mat 的条件数 按??范数计算矩阵 mat 的条件数46 4.3.正交化运算(Orthogonalization)在 LinearAlgebra`Orthogonalization`程序包中有对向量单位化和对一组向量正交化的函 数。 Orthogonalization 程序包函数 Normalize[v] Normalize [v, InnerProduct -&func] GramSchmidt[v1,v2,…] GramSchmidt[{v1,v2,…},InnerProduct -&func] GramSchmidt[{v1,v2,…}, Normalized -&False] Projection[v1,v2] Projection[{v1,v2}, InnerProduct -& func] 说明 对向量 v 单位化 按内积定义 func 对向量 v 单位化 将向量组 v1,v2,…化为单位正交向量 按内积定义 func 将 v1,v2,…单位正交化 对向量组 v1,v2,…正交化而不单位化 给出向量 v1 在向量 v2 上的投影 按内积定义 func 计算 v1 在 v2 上的投影&&LinearAlgebra`Orthogonalization`N ormalize[{1,2,-2}] 对向量组{{1,1,1}, {-1,0,1},{-1,1,0}}做施密特单位正交化运算; u={{1,1,1}, {-1,0,1},{-1,1,0}}; {w1,w2,w3}=GramSchmidt[u] 用内积运算验证 GramSchmidt 函数。 { w1.w2,w2.w3,w1.w3,w1.w1,w2.w2,w3.w3} 对 u 做非单位化的正交化。 GramSchmidt[u,Normalized-&False]1定义内积为??1# dx 即可做出正交多项式,#1 和#2 表示两个变量。 1#2In[6]:=GramSchmidt[{1, x, x^2,x^3}, InnerProduct -& (Integrate[#1 #2,{x,-1,1}]&)]//Simplify4.4 方程组求解解方程组函数 说明47 RowReduce [A] LinearSolve [A,B] NullSpace [A] LUDecomposition[A] QRDecomposition[A]作行的线性组合化简 A,A 为 m 行 n 列的矩阵 求解满足方程组 AX=B 的一个解,A 为 m 行 n 列的矩阵 求解方程组 AX=0 的基础解系,A 为 m 行 n 列的矩阵 做 LU 分解后解方程组,详情见矩阵分解 做 QR 分解后解方程组,详情见矩阵分解例 1:已知 A??? ??1 ? ? 1 ??3?? ?31 1 1?? ?? 0 ?11?? ?1 3?? 1 ?? 2 1 3??计算 A 的秩,计算 AX=0 的基础解系。A=={{1,1,1,1},{1,0,?1,1},{3,1,?1,3},{3,2,1,3}}; RowReduce[A] NullSpace[A] (* 得到 A 的两个线性无关解*)???x1 ??3x2 ??x3 ??x4 ??1 ?? 例 2:解方程组?3x1 ?x2 ?3x3 ?4 x 4 ?4 ?? x ?5 x ?9 x ?8 x ?6 ? 1 2 3 4M={{1,-3,-1,1},{3,-1,-3,4},{1,5,-9,-8}}; B={1,4,6}; LinearSolve[M,B] (*方程组 MX=B 的一个特解*) NullSpace[M] (*解向量组成一个矩阵*) x = c%[[1]]+%% (* x 为 MX=B 的全部解*) 在 LinearAlgebra 程序包还有高斯消去法 (在 GaussianElimination 程序包中), Cholesky 分解和解三对角方程方法的函数。4.5.特征值和特征向量特征值(向量)函数 Eigenvalues[A] Eigenvectors[A] Eigensystem[A] Eigenvalues[N[A]] Eigenvectors[N[A]] 说明 计算矩阵 A 的(准确形式的)特征值表 计算矩阵 A 的(准确形式的)特征向量表 计算所有的{{特征值},{特征向量}} 用数值解计算矩阵 A 的特征值表 用 数值解计算矩阵 A 的特征向量表A={{1,2,1},{-1,2,1},{0,4,2}}; Eigenvalues[A]E igenvectors[A] {U, V} =Eigensystem[A] Det[A-xIdentityMatrix[3]] (* 计算 A 的特征多项式*)48 第 5 章数值计算5.1 插值# 插值多项式函数 InterpolatingPolynomial InterpolatingPolynomial [data,var] 构造以 data 为插值点数据,以 var 为变量名的插值多项式。 例 1:给出函数表 X 1.0 2.0 4.0 88.0 5.0 0.0 Y 16.0 46.0 构造插值多项式并计算 f(2.3)In[1]:=data={{1.,16},{2,46},{4,88},{5,0}}; In[2]:=f[x_]=InterpolatingPolynomial[data,x]In[3]: =f[2.3]下列几种数据的表示方式。 数据的表示方式 {x0,f0},{x1,f1},..{xn,fn}} {f0,f1,…fn} {x0,{f0,df0,ddf0,…}},…} {x0,y0,z0},{x1,y1,z1}…} 表 5-1 # 构造插值对象函数 Interpolation 说明 xi 为 x 轴坐标值 fi 为 y 轴坐标值 当 xi = i 时,可省略 xi 给出 xi 点的函数值 fi,一阶导数值 dfi、二阶导数值 ddfi,… 给出三维空间点列Interpolation [data,InterpolationOrder-&n] 构造以 data 为插值点数据,按 InterpolationOrder 设定多项式的次数的插值多项式。 对二维或多维数据 data 进行插值运算,数据表示范围和方式如表 5-1 所示;用 InterpolationOrder 设置插值多项式的次数 n,缺省值为 3,Interpolation 生成一个插值函 数和插值范围,如 Out[2]中“InterpolatingFunction[{1,5},&&]”所示,由{1,5}表明 插值范围,用户只能计算在插值范围的近似的函数值,即只能做内插计算不能做外插 计算。 In[1]:=data=Table[{{1,16},{2,12},{4,8},{5,9}}]; 用 Interpolation 命令构造插值函数 g(x).In[2]:= g=Interpolation[data,InterpolationOrder-&3]In[3]:=g[1.2] (* 计算 x=1.2 处函数的近似值 *)In[4]:=g=Interpolation[data,InterpolationOrder-&4] Interpolation::inhr: Request order has been reduced to 3. 给定 4 个插值点,构造的插值多项式函数的次数至多为 3 次.49 In[5]:= g=Interpolation[data,InterpolationOrder-&2] In[6]:=g[1.2]例: 已知插值条件, f (0)=0, f (1)=2, f ' (0)=1, f '(1)=1, 求三次插值多项式并计算 f(0.2).In[7]:= d={{0,{0,1}},{1,{2,1.}}};h=Interpolation[d] In[8]:=%[0.23] In[9]:=h[0.23]InterpolatingFunction 对象也能作为微分方程的近似解。例如;In[10]:=sol=y/.First[NDSolve[{y''[x]==y[x],y[0]==1,y'[0]==0},y,{x,0,10}]] In[11]:=sol[2.7] # 由数组构造插值函数 ListInterpolation 当插值数据是按点列形式给出时,一般用 Interpolation 函数,当插值数据是用数组 形式给出时,一般用 ListInterpolation 函数。下列 ListInterpolation 函数的常用形式: ListInterpolation[array] 由数组中的数值构造近似插值函数。 ListInterpolation [array, {{xmin, xmax},{ymin,ymax}}] 在定义的网格域内,由数组中的数值构造近似插值函数。 例:由三维数据拟合函数 In[1]:=ListInterpolation[Table[1.2/(x^3+y^2),{x,10},{y,15}]] In[2]:=%[3.2,4.3] In[3]:=int3 =ListInterpolation[Table[{x,y,z,{z Cos[xy]}}, {x,-2.,2.},{y,-2.,2.},{z,0.,1.}],InterpolationOrder-&{3,3,1}] In[4]:={0.2Cos[1.0 1.1], int3[1.0, 1.1,0.2]} # 构造逼近函数 FunctionInterpolation 在计算一些复杂函数时,用函数 FunctionInterpolation 可对复杂函数构造相对简单的逼 近函数简化计算。 FunctionInterpolation 的常用形式为: FunctionInterpolation [ expr , {x, xmin, xmax }] 在区间[xmin,xmax]上构造 expr 的逼近函数 FunctionInterpolation [ expr , {x, xmin, xmax }, {y, ymin, ymax}, …] 在区间[xmin,xmax],[ymin,ymax]…上构造 expr 的高维逼近函数逼近函数 In[5]:=FunctionInterpolation[Cos[x]+Sin[x^2],{x,0,1}]In[6]:=%[0 .37]In[7]:=h=FunctionInterpolation[int3[x,y,x^3+y^3],{x,0,0.5},{y,0,.5}]I n[8]:={0.25^3 + 0.25^3,h[0.25,0.25]}请观察原函数和近似函数之间的误差图形。In[9]:=Plot3D[x^3+y^3-h[x,y],{x,0,0.5},{y,0,0.5}]50 0. 0. 0.1 0.2 0.3 0.4 0 0.5 0.5 0.4 0.3 0.2 0.1图 5-15.2 曲线拟合给定一组数据,Mathematica 按最小二乘法的原理对这组数据进行线性拟合或 n 次 多项式等曲线拟合。例如:设某次实验数据如下: X 1.36 1.49 1.73 1.81 1.95 2.16 19.95 Y 14.09 15.09 16.84 17.38 18.44 试按最小二乘法用一次多项式、二次多项式拟合以上数据。In[1]:=f={{1.36,14.09},{1.49,15.09},{1.73,16.84},{1.81,17.38},{1.95,18.44},{2.16,19.95}}; In[2]:=Fit[f,{1,x},x]Out[2]=4.62x In[3]:=Fit[f,{1,x,x^2},x]Out[3]=3.24x-0.133012x 拟合函数 Fit 的一般形式:2Fit[data,funs,vars] 用数据 data,以 vars 为变量,按拟合函数的基函数 funs 的形式构造拟合函数。数 据的表示方法同插值函数中相同,都是使用点列形式。 下列几种常用的一维拟合函数形式: 拟 合 函数 Fit [data,{1,x},x] Fit [data,{1,x,x^2},x] Fit [data,Table[x^i,{i,0,n}], x ] Exp [Fit [Log [data],{1,x}, x]] 说明 用数据 data 作线性拟合函数:a+bx 构造二次拟合函数:a??bx??cx 做 n 次多项式拟合 拟合曲线为 ea ?bx 2表 5-2In[4]:= g=Table[Prime[x],{x,20}];Fit[g,{1,x},x] In[6]:= Fit[g,{1,x,x^2},x]Fit 函数也能构造其它形式的多维拟合函数,多项式是拟合函数的一种常用形式,例如: Fit [{{x1,y1,f1},…},{1, x, y},{x,y}] 构造双线性拟合函数 a+ bx +cy. 例如:取函数 z=1-3x+5xy 的部分数值构造以{1,x,y,xy}为基的拟合函数。 In[7]:=Flatten[Table[{x,y,1-3x+5xy},{x,0,1,0.4},{y,0,1,0.4}],1];51 In[8]:=Fit[%,{1,x,y,xy},{x,y}] In[9]:=Chop[%]#多项式拟合函数(PolynomialFit) Mathematica 在程序包 NumericalMath 中提供了多项式拟合函数 PolynomialFit。 PolynomialFit 的一般形式: PolynomialFit[data,n] 它按最小二乘原理构造 n 次多项式函数拟合数据 data。例如,调入多项式拟合函 数,构造 3 次多项式函数拟合数据 f(x)=x .In[1]:=&&NumericalMath`PolynomialFit` In[2]:=p =PolynomialFit[{1,4,9,16,25,36,49},3] Out[2]=FittingPolynomial[&&,3]In[3]:=2p[10]Out[3]=100.(*计算 f(10)的近似值*)In[4]:=Expand[p[x]] (* 可以看到多项式拟合函数的效果*)#样条函数(SplineFit) 功能强大应用广泛的样条函数: SplineFit[points ,type] 由点列 points 按类型 type 生成 SplineFunction 对象。 其中选 项的类型有 Cubic,Bezier 和 CompositeBezier。1 按选项 cubic 构造分段三次多项式,它是 C 连续,首尾的二阶导数为零。In[1]:=&&NumericalMath`SplineFit`In[2]:=pts={{0,0},{1,2},{-1,3},{0,2},{3,0}}; spline=SplineFit[pts,Cubic] In[3]:={spine[1.0],spline[1.2]}In[4]:= spa=SplineFit[pts,Bezier]In[5]:={spa[ 1.0],spa[1.2]}5.3 数值积分5.3.1 数值积分函数 NIntegrate在第 3 章计算定积分中我们用过函数 Integrate 和 NIntegrate,看起来象一对函数。 前者是用准确的公式推导计算问题的精确解,即符号计算;后者是用近似的数值解求 解,即数值计算。在 Mathematica 中还有一系列这样的函数。例如: 精确解函数 Sum Product Limit 数值解函数 NSum NProduct NLimit 计算 和 积 极限52 D Integrate Series Solve DSolveND NIntegrate NSeries NSolve NDSolve导数 积分 级数 求解方程组 求解微分方程组 表 5-3例:?1??11 |x|dx ,0 是奇点。In[1]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,0,1}]例如:计算复平面上的线积分,积分曲线从-1 起到-I,1,I 再回到-1 的闭曲线。 In[2]:= NIntegrate[1/x, {x, -1,-I,1,I,-1}]Out[2]=1.1102210?16+6.28319I(* 由柯西公式准确解是 2?i*)5.3.2 高斯积分高斯积分函数放在程序包 NumericalMath`GaussianQuadrature`中,用 GaussianQuadratureWeights 函数直接计算 xi 和 wi 的数值。高斯积分函数也有多种类 型,GaussianQuadrature 中 GaussianQuadratureWeights 函数计算 Gauss-Legendre 求积 公式的组合系数。 高斯积分函数(GaussianQuadrature) 间)GaussianQuadratureWeights[n,a,b] GaussianQuadratureError[n,f,a,b] GaussianQuadratureWeights[n,a,b,prec] GaussianQuadratureError[n,f,a,b,prec] 说明 (在 [a,b] 区 按机器精度给出 n 点的横轴值和权值(xi,wi) 按机器精度给出积分误差 按精度 prec 给出 n 点的横轴值和权值(xi,wi) 按精度 prec 给出积分误差 表 5 -5In[1]:=&&NumericalMath`GaussianQuadrature`按机器精度给出在区间[-1,1]上,2 个点的横轴值和权值(xi,wi)。In[2]:=xw=GaussianQuadratureWeights[2, -1,1] Out[2]={{-0.57735, 1.}, {0.57735,1.}}1x xdx 的结果, 比较下列两种计算积分 sin 可以看到取 4 个点的高斯积分误差已经很小了。??1In[3]:=Integrate[x Sin[x],{x,-1,1}]//N Out[3]=0.602337 In[4]:=f[x_]:= xSin[x]NSum[xw[[k,2]]f[xw[[k,1]]],{k,1,Length[xw]}]Out[4]=0.630242 In[5]:=xw=GaussianQuadratureWeights[4, -1,1];NSum[xw[[k, 2]]f[xw[[k, 1]]], {k, 1,Length[xw]}]Out[5]=0.60234也可用函数 GaussianQuadratureError 直接计算误差。53 In[6]:=GaussianQuadratureError[3, f, -1,1] Out[6]=-0. (6 Cos[#1] - Sin[#1] #1&) In[7]:=GaussianQuadratureError[4, f, -1,1] In[8]:=GaussianQuadratureError[3, g, -1,1] Out[8]=-0.g(6)计算在区间[-3,7]的高斯积分系数In[9]:=GaussianQuadratureWeights[5, -3,7] Out[9]={{-2.63},{-0..39314},{2,2.84444},{4.614}, {6.63}}5.4 方程求根5.4.1 求根函}

我要回帖

更多关于 mathematica 解方程组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信