Mathematica求解方程组、级数

合集下载

整理mathematica数学常用命令大全

整理mathematica数学常用命令大全

整理mathematica数学常⽤命令⼤全Mathematica的内部常数Mathematica的常⽤内部数学函数Mathematica中的数学运算符Mathematica的关系运算符注:上⾯的关系运算符也可从基本输⼊⼯具栏输⼊。

如何⽤mathematica求多项式的最⼤公因式和最⼩公倍式如何⽤mathematica求整数的最⼤公约数和最⼩公倍数如何⽤mathematica进⾏整数的质因数分解如何⽤mathematica求整数的正约数如何⽤mathematica判断⼀个整数是否为质数如何⽤mathematica求第n个质数如何⽤mathematica求阶乘如何⽤mathematica配⽅Mathematica没有提供专门的配⽅命令,但是我们可以⾮常轻松地⾃定义⼀个函数进⾏配⽅。

如何⽤mathematica进⾏多项式运算如何⽤mathematica进⾏分式运算如何⽤Mathematica进⾏因式分解如何⽤Mathematica展开如何⽤Mathematica进⾏化简如何⽤Mathematica合并同类项如何⽤Mathematica进⾏数学式的转换如何⽤Mathematica进⾏变量替换如何⽤mathematica进⾏复数运算如何在mathematica中表⽰集合与数学中表⽰集合的⽅法相同,格式如下:下列命令可以⽣成特殊的集合:如何⽤Mathematica求集合的交集、并集、差集和补集如何mathematica⽤排序如何在Mathematica中解⽅程注:⽅程的等号必须⽤:= =如何在Mathematica中解⽅程组Solve[{⽅程组},{变元组}]注:⽅程的等号必须⽤:= =如何在Mathematica中解不等式先加载:Algebra`InequalitySolve` ,加载⽅法为:<然后执⾏解不等式的命令InequalitySolve,此命令的使⽤格式如下:<--mstheme-->如何在Mathematica中解不等式组先加载:Algebra`InequalitySolve` ,加载⽅法为:<然后执⾏解不等式组的命令InequalitySolve,此命令的使⽤格式如下:<--mstheme-->如何在Mathematica中解不等式组先加载:Algebra`InequalitySolve` ,加载⽅法为:<<--mstheme-->如何⽤mathematica表⽰分段函数如何⽤mathematica求反函数对系统内部的函数⽣效,但对⾃定义的函数不起任何作⽤,也许是⽅法不对。

§2 Mathematica进行代数运算和求极限

§2  Mathematica进行代数运算和求极限

146§8 Mathematica 进行代数运算和求极限8.1 Mathematica 进行代数运算代数表达式泛指含有未知数的表达式,如422−+x x 、3/)sin (x x x +等都属代数表达式。

因为未知数也可以看作是符号式。

我们对代数的运算应该不感到陌生,例如,多项式的因式分解与展开、分式的约分与化简,以及解方程等等都属于代数运算。

1算术运算Mathematica 最基本的功能是进行算术四则运算:加、减、乘、除,注意用"^"代表乘幂。

如果输入的数字都不含小数点时,输出的结果是完全正确的(不管含有多少位,也可以是不可以约分式)。

如:462511]1[6^54/32:]1[=++=Out In 如需得到近似数,只要在输入的表达式中有一个数字是含小数点的:8.15627]2[6^54/0.32:]2[=++=Out In或者使用函数N[]:8.15627]3[]6^54/32[:]3[=++=Out N In尽管Mathematica 允许在算术表达中用空格代替乘号,但是建议大家不要轻易省略“*”号,以免造成混乱。

在Mathematica 中,数学上的和式用“Sum”表示,连乘符号用“Product”表示,它们的用法是:{}Sum f, i, imin, imax ⎡⎤⎣⎦ (*从min i i =到max i 计算f 的和式*) {}Sum f, i, i min,i max ⎡⎤⎣⎦ (*从min i i =到max i 以步长id 计算f 的和式*) {}Sum ,,min,max ,{,min,max}f i i i j j j ⎡⎤⎣⎦ (*计算两重和式(先做j 循环)*) {}Sum ,,min,max f i i i ⎡⎤⎣⎦ (*给出和式的近似值*){}Product ,,min,max f i i i ⎡⎤⎣⎦ (*从min i i =到max i 计算f 的乘积*)147{}Product ,,min,max,f i i i id ⎡⎤⎣⎦ (*从min i i =到max i 以步长id 计算f 的乘积*) {}{}Product ,,min,max ,,min,max f i i i j j j ⎡⎤⎣⎦ (*计算两重乘积(先做j 循环)*) 例8.1xxx x x x x Out n n x Sum In n++++++==26241207205040]4[}]7,1,{,![:]4[234567 当步长id=1时,可以省略。

实验六 用Mathematica软件进行 级数运算

实验六  用Mathematica软件进行 级数运算

实验六 用Mathematica 软件进行 级数运算实验目的:掌握用Mathematica 软件进行级数运算的语句和方法。

实验过程与要求:教师利用多媒体组织教学,边讲边操作示范。

实验的内容:幂级数展开用Mathematica 对级数进行加、减、乘、除、乘方、微分、积分等多种运算.这里重点介绍函数的幂级数展开.在Mathematica 系统中,用Series 函数将一个函数f [x ]展开成为幂级数.其基本格式为:Series[f [x ],{x ,x 0,n }]把函数f [x ]在点x 0处展开到x - x 0的n 次幂.实验1 分别将e x ,ln(1+x )在点x 0=0处展开到x 的5次幂,并求其和、差、积.解 In[1]:= Clear[x,a,b ]In[2]:= a =Series[Exp[x ],{x ,0,5}]In[3]:= b =Series[Log[1+x ],{x ,0,5}]In[4]:= a+bIn[5]:= a-bIn[6]:= a*b实验2将x-31在点x 0=1处展开到x-1的4次幂. 解 In[7]:= Clear[x ]In[8]:= Series[1/(3-x ),{x ,1,4}]在Mathematica 系统中,用Sum 函数求级数的和(和函数).其基本格式为:Sum[an ,{n ,n 0,n 1}]其中an 为级数的通项,n 0为 n 的起始值,n 1为终值.实验3 求级数∑∞=121n n 的和. 解 In[9]:= Sum[1/n^2,{n,1,Infinity}]实验4 求级数∑∞=0!n nn x 的和函数.解 In[10]:= Sum[x^n/n!,{n,0,Infinity}]敛散性的判定可用比值审敛法、根式审敛法或定义判定.实验1.将y=ln(5+x)在点x0=1处展开到x-1的4次幂.2. 将2x=在点x0=0处展开到x的5次幂.y-e。

Mathematical用法-大全-实用版

Mathematical用法-大全-实用版

Mathematica for Windows 用法一、Mathematica的主要功能Mathematica是美国Wolfram公司开发的一个功能强大的计算机数学系统,提供了范围广泛的数学计算功能,主要包括三个方面:符号演算、数值计算、图形。

例如:多项式的四则运算、展开、因式分解,有理式的各种计算,有理方程、超越方程的解,向量和矩阵的各种计算,求极限、导数、极值、不定积分、定积分、幂级数展开式,求解微分方程,作一元、二元函数的图形等等。

二、Mathematica的基本知识1.输入表达式:直接输入一个表达式(包括算式和命令,长表达式用“Enter”换行)后,按“Shift+Enter”执行,执行后以“Out[命令序号]= ……”形式输出执行结果,输出的结果可在后续的表达式中使用。

若命令后有分号,则不输出执行结果(图形输出与Print命令除外)。

“%”表示上一个输出,“%%”表示倒数第2个输出,“%i”表示第i个命令的输出。

2.运算符:+、-、*、/、^ ,“*”可用空格代替,“^”表示乘方。

如:In[1]:=2^10,输出为“Out[1]= 1024”,其中“In[1]:=”不需要输入。

In[2]:=3+5,Out[2]= 8;In[3]:=%-2,Out[3]= 6;In[4]:=%2+4,Out[4]= 12;In[5]:=1/3-1/4,Out[5]=121;In[6]:=N[%],Out[6]= 0.0833333;In[7]:=N[%5+12,10],Out[7]= 12.08333333(注意字母的大小写)3.变量赋值:变量=表达式,“x=.”或Clear[x] 表示清除对x的赋值。

表达式/.t ->c ,将表达式中的t全替换成c。

?x,查x信息。

4.常用的数学常数:Pi (π)、E(e)、Infinity (∞)、I (1-)5.常用的数学函数:Abs, Sin, Cos, T an, Cot, ArcSin, Log (自然对数), Sqrt,Exp如:In[1]:=Sqrt[2]+1;In[2]:=Sin[2]+ArcSin[1];In[3]:=Exp[2]+%(自变量用[]括,区分大小写,首字母大写)三、常用运算1.多项式运算:In[1]:= (2+4*x^2)*(1-x)^3或In[1]:= t = (2+4*x^2)*(1-x)^3 (将右端表达式赋值给t);In[2]:=a=t/.x->4 (计算表达式t当x=4时的值,并赋值给变量a )In[3]:=a=.(清除变量a )In[3]:=Expand[t](展开);In[4]:=Factor[%](把上一个结果因式分解)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]4.求极限:In[1]:=Limit[Sin[x]/x, x ->0];In[2]:=Limit[(1+1/n)^n, n->Infinity],Out[2]=E5.求(偏)导数:In[1]:=D[a*x^2+3, x];In[2]:=D[x^2+y^3-Sin[2*y], y](对y的偏导数);In[3]:=D[Log[x], {x,2}] (求对x的二阶导数);In[4]:=D[Sin[x+y]*Exp[z*y^2],x,y] (求对x、y的二阶混合偏导数);In[5]:=Simplify[%] (对前一结果化简);In[6]:=D[Sin[x+y]*Exp[z*y^2],{x,2},{y,3}]6.求不定积分:In[1]:=Integrate[x^2,x];In[2]:=Integrate[1/(x^2+a^2),x]7.定积分:In[1]:=Integrate[x^2, {x,0,1}];In[2]:=Integrate[x^2,{x,a,b}];In[3]:=Integrate[x^2+y^2, {x,0,a},{y,0,b}];(求矩形域上的二重积分)In[4]:=Integrate[1, {x,-1,1},{y,-Sqrt[1-x^2],Sqrt[1-x^2]}];Out[4]=Pi(圆面积)8.幂级数展开:In[1]:=Series[Exp[x],{x,0,4}](在x=0处展开到x的四次幂)9.矩阵的输入和输出:In[1]:= a ={{1,2},{3,4}}(定义一个2x2的矩阵a ,按行写);In[2]:=MatrixForm[a](输出为矩阵形式);In[3]:=Transpose[a](a的转置);In[4]:=a[[2]](a的第2行);In[5]:=Tanspose[a][[2]](a的第2列);In[6]:=Inverse[a](求a的逆矩阵);In[7]:=Det[a](矩阵的行列式);In[8]:=Eigenvalues[a](求特征值);In[9]:=Eigenvectors[a](求特征向量);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)In[2]:= b ={1,2,3,5}(列向量);(增广矩阵的秩也为2)In[3]:=LinearSolve[a,b](求线性方程组ax=b的一个特解);In[4]:=NullSpace[a](求线性方程组ax=0的一个基础解系);In[5]:= x =k1%4[[1]]+k2%4[[2]]+%3(ax=b的全部解,k1、k2为任意常数)11.求和:In[1]:=NSum[Sin[n]/n^3,{n,1,Infinity}](求级数∑∞=13 sinn nn的和)12.求极小值:In[1]:=FindMinimum[Sin[x]*Cos[x],{x,0.5}](求函数在0.5附近的极小值);In[2]:=FindMinimum[Sin[x*y]*Exp[x^2],{x,0.2}, {y,0.3}](求多元函数极小值)13.求解线性规划问题:Min cx,mx≥b,x≥0,求向量x 。

mathematica引用方程的解

mathematica引用方程的解

mathematica引用方程的解Mathematica引用方程的解
在Mathematica中,可以使用Solve和DSolve函数分别求解代数方程和微分方程。

1. 求解代数方程
对于代数方程,使用Solve函数。

例如,求解x^2 - 3x + 2 == 0:
```
Solve[x^2 - 3x + 2 == 0, x]
{{x -> 2}, {x -> 1}}
```
输出结果显示方程有两个解,x=2和x=1。

2. 求解微分方程
对于微分方程,使用DSolve函数。

例如,求解y'[x] == y[x]:
```
DSolve[{y'[x] == y[x]}, y[x], x]
{{y[x] -> C[1] E^x}}
```
输出结果给出了微分方程的通解y(x) = C*e^x,其中C是任意常数。

3. 约束条件求解
有时需要给出初始或边界条件,可以将它们作为附加方程一同传递给Solve或DSolve。

例如,对于y''[x] + y[x] == 0, y[0] == 1, y'[0] == 0:
```
sol = DSolve[{y''[x] + y[x] == 0, y[0] == 1, y'[0] == 0}, y[x], x]
{y[x] -> Cos[x]}
```
解包含了满足初始条件的特解y(x) = cos(x)。

Mathematica提供了强大的符号计算能力,可以方便地求解各种复杂的方程。

(完整版)Mathematica——常微分方程、拉氏变换与级数实验

(完整版)Mathematica——常微分方程、拉氏变换与级数实验

创3.5 常微分方程、拉氏变换与级数实验[学习目标]1. 会用Mathematica 求解微分方程(组);2. 能用Mathematica 求微分方程(组)的数值解;3. 会利用Mathematica 进行拉氏变换与逆变换;4. 能进行幕级数和傅里叶级数的展开。

一、常微分方程(组)Mathematica 能求常微分方程(组)的准确解,能求解的类型大致覆盖了人工求解的范围, 功能很强。

但不如人灵活(例如在隐函数和隐方程的处理方面),输出的结果与教材上的答 案可能在形式上不同。

另外,Mathematica 求数值解也很方便,且有利于作出解的图形。

在本 节中,使用Laplace 变换解常微分方程(组)的例子也是十分成功的,过去敬而远之的方法 如今可以轻而易举的实现了。

求准确解的函数调用格式如下: DSolve[eqn ,y[x] ,x] 求方程 eqn 的通解 y(x ),其中自变量是X 。

DSolve[{eqn ,y[x o ]= =y 0},y[x],x] 的特解y (x )。

DSolve[{eqn1,eqn2,—},{y 1 [x],y 2[x],…},x]求方程组的通解。

DSolve[{equ1,…,y 1[x 0]= =y 10,…},{y 1[x],y 2[x],…},x] 求方程组的特解。

说明:应当特别注意,方程及各项参数的表述方式很严格,容易出现输入错误。

微分方 程的表示法只有通过例题才能说清楚。

例1 解下列常微分方程(组):52(1) y 斗(x 1)2,(2) y - y 3 ,(3)x 1(x x ) y解:In[1]: =DSolve[y ' [x]= =2y[x]/ (x+1) + (x+1) A (5/2),y[x],x]Out[1]=y[x] i (1 x)7/2 (1 x)2c[1]In[2]: =DSolve[y ' [x]= = (1+y[xF2 ) /((x+xA3 ) y[x]),y[x],x]求满足初始条件y ( x o ) = y o(4)的通解及满足初始条件y (0) =0, z (0) =1的特解。

用Mathematica进行级数运算

用Mathematica进行级数运算
n 1
的和
2.设 f ( x)
1 1 阶幂级数
3.将y=sin(xex)在点(0,0)处展开到x的7次幂 4.将z=xy在(2,3)处展开为x的3次幂,y的4次 幂。
二、应用部分
(1)利用函数z=xy的五阶泰勒展开式,计算
1.1011.021的近似值. (2)作出y=sinx的图形和函数的幂级数展开式的图形 (选取不同的x0和n),将图形进行比较,并总结 规律。
实验五 用Mathematica进行级数运算
实验目的:学会利用Mathematica进行级数求和、 函数幂级数展开 预备知识:
(一)求和符号∑用法及相关知识 (二)级数的敛散性及其确定 (三)函数展开为幂级数相关知识 (四)Mathematica中求和及级数运算相关命令
边学边做: (一)求和:Sum命令 (1)求有限项的和 n2
2.函数展开成幂级数 (1)Series[Sin[x],{x,0,5}]
x x
3
x
5
6
120
O x
6
(2)Series[1/(3-x),{x,1,3}]
1 2 x 4 1 1 8 x 1
2
1 16
x
1
3
O x
1
4
(3)Series[1/(x+y),{x,1,3},{y,1,2}]
1 2 1 8 y 4 3 y 16 1 1 8 1 y 1 3 16
6 n 1
n
(2)分别求级数
1 n 1 n(n 1)



1 n 1 n
n 1

的和,并判定敛散性
(3)分别求级数 收敛域
xn 与 n 0 n!

mathematica中求解微分方程的命令

mathematica中求解微分方程的命令

mathematica中求解微分方程的命令
Mathematica中求解微分方程的命令是DSolve。

他可以求解一
阶和多阶的常微分方程和偏微分方程。

例如,要求解一阶常微分方程y'(x) + y(x) = 0,可以使用命令:DSolve[{y'[x] + y[x] == 0, y[0] == 1}, y[x], x]
其中,y[x]是未知函数,y'[x]表示y关于x的导数,y[0] == 1
是初始条件。

要求解二阶常微分方程y''(x) - 2y'(x) + y(x) = 0,可以使用命令:DSolve[{y''[x] - 2y'[x] + y[x] == 0, y[0] == 1, y'[0] == 0}, y[x], x]
其中,y''[x]表示y关于x的二阶导数,y'[0] == 0和y[0] == 1
是初始条件。

如果是偏微分方程,可以使用命令DSolveValue来求解。

例如,要求解二阶偏微分方程uxx[x, y] + uyy[x, y] = 0,可以使用命令:
DSolveValue[{D[u[x, y], x, x] + D[u[x, y], y, y] == 0, u[0, y] == Sin[y], u[x, 0] == Exp[-x]}, u[x, y], {x, y}]
其中,u[x, y]是未知函数,uxx[x, y]表示u关于x的二阶混合
偏导数,uyy[x, y]表示u关于y的二阶混合偏导数,u[0, y] == Sin[y]和u[x, 0] == Exp[-x]是边界条件。

Mathematica数学实验——方程和不等式的求解

Mathematica数学实验——方程和不等式的求解

教师指导实验3实验名称:方程与不等式的求解一、问题:求解初等方程(组)与不等式(组)。

二、实验目的:学会使用Mathematica 求解方程(组)、不等式(组)及含参方程(组)、含参不等式(组),体会Mathematica 的强大人工智能。

三、预备知识:本实验所用的Mathematica 命令提示1、Solve[equs,vars] 求解关于变量vars 的方程或方程组equs;2、Reduce[equs,vars] 求解关于变量vars 的方程或方程组equs,并对参数进行讨论;3、NSolve[equs,vars] 求解关于变量vars 的方程或方程组equs 的近似解;4、FindRoot[equs,{x,x 0},{y,y 0}…] 从 (x 0,y 0) 出发找方程(组)equs 的一个解;5、Eliminate[equs,elims] 消去方程组equs 的参数elims;6、InequalitySolve[inequs,vars] 解关于vars 的不等式(组)inequs 。

四、实验的内容与要求:1、解方程(组)223341221,x y x x a y x b⎧+=-+==⎨=+⎩;2、求方程241y xx y ⎧=⎪⎨+=⎪⎩的近似解;3、消去方程则22x ty t =⎧⎨=⎩的参数t ; 4、解关于x 的不等式2|1|1(4)(3)0,11x x x x x x->⎧⎪--≥⎨<<⎪⎩。

五、操作提示1、解方程(组)223341221,x y x x a y x b⎧+=-+==⎨=+⎩;In[1]:= Solve [ x 3 – 2 x + 1 == 0 , x ]Out[1]=⎧⎫⎧⎫⎧⎫⎨⎨⎬⎨⎬⎬⎩⎭⎩⎭⎩⎭11{x →1},x →(-1-,x →(-1+22In[2]:=== a , x ]Out[2]= ⎧⎫⎧⎫⎪⎪⎨⎨⎬⎬⎪⎪⎩⎭⎩⎭424+a x →4aIn[3]:=== a , x ] Out[3]= 424+a x ==&&a ≠04aIn[4]:= Solve [{ y == x + b , 3 x ^ 2 + 4 y ^ 2 == 12 } , { x , y } ]Out[4]=((⎧⎧⎫⎨⎨⎬⎩⎭⎩21x →,y →,77((⎫⎧⎫⎨⎬⎬⎩⎭⎭21x →-,y →3b-77 2、求方程241y x x y ⎧=⎪⎨+=⎪⎩的近似解;In[5]:= NSolve [{ y == x 2 , x 4 + y == 1 } , { x , y }] Out[5]={i i {y →-1.61803,x →1.727202},{y →-1.61803,x →-1.727202} }{y →0.618034,x →0.786151},{y →0.618034,x →-0.786151}3、消去方程则22x ty t=⎧⎨=⎩的参数t ; In[6]:= Eliminate [{ x = = 2 t , y = = t ^ 2 } , t ] Out[6]= 4 y = = x 24、解关于x 的不等式2|1|1(4)(3)0,11x x x x x x->⎧⎪--≥⎨<<⎪⎩。

Mathematical用法 大全 实用版

Mathematical用法 大全 实用版
11.求和:In[1]:=NSum[Sin[n]/n^3,{n,1,Infinity}](求级数 的和)
12.求极小值:In[1]:=FindMinimum[Sin[x]*Cos[x],{x,0.5}](求函数在0.5附近的极小值);
In[2]:=FindMinimum[Sin[x*y]*Exp[x^2],{x,0.2}, {y,0.3}](求多元函数极小值)
(* 这是一个例题 每行后按回车键 用半角标点符号*)
Print["请回答3个题目"]
For[i=1,i<=3,i=i+1,
a=Random[Integer,{1,100}];
b=Random[Integer,{1,100}];
In[4]:=%2+4,Out[4]= 12;
In[5]:=1/3-1/4,Out[5]= ;In[6]:=N[%],Out[6]= 0.0833333;
In[7]:=N[%5+12,10],Out[7]= 12.08333333(注意字母的大小写)
3.变量赋值:变量=表达式,“x=.”或Clear[x] 表示清除对x的赋值。
Mathematica for Windows用法
一、Mathematica的主要功能
Mathematica是美国Wolfram公司开发的一个功能强大的计算机数学系统,提供了范围广泛的数学计算功能,主要包括三个方面:符号演算、数值计算、图形。例如:多项式的四则运算、展开、因式分解,有理式的各种计算,有理方程、超越方程的解,向量和矩阵的各种计算,求极限、导数、极值、不定积分、定积分、幂级数展开式,求解微分方程,作一元、二元函数的图形等等。
8.幂级数展开:In[1]:=Series[Exp[x],{x,0,4}](在x=0处展开到x的四次幂)

Mathematica教程-5用Mathematica求解线性代数基本问题

Mathematica教程-5用Mathematica求解线性代数基本问题

一般情况下,Mathematica假设所有变量都为全局变量。 也就是说无论何时你使用一个你定义的变,Mathematica 都假设你指的是同一个目标。然而在编制程序时,你则 不会想把所有的变量当作全局变量,因为如果这样程序 可能就不具有通用性,你也可能在调用程序时陷入混乱 状态。下面给出定义模块或块和局部变量的常用形式
逻辑表达式的运算形式
expr1&&expr2&&expr3 exprl||expr2||expr3 计算expri,直到其中有一个 为假为止 计算expri,直到其中有一个 为真为止
循环结构
Mathematica程序的执行包括对一系列 Mathematica表达式的计算。对简单程序, 表达式的计算可用分号“;”来隔开,然后 一个接一个地进行计算。然而,有时你需要 对同一表达式进行多次计算,即循环计算。
下例中我们根据i定义m: ln[12]:=m=i^2 Out[12]:=i2 在计算i+m的整个过程中使用块中i的局部值: h[13]:=Block[{i=a},i+m] Out[13]=a+a2 而对于下面的例子,只有直接出现在i+m中的i,才被 看作局部变量: In[14]:=Module[{i=a},i+m] Out[14]=a+i2
Cross[u,v]
向量u与v的外积(对三维向量而言,即 为向量积)

例(续)
二、矩阵的运算
• 下表列出矩阵的其他一些运算
矩阵运算函数 Det[A] Transpose[A] Inverse[A] 说明
计算方阵A的行列式 表示A的转置矩阵 表示A的逆矩阵 给出A的所有k阶子式,返回结果为一个 表 计算A的迹(4.0版) 表示An

mathmatica解方程

mathmatica解方程

mathmatica解方程
Mathematica是一款强大的数学软件,它可以用来解方程。

下面是使用Mathematica解方程的步骤:
1. 打开Mathematica软件并创建一个新文档。

2. 定义要解的方程。

例如,假设我们要解以下方程:
x^2 + 5x - 6 = 0
可以在Mathematica中输入以下代码:
Solve[x^2 + 5x - 6 == 0, x]
其中,Solve是一个内置函数,用于求解方程。

等号左侧的部分是要求解的方程,等号右侧的部分是未知数。

3. 运行代码并查看结果。

在Mathematica中,可以通过按下Shift + Enter来运行代码。

运行后,Mathematica会输出方程的所有根(或解)。

对于上面的例子,输出应该类似于:
{{x -> -6}, {x -> 1}}
这意味着该方程有两个根:-6和1。

4. 可以使用Plot函数绘制出图像以验证结果是否正确。

例如,在上面的例子中,可以使用以下代码绘制出该方程的图像:
Plot[x^2 + 5x - 6, {x, -10, 10}]
这将在[-10,10]范围内绘制出该方程的图像。

从图像中可以看出,该方程确实有两个根:-6和1。

总之,使用Mathematica解方程非常简单。

只需定义方程,运行代码并查看结果即可。

Mathematica还可以绘制出方程的图像以验证结果是否正确。

mathematica迭代法解方程组

mathematica迭代法解方程组

mathematica迭代法解方程组Mathematica中可以使用NSolve或FindRoot来求解方程组,当然,也可以使用迭代法来解决。

下面介绍一种简单的迭代法求解方程组的方法。

假设我们要求解如下方程组:$$begin{cases}x^2-y+z=1y^2-z+x=2z^2-x+y=3end{cases}$$首先,我们需要将方程组转化为向量形式。

定义一个向量函数$F(mathbf{x})=begin{pmatrix}f_1(mathbf{x})f_2(mathbf{x})f_3 (mathbf{x})end{pmatrix}$,其中$f_i(mathbf{x})$表示第$i$个方程的左侧减去右侧所得到的值,即:$$begin{aligned}f_1(mathbf{x})&=x^2-y+z-1f_2(mathbf{x})&=y^2-z+x-2f_3(mathbf{x})&=z^2-x+y-3end{aligned}$$接下来,我们采用Jacobi迭代法求解该方程组。

具体步骤如下:1. 给定初值$mathbf{x}^{(0)}$和迭代次数$n$;2. 对于每个分量$x_i$,计算出它的下一步迭代值$x_i^{(k+1)}$:$$x_i^{(k+1)}=frac{1}{a_{ii}}left(b_i-sum_{jeq i}a_{ij}x_j^{(k)}ight)$$3. 将所有的分量合并成一个向量$mathbf{x}^{(k+1)}$;4. 如果达到了指定的迭代次数$n$,则停止迭代,输出当前的近似解$mathbf{x}^{(n)}$;否则返回第2步。

下面是Mathematica中实现该算法的代码:```(*定义向量函数*)f[x_List] := {x[[1]]^2 - x[[2]] + x[[3]] - 1,x[[2]]^2 - x[[3]] + x[[1]] - 2,x[[3]]^2 - x[[1]] + x[[2]] - 3}(*Jacobi迭代法求解方程组*)jacobi[x0_List, n_Integer] := Module[{x = x0},Do[x[[i]] = (1/Coefficient[f[x], x[[i]]])*(f[x][[i]] +Sum[Coefficient[f[x], x[[i]], 1]*x[[j]], {j, 1, 3}] - Coefficient[f[x], x[[i]], 0]),{k, 1, n}];x](*测试*)sol = jacobi[{0, 0, 0}, 10]f[sol] (*检验结果是否满足方程组*)```运行以上代码得到的结果为:```{0.592662, 1.39611, -1.90835}{0., 0., 0.} (*结果满足方程组*)```这里我们取初始值为$mathbf{x}^{(0)}=begin{pmatrix}000end{pmatrix}$,迭代10次后得到的近似解为$mathbf{x}^{(10)}approxbegin{pmatrix}0.59271.3961-1.9084end {pmatrix}$,同时检验结果发现其满足方程组。

利用Mathematica软件实现线性方程组求解

利用Mathematica软件实现线性方程组求解

利用Mathematica 软件实现线性方程组求解摘要:Mathematica 作为一款独特的数学软件,有强大的数值计算和符号计算能力,具有很强的实用性,而线性方程组在线性代数中具有重要的地位.针对线性方程组的解具有零解、唯一解、无穷解的情况,文章借助Mathematica 数学软件分别给出求解的算法以及如何直接调用内部函数求解线性方程组的方法.文章中主要利用高斯-约当(Gauss-Jordan )消元法、矩阵的LU 分解法求解线性方程组,并用Mathematica 软件对这两种算法予以实现.同时给出了带有可读性好的求解过程、能用于各种逆矩阵和线性方程组求解的通用程序,利用Mathematica 数学软件实现对求逆矩阵和线性方程组的可读性计算.关键字:Mathematica ;线性方程组;可读性计算;算法引言1.Mathematica 软件功能简介Mathematica 作为一款独特的数学软件,有强大的数值计算和符号计算能力.同时,线性方程组是连接矩阵和向量组的纽带,也是矩阵和向量组的直接应用.在我们的实际工作中出现的大量数学模型,他们最后都可以化为解线性方程组,所以对线性方程组的解的研究是非常重要的.在数学的许多分支中都涉及到线性方程组的问题,我们通常分齐次与非齐次两大类以及未知量个数与方程个数相等或不等对其进行求解,在系数矩阵为方阵时,还可以按照行列式是否为零进行分类.对于线性方程组的求解,其算法是非常清楚的,就是利用矩阵的行初等变换将对应的增广矩阵化为行最简矩阵,然后就可写出通解.但是由于整个过程涉及到大量数字运算,往往会因计算过程中不小心出现一些计算错误而导致错误的结论,有时甚至出现对没解的方程求出有解,或相反.然而,如果利用数学软件Mathematica ,可以将大家从繁琐的数字运算中解脱出来,而将注意力集中在基本概念和基本算法的学习上,从而增加学习兴趣,提高学习效率.笔者从事了一年多大学生创新实验《基于数学软件的高等代数解题实践研究》,通过实践发现,如果能够通过计算机编程让计算机自动求解各种线性方程组,这将是非常快速、方便的.因此本文以Mathematica 数学软件为平台,通过举例、演示与实验来理解线性方程组中的一些抽象概念和理论,并简捷直观地用计算机来解决复杂的线性方程组的求解问题,化简过难、过繁的运算技巧.本文根据Mathematica 软件强大的数值计算无误差的特点和符号计算功能,总结Mathematica 的关于线性方程组计算的功能、命令,总结了求解线性方程组的解的算法,并给出带有可读性好的求解过程、能用于各种线性方程组求解的通用程序,实现线性方程组的可读性计算.由于本章用到线性代数的许多基本知识,有必要对相关的概念和性质做一下说明. 定义1 如两个方程组具有完全相同的解,则称两个方程组为等价方程组.定义2 关于方程组的初等运算有三种类型:1) 交换方程组中两个方程:i j R R ↔,称为交换运算.2) 用一个非零的实数乘以某一方程:i i R R λ→,称为倍法运算.3) 某方程加上另一个方程的倍数:i j i R R R λ+→,称为消法运算.定理1 若一个方程由另一个方程经过有限次初等运算得到的,则这两个方程组等价.定义3 矩阵的初等变换,用i A 表示矩阵A 的第i 行,那么有:1) 交换A 的两行:i j A A ↔,称为交换变换.2) 用一个非零的实数λ乘以A 的某一行:i j A A λ→,称为倍法变换.3) 用A 某行加上另一行的λ倍:i j i A A A λ+→,称为消法表换.定义4 对矩阵A 施行初等变换,得到的矩阵称为相应的初等阵.例如23100100010001001010A A ↔⎛⎫⎛⎫ ⎪ ⎪−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作23E2210010001000001001A A λλ⨯↔⎛⎫⎛⎫ ⎪ ⎪−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作()2E λ32310010001001000101A A A λλ+⨯↔⎛⎫⎛⎫ ⎪ ⎪−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作()23E λ定理2 对矩阵施行初等变换相当于将矩阵左乘相应的初等阵.212+-210210221-101-5001001A A A ⨯→⎛⎫⎛⎫ ⎪ ⎪−−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭()相当于12(-2)E A100102102-21021-1=01-5001001001⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭定理3 对任何n 阶矩阵A,以下性质等价:1) A 存在逆矩阵,即A 是可逆矩阵.2) 0A ≠,即A 是非奇异矩阵.3) A 的行向量组(列向量组)线性无关.4) 方程组AX b =有唯一解.定理4 如果矩阵A 经过一系列的初等变换化为单位阵E,则单位阵E 通过相同的初等变换化为1A -.由此得出用初等变换求矩阵逆的方法下例所示. 例1:求矩阵123133247A ⎛⎫ ⎪= ⎪ ⎪⎝⎭的逆. 解:()(2)(1)(1)(2)(3)(1)13(3)(2)13(1)(3)(3)(1)(1)(2)211231*********33010010-110247001011-201123100100010-110010001-1-110A E +-⨯→+-⨯→+-⨯→+-⨯→+-⨯→⎛⎫⎛⎫ ⎪ ⎪=−−−−−−→−−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎛⎫ ⎪−−−−−−→ ⎪ ⎪⎝⎭()()()()()()()-161-3-110=01-1-11E A ⎛⎫ ⎪ ⎪ ⎪⎝⎭ 2 Mathematica 软件常用命令及其功能为了便于读者更好地利用Mathematica 软件解决数学问题,首先给出本文程序涉及的Mathematica 数学软件的命令及其功能.Append[expr,elem]——生成一个在表expr 的最后添加元素elem 后的表;Complement[listall, list1,list2,…]——求全集listall 对listi 的差集; Delete[expr,{i}]——删除expr 中第i 个元素后剩下的表;Do[expr,{imax}]——重复执行expr 共imax 次;Table[expr,{imax}]-—生成一个由表达式expr 产生的元素构成的共imax 个元素的表; Do[expr,{i,min,max}]——循环变量i 按步长1从min 取至max,重复执行表达式expr; Do[expr,{i,imin,imax},{j,jmin,jmax},…]——多重循环;Dot[a,b]——矩阵、向量、张量a 与b 的内积;Transpose[list]——对矩阵list 进行转置; IdentityMatrix[n]——自动生成一个n 阶单位矩阵;Insert[expr,elem,n]——在表expr 的第n 个元素前插入元素elem 产生一个新表; If[condition,t,f]——如果条件condition 为True,执行t 段,否则执行f 段;Length[expr]——表expr 中第一层元素的个数( 通常称为表的长度);LinearSolve[A,b],给出向量x,使得Ax b =成立.——求解线性方程组Ax b =的一个特解; LUBackSubstitution[数据,b]——利用LUDecomposition[矩阵A]输出的结果求解方程组矩阵.x=bLUDecomposition[A]——求出矩阵A 的LU 分解;LUMatrices[lu]——返回一个形式为{l,u}的列表;MatrixForm[expr]——按矩阵形式将表expr 输出;NullSpace[A]——求齐次线性方程组AX=0的基础解系;Print[expr1,expr2,…]——顺次输出表达式expri 的值;RowReduce[A]——将矩阵A 化为简化行梯形形式;Simplify[expr]——对表达式expr 进行化简;Solve[eqns,vars]——从方程组eqns 中解出变量vars;(*information*)--注释语句,其中information 表示对程序作说明;{a,b,c}--Mathematica 中表的结构,表示元素分别为a,b,c 的表;3线性方程组解的算法及在Mathematica 软件中的实现3.1线性方程组的解考虑线性方程组:,,,()n m m n A X b X R b R R A m ⨯=∈∈= (1)其对应的齐次线性方程组为:0AX = (2)讨论线性方程组AX b =的求解问题,式中A 为m n ⨯阶系数矩阵,b 为1m ⨯阶右端列向量,X 为待求的1n ⨯阶列向量.这里首先假定m n ≤,如果m n >留待稍后讨论.当m n =且行列式0A ≠时,称AX b =为恰定方程组;当m n <时,称AX b =为不定方程组;当m n >时,称AX b =为超定方程组;在上述方程组求解的讨论中,常常要用到系数矩阵A 的秩()R A ,与增广矩阵的秩(,)R A b ,有时还要计算对应齐次方程组0AX =的基础解系.线性方程组(1)的解有以下3个结论:线性方程组的解的基本问题:当()(,)R A R A b n ==时,(1)有唯一解;当()(,)R A R A b n =<时,(1)有无穷多组解;当()(,)R A R A b <时,(1)无解.线性方程组的解的结构问题:线性方程组(1)对应的齐次方程组(2)的基础解系由()n R A -个向量组成;(2)的通解为基础解系的任意线性组合;(1)的通解为(1)的特解与(2)的通解之和.Mathematica 软件中的命令Solve 可以直接求出方程组(不限于线性)的解,一般格式为:Solve[eqns,vars],其功能是从方程组eqns 中解出变量vars.(但对于大的方程组而言,这种方法就显得有点儿麻烦,而且效率不高.)也有专门用于求解线性方程组的命令,一般格式为:LinearSolve[A,b],给出向量x,使得AX b =成立.其功能是求解线性方程组AX b =的一个特解,此命令的缺陷是当方程组的解不唯一时,只能求出一个特解而不能求通解.其中A 是方程组的系数矩阵,而b 为线性方程组的“右边项”.如果A 为可逆阵,那么LinearSolve 就给出线性方程组的唯一解.如果A 为奇异阵,那么方程组就可能没有解,也有可能存在无穷组解.如果方程组具有唯一解,Mathematica 就会给出这个解(如例3).如果方程组没有解,Mathematica 就会返回出错信息(*Linear equation encountered which has no solution.*),即遇到了没有解的线性方程组.(如例4)例2:求解线性方程组.⎪⎩⎪⎨⎧=++=++=++147338523532321321321x x x x x x x x xA1={{2,1,3},{3,2,5},{3,3,7}};b1={5,8,14};Det[A1]=10≠,故知方程组有唯一解LinearSolve[A1,b1] (*利用Solve 函数求解11A X b =*)={-3,-4,5} (*求得解543321=-=-=x x x *)例3:求解线性方程组⎪⎩⎪⎨⎧=++=+-=++124313427233z y x z y x z y x⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=12171;4313422331b a a1={{3,3,2},{2,-4,3},{1,3,4}};b1={{7},{1},{12}};运行LinearSolve[a1,b1]得:231776,,701435⎧⎫⎧⎫⎧⎫⎧⎫-⎨⎨⎬⎨⎬⎨⎬⎬⎩⎭⎩⎭⎩⎭⎩⎭例4:方程组⎪⎩⎪⎨⎧=+-=+-=++1143313462z y x z y x z y x 没有解.⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=11162;4333411122b a a2={{2,1,1},{1,-4,3},{3,-3,4}};b2={{6},{1},{11}};运行LinearSolve[a2,b2]得:LinearSolve::nosol: Linear equation encountered that has no solution.(遇到了没有解的线性方程组)LinearSolve[{{2,1,1},{1,−4,3},{3,−3,4}},{{6},{1},{11}}]如果方程组没有解,Mathematica 就会返回出错信息(*Linear equation encountered which has no solution.*),即这是一个没有解的线性方程组.如果方程组Ax=b 有无穷组解,问题就有一些复杂了.对于这种情况,Mathematica 就会返回一个解,我们称其为特解.而所有解是由特解加上对应的齐次方程组Ax=0的所有解构成的.所有满足0AX =的向量X 全体称为A 的零空间,可以很容易地用NullSpace 命令确定出零空间的构造.NullSpace[A ]返回A 的零空间的基向量,即齐次线性方程组AX=0的基础解系.A 的零度,即A 的零空间中最大线性无关向量组的向量个数,可以通过运行Length[NullSpace[a]]得到. A的秩可以用n-Length[NullSpace[A]]算出,其中n表示A 的列数.例5:方程组2y74323349x zx y zx y z++=⎧⎪-+=⎨⎪-+=⎩有无穷组解.a={{2,1,1},{1,-4,3},{3,-3,4}};b={{7},{2},{9}};nullspacebasis=NullSpace[a]{{−7,5,9}}(*由于零向量非空,因此没有唯一解*)particular = LinearSolve[a, b]{{10/3}, {1/3}, {0}}(*这是一个特解*)方程组的完全解具有形式t*nullspacebasis+particular,其中t是任意参数.然而,为了表示成单个列表,我们必须展平nullspacebasis和particular. generalsolution = t*Flatten[nullspacebasis] + Flatten[particular]{10/3 - 7 t, 1/3 + 5 t, 9 t}作为检验的步骤,我们下面把一般解代回到原来的方程组中.a.x /. x -> {10/3 - 7 t, 1/3 + 5 t, 9 t} // Expand{7,2,9}关于线性方程组求解的算法研究已比较成熟,本文主要利用高斯-约当(Gauss-Jordan)消元法和矩阵LU分解法求解线性方程组.3.2高斯-约当(Gauss-Jordan)消元法求解线性方程组ax=b的高斯-约当方法是基于对增广矩阵[]a b的简化处理,这个过程通过初等变换把矩阵转化为简化行阶梯形的形式.基本初等行变换有下述三种:①交换两行②在一行中乘上一个非零常数③在一行中加上另一行的倍数.容易证明初等行变换对方程组的解没有影响.一个矩阵称为简化行阶梯形形式,是指①每一行中第一个非零元素都是1(称为首1)②在这个1的上面或者下面的元素都是0③对于两个首1的行,下面的行中第一个非零元素比前一个更靠右.在求解线性方程组时,我们首先应该使用初等行变换把增广矩阵转化为简化梯形形式.学过线性代数或者高等代数的读者都知道初等行变换是非常麻烦的,很容易出错.并且只要有一个地方出错,后面的计算就已经无用了.然而,Mathematica数学软件中的RowReduce命令可以自动把任意矩阵转化为简化行梯形形式.RowReduce[A]——把矩阵A 转化为简化行梯形形式.例6: 考虑3⨯4阶矩阵,其元素为ij a i j =-.a=Table[Abs[i-j],{i,1,3},{j,1,4}];a//MatrixForm⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡123012101210 RowReduce[a] //MatrixForm⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡23021100010001 下面我们演示行简化过程是怎么用于线性方程组的求解.为了便于比较,我们使用的范例采用前面的例3、例4与例5 中考虑的三个例子.例7:(a )方程组124313427233=++=+-=++z y x z y x z y x (有唯一解) (b )方程组1143313462=+-=+-=++z y x z y x z y x (无解) (c )方程组943323472=+-=+-=++z y x z y x z y x (有无穷组解)这三个方程组的增广矩阵分别为 ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=9433234171123;11433134161122;12431134272331a a aa1={{3,3,2,7},{2,-4,3,1},{1,3,4,12}};a2={{2,1,1,6},{1,-4,3,1},{3,-3,4,11}};a3={{2,1,1,7},{1,-4,3,2},{3,-3,4,9}}; RowReduce[a1]//MatrixForm⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-357610014170107023001 (*当矩阵被简化后,如果把它看作方程组,容易看出x=-23/70,y=17/14,z=76/35*) RowReduce[a2] //MatrixForm795910001-00001⎛⎫ ⎪ ⎪ ⎪⎝⎭(*简化后的矩阵第三行指的是0001x y z ++=,这当然是不可能的.这个矛盾(一行中只有最后一个元素是非零,其余都是零)说明方程组没有解.*) RowReduce[a3] //MatrixForm7109351931001-0000⎛⎫ ⎪ ⎪ ⎪⎝⎭(底行全是0没有任何不对的地方,然而这个方程组没有唯一解,如果令z=t,其中t 为独立参数,那么方程组的解具有如下形式:10715,,3939x t y t z t =-=+=) [注释] 虽然这个解与例5给出的解在形式上稍有些不同,但从它们确定相同的解集的意义上看,它们是等价的.求解线性方程组的算法步骤为:1.对增广矩阵(非齐次)或系数矩阵(齐次)进行初等行变换,将其转化为行最简形矩阵(对非齐次线性方程组判断是否有解);2.确定非自由未知量和自由未知量,将行最简形“翻译”为方程组;3.令自由未知量等于任意常数,得到通解.3.3 矩阵的LU 分解法(Doolittle 法)LU 分解法(杜利特尔Doolittle 方法) 是另外一种经常使用的求解线性方程组的方法,尤其是当具有许多方程组,而且每个方程组的系数相同时,这种方法特别有用. LU 分解法的基本思想是这样的.如果A 为方阵,那么它可以分解为A=LU,其中L 为下三角矩阵,主对角线上元素全是1,U 为上三角矩阵.这样方程组Ax=b 就转化为(LU )x=b,其可重写为L (Ux )=b.如果令y=Ux,那么可以从Ly=b 中解出y,一旦有了y,就可以从Ux=y 中解出x.(LU)Ly b Ax b x b Ux y =⎧=⇔=⇔⎨=⎩虽然矩阵LU 分解法把一个方程组的求解转化为两个方程组的求解,但由于现在每个方程组的系数矩阵都是三角矩阵,因此计算起来速度是很快的.这样一来,如果使用LU 分解法求解线性方程组,就包含两个步骤:分解与回代.对应的Mathematica 命令就分别为LUDecomposition 与LUBackSubstitution .LUDecomposition[A]——求出矩阵A 的LU 分解;LUBackSubstitution[数据,b]——利用LUDecomposition[矩阵A]输出的结果求解方程组矩阵.x=bLUDecomposition 的输出为数据,由三部分组成:(1)矩阵L 与U 被压缩到一个矩阵中,(2)一个置换向量,以及(3)矩阵的L ∞条件数.把数据送给LUBackSubstitution 就可以求解出线1112111121421222212221212111n n n n n nn n n nn a a a r r r a a a l r r A a a a l l r ⎛⎫⎛⎫⎛⎫ ⎪ ⎪⎪ ⎪ ⎪⎪== ⎪ ⎪⎪ ⎪ ⎪⎪⎝⎭⎝⎭⎝⎭性方程组.置换向量对行进行重新安排,以保证矩阵具有最大的数值稳定性.本文不再对条件数加以讨论.LUDecomposition 与LUBackSubstitution 不能用于求解具有无穷组解的线性方程组.例8: 利用LU 分解法求解线性方程组2y 743232213x z x y z x y z ++=⎧⎪-+=⎨⎪++=⎩.为了用LU 分解法求解线性方程组,我们首先对系数矩阵进行矩阵分解.2117143;2;32213a b ⎡⎤⎡⎤⎢⎥⎢⎥=-=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦运行Clear all;a={{2,1,1},{1,-4,3},{3,2,2}};b={{7},{2},{13}};data=LUDecomposition[a]得{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1}LUBackSubstitution[data,b]{{1},{2},{3}}在例9和例10中演示了LUDecomposition 返回数据的结构.例9 567131232728m ⎛⎫ ⎪= ⎪ ⎪⎝⎭;m={{5,6,7},{1,3,12},{3,27,28}};{lu,m,cond}=LUDecomposition[m]{{{1,3,12},{5,-9,-53},{3,-2,-114}},{2,1,3},1}在本例中,没有进行行置换,因为此时的置换向量p 就是{1,2,3}.LUDecomposition[m]的第一部分是以压缩形式给出的两个矩阵,因为我们已知LU 的形式为100100100x x x x x x x x x ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦; 所以要想指定矩阵L 、U,只需要指定九个元素(用x 表示).在LUDecomposition[m]的第一部分就是用单个矩阵的形式给出这九个数.lu//MatrixForm234256347⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦这些数虽然是组合在一个矩阵中,但每个数所在的位置却是分别与L 、U 中的位置一致的,因此100234LU 210056341007⎡⎤⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦例10 211143322m ⎡⎤⎢⎥=-⎢⎥⎢⎥⎣⎦; Clear all;m={{2,1,1},{1,-4,3},{3,2,2}};{lu,p,cond}=LUDecomposition[m]{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1}lu//MatrixForm714991432953⎛⎫ ⎪ ⎪ ⎪⎝⎭--如果仍然按前面例子同样的步骤处理,就会得到71499100143210;095;3100l u -⎡⎤⎡⎤⎢⎥⎢⎥==-⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 但这时l 与u 乘起来并不等于原来的矩阵.l.u//MatrixForm143211322-⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦实际上这时置换向量为p={2,1,3},表明矩阵中第一行与第二行交换了顺序.如果这时交换l 中相应的行,再乘上U 就会得到原来的矩阵.149210100;31l ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦L.U//MatrixForm211143322⎡⎤⎢⎥-⎢⎥⎢⎥⎣⎦重构出L 与U 矩阵的更方便的方法是利用LUMatrices 命令,这条命令包含在软件包LinearAlgebra`MatrixManipulation`中.LUMatrices[lu]——返回一个列表,形式为{l,u},由对应于lu 的矩阵在LU 分解中被置换后的上三角与下三角矩阵组成,其中lu 为运行LUDecomposition[A]所得结果中的第一个元素.例11:自动求解例9中的L 、U运行<<LinearAlgebra`MatrixManipulation`调入软件包. 运行m={{2,1,1},{1,-4,3},{3,2,2}}; {lu,p,cond}=LUDecomposition[m]得数据{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1} 运行LUMatrices[lu] 得转换后的L 、U 矩阵{{1,0,0},{2,1,0},{3,14/9,1}},{{1,-4,3},{0,9,-5},{0,0,7/9}}} 由此可见可以自动提取转换后的L 、U 矩阵: L= LUMatrices[lu][[1]]; U= LUMatrices[lu][[2]];L[[p]]//MatrixForm (*L[[p]]根据向量p 对矩阵L 的行进行置换*)14921010031⎛⎫ ⎪ ⎪ ⎪⎝⎭U//MatrixForm7914309500-⎛⎫⎪- ⎪ ⎪⎝⎭运行下列命令,从结果可见L 与U 的乘积与原矩阵一致:L[[p]].U//MatrixForm211143322⎛⎫ ⎪- ⎪ ⎪⎝⎭例12:利用LU 分解法求解方程⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛-400320102423xLU 分解法的计算步骤:1.首先将方程组的系数矩阵进行LU 分解,得到A LU =.2.求解LY=b.3.求解UX=Y.(*输入数据*)A = {{3, 2, -4}, {2, 0, 1}, {0, 2, 3}}; b = {0, 0, 4};(*对A 进行LU 分解:A=LU*)Print["待求方程组为", MatrixForm[A], "x=", MatrixForm[b]]; n = Length[b];{lu, p, c} = LUDecomposition[A];Print["LU 分解的紧凑格式为", MatrixForm[lu]]; Print["置换向量为", p];l = lu SparseArray[{i_, j_} /; j < i -> 1, {n, n}] + IdentityMatrix[n]; Print["分离的L 矩阵为", MatrixForm[l]];u = lu SparseArray[{i_, j_} /; j >= i -> 1, {n, n}]; Print["分离的U 矩阵为", MatrixForm[u]]; (*求解Ly=b*)y = LinearSolve[l, b[[p]]]; Print["求解Ly=b 得:y=", y]; (*求解ux=y*)x = LinearSolve[u, y] // N; Print["方程组解为:x=", x];运行以上程序得:4线性方程组求解过程的可读性计算假设AX E =,其中A 为n 阶系数矩阵,E 为单位矩阵,即123=,,,,n E e e e e (),其中(1,2,)i e i n =为单位列向量,X 为n 个列向量构成的矩阵,即2(,,)i n X x x x =,其中,(1,2,)i x i n =为列向量.于是,可以把等式AX E =看作求解n 个线性方程组,(1,2,)i i Ax e i n ==出了所有i x 之后,也即得到了矩阵X .而由AX E =可知,矩阵X 是A 的逆矩阵,即1X A -=.这样就求出了A 的逆矩阵.于是求逆矩阵的过程被化成了解线性方程组的过程.我们利用Mathematica 软件实现对求逆矩阵的可读性计算,对我们探讨线性方程组的解法有非常重要的意义.4.1 求逆矩阵可读性计算我们编写可读性程序如下: (*求矩阵的逆矩阵*)运行InvMatr[A_] := (If[! MatrixQ[A],Print["A is not a Matrix, We don't calculate the inverse of A."], Print["Matrix A =", MatrixForm[A], ", "]; If[Det[A] == 0,Print["Because of Det[A]=0, There isn't inverse Matrix of A."], n = Length[A];ident = IdentityMatrix[n]; AT = Transpose[A]; Temp = AT;Do[Temp = Append[Temp, ident[[i]]], {i, 1, n}]; AE = Transpose[Temp];Print["(A|E)=", MatrixForm[AE]]; Do[k = Infinity; r = j;Do[ If[Abs[AE[[i, j]]] < k && AE[[i, j]] != 0, k = AE[[i, j]]; r = i], {i, j, n}];If[r != j, TempMatrix = AE[[r]]; AE[[r]] = AE[[j]]; AE[[j]] = TempMatrix];Do[AE[[i]] = AE[[i]] - AE[[j]]*AE[[i, j]]/AE[[j, j]], {i, 1, j - 1}];Do[AE[[i]] = AE[[i]] - AE[[j]]*AE[[i, j]]/AE[[j, j]], {i, j + 1, n}]; AE[[j]] = AE[[j]]/AE[[j, j]];Print["-->", MatrixForm[AE]]; , {j, 1, n} ];B = Transpose[AE]; Temp = {B[[n + 1]]};Do[Temp = Append[Temp, B[[i]]], {i, n + 2, 2 n}];Print["The Inverse Matrix A of is ", Transpose[Temp] // MatrixForm, "."] ] ] )为说明本程序可用于任何对矩阵的逆的各种情形的求解处理,举例计算如下.例13:已知a1={2,3,1,4};a2={3,0,2,5};a3={4,3,8};a4={2,7,4,15};A={a1,a2,a3,a4},求A 的逆阵. 运行Clear; a1={2,3,1,4}; a2={3,0,2,5}; a3={4,3,8}; a4={2,7,4,15}; A={a1,a2,a3,a4}; InvMatr[A]得:A is not a Matrix, We don't calculate the inverse of A. 如果我们输入的A 不是矩阵,我们不可求A 的逆阵.例14:求矩阵A=⎪⎪⎪⎪⎪⎭⎫⎝⎛64401800154012202的逆矩阵. 运行Clear;a1={2,0,2,2}; a2={1,0,4,5}; a3={1,0,0,8}; a4={1,0,4,64}; A={a1,a2,a3,a4}; InvMatr[A]得:Matrix A =⎪⎪⎪⎪⎪⎭⎫ ⎝⎛64401800154012202 Because of Det[A]=0, There isn't inverse Matrix of A.此时,A 的行列式为0,A 没有可逆阵.例15:求矩阵A=⎪⎪⎪⎭⎫ ⎝⎛--242022233的逆矩阵.Clear;a1={3,3,2};a2={2,-2,0}; a3={-2,4,2}; A={a1,a2,a3}; InvMatr[A]运行结果为:例16:求矩阵A= ⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛3000023000023000023000023的逆矩阵Clear;a1={3,2,0,0,0};a2={0,3,2,0,0};a3={0,0,3,2,0};a4={0,0,0,3,2}; a5={0,0,0,0,3};A={a1,a2,a3,a4,a5}; InvMatr[A]通过上面的讨论我们可以看出该程序对任何一个矩阵型数据均能做出相应的处理,对输入的矩阵为可逆时,程序能计算出逆矩阵.进而我们通过Mathemtica 软件对解方程组也可实现可读性计算.4.2 线性方程组的可读性计算虽然Mathematica 软件中有解方程组的函数,但是,用此函数求解方程组存在不足之处:不能看到求解方程组的过程,也不能看到求解方程组的其他信息;输入方程组信息的形式繁琐且输出的内容不符合代数教材中通常的习惯,不能为其他程序提供更多的信息.而通过Mathematica 软件到底能不能对解线性方程组算法的实现将其过程展现出来呢?我们的答案是肯定的.只是在求解过程中,要运用到更多的输出形式函数.其程序相对较复杂.程序中较多的命令都是由简单命令复合而成,现对复合命名的构造过程进行描述.为了使实例17中的增广矩阵2-21-1121-42-2334-103-57812-11-2-1⎛⎫ ⎪ ⎪ ⎪⎪⎝⎭具有分块形式22111|214223|3410357|812112|1⎛⎫⎪⎪⎪ ⎪⎝⎭---------, 就需要在最后一列前插入符号“|”进行分隔,但Mathematica 中的矩阵是由行表构造而成,因此先用Transpose 命令对矩阵AUB 进行转置,并事先生成一个全由“|”为元素的一维表B0,一次性地把B0 插入到AUB 的转置矩阵的最后一行之前,然后再转置,就实现了我们希望的输出效果.完整的命令如下:B0=Table["|",{i,1,m}];MatrixForm[Transpose[Insert[Transpose[AUB],B0,n+1]]]Mathematica对表进行操作时是对表的每个元素进行同一操作,因此在对AUB 中找出的主元AUB(r,j)进行归一化处理时,可用下列命令实现对r行元素各除以AUB(r,j):AUB[[r]]=AUB[[r]]/AUB[[r,j]];为了把j 列除主元AUB(r,j)外的各元素全变成零,可对1 至r-1 行及r+1 至m 行分别进行第三类初等行变换.完整命令如下:Do[AUB[[i]]=AUB[[i]]-AUB[[r]]*AUB[[i,j]] ,{i,1,r-1}];Do[AUB[[i]]=AUB[[i]]-AUB[[r]]*AUB[[i,j]] ,{i,r+1,m}];处理解唯一时的输出时要解决的问题:AUB 的第n+1 列就是所求的解,但当m>n 时由于方程个数比未知量个数多,直接输出AUB(n+1)将出现多余的0,因此先把这些0 的位置存入表dele 中,再用Delete 命令把AUB(n+1)中多余的0 删除;为了把行向量以列的方式输出,由于Transpose 对一维表无效,因此把删除多余元素后的表放在{}中以增加其维数,最后形成的完整命令如下:dele=Table[{i},{i,n+1,m}];MatrixForm[Transpose[{Delete[Transpose[Simplify[AUB]][[n+1]], dele]}]]]下面是经过完整的求解线性方程组的可读性计算的完整程序:conslist = {C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13,C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25};varlist = {x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25}; MatrixPrint[A_] := (B0 = Table["|", {i, 1, m}];MatrixForm[Transpose[Insert[Transpose[AUB], B0, n + 1]]])PrintSolve[] := (ME = IdentityMatrix[S];basV = Complement[Table[i, {i, 1, n}], fuq];L = Length[basV];(*L 记录基变量的个数*)AUB = Transpose[AUB];eta = Table["", {S}];i = 0; eta[[i]] = AUB[[n + 1]];eta[[i]] = Table[eta[[i]][[j]], {j, 1, L}];Do[eta[[i]] = Insert[eta[[i]], 0, fuq[[k]]], {k, 1, S}];Do[eta[[i]] = -AUB[[fuq[[i]]]];eta[[i]] = Table[eta[[i]][[j]], {j, 1, L}];Do[eta[[i]] = Insert[eta[[i]], ME[[i, k]], fuq[[k]]], {k, 1,S}], {i, 1, S}];Ck = Table[conslist[[i]], {i, 1, n}];solv = MatrixForm[Transpose[{eta[[0]]}]];Do[solv = solv + MatrixForm[Transpose[{eta[[i]]}]]*Ck[[i]], {i, 1,n - r}];Print["X=", solv];)SolutionEquation[A_, B_] := (n = Length[A[[1]]]; m = Length[B];X = Table[varlist[[i]], {i, 1, n}]; AX = Dot[A, X];Print["求解下列线性方程组:"];Do[Print[AX[[i]], "=", B[[i]]], {i, 1, m}];Print["解:先对增广矩阵进行初等行变换:"];AUB = Transpose[Append[Transpose[A], B]];Print[MatrixPrint[Simplify[AUB]]];r = 1; fuq = {};(*fuq 存放自由未知量的下标*)Do[k = Infinity; flag = 0;(*查找列主元素的位置*)Do[If[AUB[[i, j]] != 0, flag = 1], {i, r, m}];If[flag == 0, fuq = Append[fuq, j]; Continue,Do[If[Abs[AUB[[i, j]]] < k && AUB[[i, j]] != 0, k = AUB[[i, j]]; t = i], {i, r, m}];If[t != r, TempMatrix = AUB[[t]];AUB[[t]] = AUB[[r]]; AUB[[r]] = TempMatrix];AUB[[r]] = AUB[[r]]/AUB[[r, j]];Do[AUB[[i]] = AUB[[i]] - AUB[[r]]*AUB[[i, j]], {i, 1, r - 1}];Do[AUB[[i]] = AUB[[i]] - AUB[[r]]*AUB[[i, j]], {i, r + 1, m}];Print["-->", MatrixPrint[Simplify[AUB]]];r = r + 1];, {j, 1, n}];r = r - 1;S = n - r;(*基础解系中解的个数*)Print[" 增广矩阵的秩r=", r, ", 未知量个数 n=", n, ";"];If[r == n, Print["结论:因为增广矩阵的秩等于未知量个数,方程组有唯一解:X=", dele = Table[{i}, {i, n + 1, m}];MatrixForm[Transpose[{Delete[Transpose[Simplify[AUB]][[n + 1]], dele]}]]], If[r == m, Print["结论:因为增广矩阵的秩等于方程个数且小于未知量个数,方程组有无穷多组解:"];PrintSolve[],If[AUB[[r + 1, n + 1]] != 0, Print["因为增广矩阵的秩小于未知量个数,但 dr+1!= 0,所给方程组无解"], Print["因为增广矩阵的秩小于未知量个数, 且dr+1=0,方程组有无穷多组解:"];PrintSolve[];];];];)说明:本程序可用于变量在25个内的任何线性方程组的求解,如果变量超过25个,只需要增加程序中conslist 与varlist 分量个数即可.例17:求解方程组⎪⎪⎩⎪⎪⎨⎧=-+-+=+-+-=+-+-=+-+-2342310634852232533354321543215432154321x x x x x x x x x x x x x x x x x x x x 在Mathematica 输入并运行:A={{3,-3,1,-1,1},{1,-5,2,-3,2},{5,-8,4,-3,6},{1,3,-2,4,-3}};b={3,2,10,2};SolutionEquation[A,b]即得到如下求解结果,其中所有内容全部由程序自动输出得到. 求解下列线性方程组: 3x1-3x2+x3-x4+x5=3 x1-5x2+2x3-3x4+2x5=2 5x1-8x2+4x3-3x4+6x5=10 x1+3x2−2x3+4x4−3x5=2例18:求解方程组⎪⎪⎩⎪⎪⎨⎧-=+-++=-++--=+-++=+-++1423412231245354321543215432154321x x x x x x x x x x x x x x x x x x x x 在Mathematica 输入并运行:A={{1,3,5,-4,2},{1,3,2,-2,1},{1,-4,1,1,-1},{1,2,1,-4,1}};b={1,-1,3,-1}; SolutionEquation[A,b]即得到如下求解结果,其中所有内容全部由程序自动输出得到.例19:求解线性方程组⎪⎪⎩⎪⎪⎨⎧-=+-=++=--=-+332523233231321321321x x x x x x x x x x x a1={1,2,-1};a2={1,-3,-1};a3={3,1,2};a4={-2,0,3};A={a1,a2,a3,a4};B={3,2,5,-3}; SolutionEquation[A,B]参考文献[1] 北京大学数学系几何与代数教研室前代数小组编.高等代数[M].北京:高等教育出版社,2003[2] 王绍恒,王艺静.利用Mathematica软件实现解线性方程组的可读性计算[J].重庆三峡学院学报,2009(3),25(3):143-146[3] 姜友谊,应宏,王绍恒.化实对称矩阵为对角矩阵的计算机算法[J].西南民族学院学报,2002,28(4):428-432[4] 张禾瑞,郝鈵新,高等代数(第五版)[M].北京:高等教育出版社,2007[5] 刘水强,王绍恒.利用初等行变换解线性矩阵方程[J].重庆三峡学院学报,2001,17(5):87-89[6] 徐士良.计算机常用算法[M].北京:清华大学出版社,2000.8.[7] 徐安农,科学计算引论:基于Mathematica的数值分析[M].北京:机械工业出版社,2010.8[8] 冯天祥,数值计算方法理论与实践研究[M].成都:西南交通大学出版社,2005[9] 阳明盛,林建华.Mathematica基础及数学软件[M],大连:大连理工大学出版社,2003[10][美] Rchard J. Gaylord,Samuel N.Kamin ,Paul R. Wellin著,耿勇译.数学软件Mathematica 入门[M].高等教育出版社,2001[11][美]D.尤金.Mathematica使用指南[M].邓建松,彭冉冉,译.北京:科学出版社,2002.。

mathematica 解方程

mathematica 解方程

mathematica 解方程Mathematica是一款强大的数学计算软件,它不仅可以进行数学计算,还可以进行数据分析、图像处理等多种功能。

其中,解方程是Mathematica的一个重要功能,本文将介绍Mathematica解方程的基本原理和应用。

一、Mathematica解方程的基本原理Mathematica解方程的基本原理是通过求解方程的根来得到方程的解。

Mathematica可以解决各种类型的方程,包括代数方程、微分方程、偏微分方程等。

在解方程时,Mathematica会自动选择最适合的求解方法,并给出方程的解析解或数值解。

Mathematica解方程的核心功能是Solve、NSolve和DSolve。

其中,Solve和NSolve用于解决代数方程,DSolve用于解决微分方程和偏微分方程。

Solve和NSolve的使用方法类似,它们都是用于解决代数方程的。

Solve可以求解精确解,而NSolve可以求解数值解。

例如,我们要解决方程x^2-3x+2=0,可以使用Solve和NSolve命令:Solve[x^2-3x+2==0,x]NSolve[x^2-3x+2==0,x]执行上述代码后,Mathematica会输出方程的解析解或数值解。

DSolve用于解决微分方程和偏微分方程。

例如,我们要解决微分方程y''+y=0,可以使用DSolve命令:DSolve[y''+y==0,y,x]执行上述代码后,Mathematica会输出微分方程的通解。

二、Mathematica解方程的应用Mathematica解方程的应用非常广泛,主要包括以下几个方面。

1.求解代数方程Mathematica可以求解各种类型的代数方程,包括一元多项式方程、多元多项式方程、代数方程组等。

例如,我们要解决方程组x+y=3,x-y=1,可以使用Solve命令:Solve[{x+y==3,x-y==1},{x,y}]执行上述代码后,Mathematica会输出方程组的解析解。

Mathematica用法III

Mathematica用法III
有的高次方程也可以求出精确解。
对于非多项式函数,Solve也可以进行求解。 用函数Solve也可以求联立方程组的解。
求解方程组时,我们也可以先定义方程组,再用 Solve命令调用已经定义的方程组进行求解。
在上例中,N元的方程组实际被定义为一个包含N个 元素的列表,表中的每个元素是一个方程(逻辑语句)。
Dt[f,x]
计算f的全微商,所有变量依赖于x
D[f,x,Constants->{a}] 计算f的全微商,设a不依赖于x
SetAttributes [a,Constant]
设a为常数
简单举几个例子:
4、积分
在Mathematica中,用函数Integrate求不定积分和
定积分,用NIntegrate求数值积分,格式如下:
函数FindRoot的缺点是,一次运算只能得到距离起 始点最近的一个解;而且,如果选定的起始点位置不合 适,有可能迭代过程不收敛,从而得不出解。比如:
关于如何选点确保迭代收敛的知识,我们会在后续 的课程中详加说明。现在我们的常用做法是,如果要用 FindRoot求解,就先用Plot命令画出函数图线,观察解 的大概位置,然后在附近选择起始点。如下所示:
2、求极限 Mathematica计算极限的命令是Limit,它的用法如下:
Limit[f,x->x0]
当x->x0时求f的极限
Limit[f,x->x0,Direction->1] 当x->x0时求f的左极限
Limit[f,x->x0,Direction->-1] 当x->x0时求f的右极限
趋向的点x0可以是常数,也可以是+∞,-∞,例如:
由图可知,函数在 0至2.2之间和x轴有两 个交点。所以我们在用 FindRoot命令求根时起 始点可以选在交点附近。

(完整版)Mathematica求解方程(组)、级数

(完整版)Mathematica求解方程(组)、级数

(完整版)Mathematica求解方程(组)、级数方程(组)与级数的Mathematica 求解[学习目标]1. 能用Mathematica 求各种方程(组)的数值解和近似解;2. 能对常见函数进行幂级数的展开。

一、求解简单方程(组)数学里的方程是带有变量的等式。

一般地说,一个或一组方程总是对于方程中出现的变量的可能取值范围增加了一些限制。

所谓求解方程就是设法把方程对于变量取值的限制弄清楚,最好的结果是用不含变量的表达式把变量的值表示出来。

在这个系统里,方程也用含有变量的等式表示,要注意的是在这里等号用连续的两个等号(==)表示。

方程的两端可以是任何数学表达式。

用户可以自己操作Mathematica 系统去求解方程,例如使用移项一类的等价变换规则对方程加以变形、对方程的两端进行整理、把函数作用于方程的两端等等。

系统也提供了一些用于求解方程的函数。

1、求方程的代数解最基本的方程求解函数是Solve ,它可以用于求解方程(主要是多项式方程)或方程组。

Solve 有两个参数,第一个参数是一个方程,或者是由若干个方程组的表(表示一个方程组);第二个参数是要求解的变量或变量表。

例如,下面的式子对于变量X 求解方程016x x x 234=+--:In[1]:=Solve[x^4-x^3-6x^2+1==0,x]输入了这个表达式,系统立刻就能计算出方程的四个根,求出的解都是精确解(代数根)。

对于一般的多项式,这样得出的解常常是用根式描述的复数。

方程的解被表示成一个表,表中是几个子表,每一个子表的形式都是{x->...},箭头后面是方程的一个解。

Solve 也可以求解多变量的方程或者方程组:In[2]:=Solve[{x-2y==0,x^2-y==1},{x,y}]这个表达式求解方程组: x y x y -=-=2012.有时求解方程会得到非常复杂的解。

例如将上面的第一个方程稍加变形,所得到的解的表达式就会变得很长:In[3]:=Solve[x^4-x^3-6x^2=2==0,x]这个表达式求出的解的表达式非常长,以至一个计算机屏幕显示不下。

利用Mathematica解方程

利用Mathematica解方程
FindRoot[Sin[x]*Exp[2*x]Cos[x]==0,{x,0,1}]
此方法的理论依据是解方程的弦截法。
方2020程/4/1 求解情况比较复杂,有时上述方法不能解决,
三、用DSolve解微分方程
1.命令格式
DSolve[{微分方程,初始条件},未知函数,自变 量]
NDSolve[方程,未知函数,{自变量,a,b}]可求得 微分方程或方程组在自变量指定取值范围内的数值 解
注: 1)在Mathematica中用“=”表示相等关系 ,用“==”表示方程 2)对于高次多项式方程,有时系统也求不出 精确解这时可直接用DSolve求出它的数值解 。例:NSolve[x^5-x^36*x^2+1==0,x,20],命令行中的20表示要求 方程的解精确到小数点以后20位,可根据需要 输入。
,数值解,复数解 1.命令格式 Solve[单个方程,未知元] Solve[{方程组},{未知元表}] 2.边学边做 Solve[a*x+b==0,x]; Solve[x^2+x+1==0,x] Solve[x^4-x^3-6*x^2+1==0,x] a=(1+2*x)^3;b=(3+2*x+y)^4; 20S20/o4/1lve[a==0,b==0,{x,y}]
2020/4/1
二、用FindRoot求解一般方程
1.命令格式
FindRoot[方程,{未知元,初值}]或FindRoot[方 程,{未知元,初值1,初值2}]
2.边学边做
FindRoot[Sin[x]*Exp[2*x]Cos[x]==0,{x,0.5}]
初值0.5是方程根的一个近似值,通常通过作图之 后去确定。此方法的理论依据是解方程的牛顿切线 法。

§10 用Mathematica进行级数运算

§10  用Mathematica进行级数运算

1371§10 用Mathematica 进行级数运算Mathematica 能把函数展成级数的形式,还能对级数及级数间进行四则运算及能对级数开方或取log 值等。

10.1 级数的展开在Mathematica 系统中,用Series 将一个函数)(x f 展开成为幂级数。

其调用形式有以下两种:(1)Series[f,{x,x 0,n}] 把函数f 在点0x 处展开到x 的n 次幂。

(2)Series[f,{x,x0,n1},{y,y0,n2}] 把二元函数f 在点),(00y x 处展开到x 的1n 次幂,y 的2n 次幂1 幂级数的展开例10.1 将函数x x f arctan )(=在00=x 处展开到x 的10次幂。

解 In[1]:=Series[ArcTan[x],{x,0,10}] Out[1]=119753][9753x O x x x x x ++−+− 要去掉误差可使用命令Normal.In[2]:= Normal.[%] Out[2]= 97539753x x x x x +−+− 2 Taylor 级数的展开例10.2 将函数)1log()(z z f +=在00=z 处展开到z 的7次幂. 解 In[3]:=Series[Log[1+z],{z,0,7}] Out[3]=876532][7654324z O z z z z z z z ++−+−+− 10.2 级数的运算1 Mathematica 对级数的四则运算和微、积分 例10.3 分别将x x x cos ,sin 在点00=x 处展开到x 的5次幂a 和b ,并求其1372和、差、积及a 的微积分。

解 In[1]:=Clear[a,b,x]In[2]:=a=Series[Sin[x],{x,0,5}] Out[2]=653][1206x o x x x ++− In[3]:=b=Series[x*Cos[x],{x,0,5}] Out[3]=653][242x o x x x ++− In[4]:=a+b Out[4]=653][20322x O x x x ++− In[5]:=a-b Out[5]= 653][303x O x x +− In[6]:=a*b Out[6]=7642][15232x O x x x ++− In[7]:=D[a,x] Out[7]=542][2421x O x x ++− In[8]:=Integrate[a,x] Out[8]=7642][720242x O x x x ++− 2 用Mathematica 还有其它一些与级数有关的命令如InverseSeries,ComposeSeries 等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

方程(组)与级数的Mathematica求解[学习目标]1. 能用Mathematica求各种方程(组)的数值解和近似解;2. 能对常见函数进行幂级数的展开。

一、求解简单方程(组)数学里的方程是带有变量的等式。

一般地说,一个或一组方程总是对于方程中出现的变量的可能取值范围增加了一些限制。

所谓求解方程就是设法把方程对于变量取值的限制弄清楚,最好的结果是用不含变量的表达式把变量的值表示出来。

在这个系统里,方程也用含有变量的等式表示,要注意的是在这里等号用连续的两个等号(==)表示。

方程的两端可以是任何数学表达式。

用户可以自己操作Mathematica系统去求解方程,例如使用移项一类的等价变换规则对方程加以变形、对方程的两端进行整理、把函数作用于方程的两端等等。

系统也提供了一些用于求解方程的函数。

1、求方程的代数解最基本的方程求解函数是Solve,它可以用于求解方程(主要是多项式方程)或方程组。

Solve有两个参数,第一个参数是一个方程,或者是由若干个方程组的表(表示一个方程组);第二个参数是要求解的变量或变量表。

例如,下面的式子对于变量X求解方程:In[1]:=Solve[x^4-x^3-6x^2+1==0,x]输入了这个表达式,系统立刻就能计算出方程的四个根,求出的解都是精确解(代数根)。

对于一般的多项式,这样得出的解常常是用根式描述的复数。

方程的解被表示成一个表,表中是几个子表,每一个子表的形式都是{x->...},箭头后面是方程的一个解。

Solve也可以求解多变量的方程或者方程组:In[2]:=Solve[{x-2y==0,x^2-y==1},{x,y}]这个表达式求解方程组:有时求解方程会得到非常复杂的解。

例如将上面的第一个方程稍加变形,所得到的解的表达式就会变得很长:In[3]:=Solve[x^4-x^3-6x^2=2==0,x]这个表达式求出的解的表达式非常长,以至一个计算机屏幕显示不下。

使用MS-DOS系统上的Mathematica的读者可以用键盘上的PgUP键和PgDn键把计算机屏幕上已经卷出的表达式翻回来阅读,附录B里提供了使用这类计算机的有关操作的更详细的说明。

对于使用图形界面提供的功能去翻阅前面的结果。

在被求解的方程里还可以有其他符号参数,可以要求系统对于这一个或者那一个变量求解方程。

对于Mathematica系统来说,方程中的符号变量(无论使用什么变量名)都是一样的。

对于处理复杂的方程,MATHEMETICA系统还提供了例外两个有用的函数。

函数Eliminate用于从方程组消去一个或几个变量,例如下面的表达式消去方程组里的变量Y:IN[4]:=Eliminate[{X^2-2Y= =1,X+2Y= =4},Y]Eliminate 的使用形式与Solve类似,它的第二个参数用于说明希望消去的变量。

另一个函数Reduce用于化简复杂的方程或方程组,它试图用一组比较简单的逻辑关系来描述由原来方程所描述的变量之间的关系。

它的使用形式与Solve, Eliminate一样,这里不举例字了。

2、求方程的数值解理论上已经证明,对于五次以上的多项式方程没有求代数解的一般方法,MATHEMATICA也求不出那些不能分解因式的五次以上的多项式方程的解,例如:IN[5]:=SOLVE[X^5+5X^3-2= =0,X]它返回一个带有函数TORUOES的表达式。

可以把函数N作用到这个结果表达式上,求出方程的数值解:IN[6]:=N[%]可以看到系统同时求出了方程的五个根的时候可以直接用函数N和SOLVE结合完成工作: IN[7]:=N[SOLVE[X^6+4X^2-31= =0,X]]在系统里直接提供了一个函数NSOLVE做这件事。

对于更复杂的方程(或方程组),用SOLVE求不出根,使用函数N也解决不了问题。

对于这样的方程,用户可以使用REDUCE,ELIMINATE等函数去处理,设法把方程描述的变量之间的关系搞清楚。

如果需要的就是方程的根,那么只要用求数值根的函数FINDROOT。

函数FINDROOT求数值根所采用的方法与人们一般用计算机求数值根的方法一样。

但是,由于MATHEMATIC有求导函数的能力,在这里计算有导函数的表达式的数值根就非常简单。

不管表达式多么复杂,系统都能自动的求出它的导函数。

求数值根使用的也是牛顿法,用户必须给FINDROOT提供一个初始值。

下面一个简单的例子:IN[8]:=FINDROOT[SIN[X]EXP[2X]-COS[X]= =0,{X,0.5}]对于求不出导函数的表达式,例如用户自己定义的一个复杂计算函数,使用FindRoot提供函数值取不同符号(正负号)的两个点(用表的形式放在上面初始值0.5的位置),形式是:IN[9]:= FindRoot [FUN1[X]= =0,{X,{0,1}}]这里假使FUN1是用户定义的一个函数。

使用计算机求数值根的第一个问题是确定初始点,若初始值选取得不好将给求根带来困难。

再一个麻烦是用户要自己求出函数的导函数。

在MATHEMATICA系统里处理的对象是表达式,一个表达式可以服务于不同的用途,可以作为求值的对象,作为画图的对象,也可以作为演算的对象。

当需要求一个表达式的数值根的时候,表达式的这样的多种功能,或者说MATHEMATICA系统对于表达式的多方面的操作能力就表现出很大的优越性。

一个代数表达式,无论多么复杂,MATHEMATICA系统都可以直接求出它的导函数,可以作出它的图形。

从图形上我们很容易认识这个函数表达式在某一个区间的大致性质,包括它的根的出现和分布情况。

对表达式的这些认识为人们确定如何取初始值、如何求根提供了很有价值的线索。

这样,某些比较难以处理的问题可能就容易解决了。

二、求解常微分方程(组)1、常微分方程(组)的精确解Mathematica能求常微分方程(组)的准确解,能求解的类型大致覆盖了人工求解的范围,功能很强。

但不如人灵活(例如在隐函数和隐方程的处理方面),输出的结果与教材上的答案可能在形式上不同。

另外,Mathematica求数值解也很方便,且有利于作出解的图形。

求准确解的函数调用格式如下:DSolve[eqn,y[x],x] 求方程eqn的通解y (x),其中自变量是x。

DSolve[{eqn,y[x0]= =y0},y[x],x] 求满足初始条件y(x0)= y0的特解y(x)。

DSolve[{eqn1,eqn2,…},{y1[x],y2[x],…},x] 求方程组的通解。

DSolve[{equ1,…,y1[x0]= =y10,…},{y1[x],y2[x],…},x] 求方程组的特解。

说明:应当特别注意,方程及各项参数的表述方式很严格,容易出现输入错误。

微分方程的表示法只有通过例题才能说清楚。

例1 解下列常微分方程(组):(1),(2),(3),(4)的通解及满足初始条件y(0)=0,z(0)=1的特解。

解:In[1]:=DSolve[y′[x]= =2y[x]/(x+1)+(x+1)^(5/2),y[x],x]Out[1]=In[2]:=DSolve[y′[x]= =(1+y[x]^2)/((x+x^3)y[x]),y[x],x]Out[2]={{}, {}}In[3]:=DSolve[{y′[x]= =z[x],z′[x]= = -y[x]},{y[x],z[x]},x]Out[3]={{y[x]→C[1]Cos[x]+ C[2]Sin[x],z[x]→C[2]Cos[x]- C[1]Sin[x]}}In[4]:=DSolve[{y′[x]= =z[x],z′[x]= = -y[x],y[0]= =0,z[0]= =1},{y[x],z[x]},x]Out[4]={{y[x]→Sin[x],z[x]→Cos[x]}}提示:认真观察上例,可以从中学习输入格式,未知函数总带有自变量,等号用连续键入两个等号表示,这两点由于不习惯会出错!导数符号用键盘上的撇号,连续两撇表示二阶导数,这与习惯相同。

自变量、未知量、初始值的表示法与普通变量相同。

说明:输出结果总是尽量用显式解表出,有时反而会使表达式变得复杂,这与教科书的习惯不同。

当求显式解遇到问题时,会给出提示。

通解中的任意常数用C[1],C[2],…表示。

例2 求解下列微分方程:(1),(2),(3)。

解:In[1]:=DSolve[+3y″[x] +3y′[x] + y[x] = =(x - 5)Exp[-x],y[x],x]Out[1]={{}}In[2]:=Simplify[%]Out[2]={{}}In[3]:=DSolve[x^2 + y′[x]^2 = = 1,y[x],x]Out[3]={{},{}}In[4]:=DSolve[Sqrt[y′[x]] = = x y[x],y[x],x]Out[4]={{}}说明:由以上可以看出对方程的类型并无限制,但是输出的答案未必符合习惯,例如第一个方程的答案需要化简,有时即使化简后也未必与教材上的答案一致。

例3 求微分方程xy′+ y - ex = 0在初始条件y|x=1 = 2e下的特解。

解:In[1]:=DSolve[x*y′[x]+y[x]-E^x= =0,y[1]= =2E,y[x],x]Out[1]= {{y[x]→}}2、常微分方程(组)的数值解函数NDSolve用于求给定初值条件或边界条件的常微分方程(组)的近似解,其调用格式如下:NDSolve[eqns,{y1,y2,…},{x,xmin,xmax}] 求常微分方程(组)的近似解。

其中微分方程和初值条件的表示法如同DSolve,未知函数仍有带自变量和不带自变量两种形式,通常使用后一种更方便。

初值点x0可以取在区间[xmin,xmax]上的任何一点处,得到插值函数InterpolatingFunction[domain,table]类型的近似解,近似解的定义域domain一般为[domain,table],也有可能缩小。

相关文档
最新文档