matlab 微积分基本运算§1 解方程和方程组解1. 线性方程组求解对于方程 AX = B ,其中 A 是( m ×n )的矩阵有三种情形:1)当n=m 且A 非奇异时,此方程为“恰定”方程组。
2)当 n > m 时,此方程为“超定”方程组。
3)当n<m 时,此方程为“欠定”方程组。
下面就三种情形的求解分别作一说明:(1) MATLAB 解恰定方程 A* X = B 的方法1)采用求逆运算解方程x=inv(A)*B2)采用左除运算解方程x=A\B例1 “求逆”法和“左除”法求下列方程组的解⎪⎪⎪⎩⎪⎪⎪⎨⎧=+=++=++=++=+150650650651655454343232121x x x x x xx x x x x x x在Matlab 编辑器中建立M 文件fanex1.m :A=[5 6 0 0 01 5 6 0 00 1 5 6 00 0 1 5 60 0 0 1 5];B=[1 0 0 0 1]';R_A=rank(A) %求秩X1=A\B %用"左除"法解恰定方程所得的解X2=inv(A)*B %用"求逆"法解恰定方程所得的解运行后结果如下R_A =5X1 =2.2662-1.72181.0571-0.59400.3188X2 =2.2662-1.72181.0571-0.59400.3188两种方法所求方程组的解相同。
(2)MATLAB 解超定方程AX=B 的方法对于方程 AX = B ,其中 A 是( m ×n )的矩阵, n > m ,如果A 列满秩,则此方程是没有精确解的。
然而在实际工程应用中,求得其最小二乘解也是有意义的。
基本解法有:1)采用求伪逆运算解方程x=pinv(A)*B说明:此解为最小二乘解x=inv(A ’*A)*A*B,这里pinv(A) =inv(A ’*A)*A.2)采用左除运算解方程x=A\B例2 “求伪逆”法和“左除”法求下列方程组的解⎪⎩⎪⎨⎧=+=+=+12214212212121x x x x x x命令如下:>> a=[1 2;2 4;2 2];>> b=[1,1,1]';>> xc=a\b %用左除运算解方程运行得结果:xc =0.40000.1000>> xd=pinv(a)*b %用求伪逆运算解方程运行得结果:xd =0.40000.1000>> a*xc-b %xc 是否满足方程ax=b运行得结果:ans =-0.40000.20000.0000可见xc 并不是方程的精确解。
(3) MATLAB 解欠定方程AX=B 的方法欠定方程从理论上说是有无穷多个解的,如果利用求“伪逆”法和“左除”法来求解,只能得到其中一个解。
基本方法:1)采用求伪逆运算解方程x=pinv(A)*B2)采用左除运算解方程x=A\B例3 求方程组⎪⎩⎪⎨⎧=--+=+--=--+0895443313432143214321x x x x x x x x x x x x的一个特解解:在Matlab 编辑器中建立M 文件:fanex2.mA=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];B=[1 4 0]';X=A\BX =-0.53330.6000(4) MATLAB 求线性齐次方程组的通解在Matlab 中,函数null 用来求解零空间,即满足AX=0的解空间,实际上是求出解空间的一组基(基础解系)。
基本格式:1)格式:z = null(A)说明: z 的列向量为方程组的正交规范基,满足I Z Z =⨯'2)格式:z = null(A ,’r ’)说明: z 的列向量是方程AX=0的有理基.例4 求解方程组的通解:⎪⎩⎪⎨⎧=---=--+=+++0340222022432143214321x x x x x x x x x x x x解:在Matlab 编辑器中建立M 文件:fanexmA=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];format rat %指定有理式格式输出B=null(A,'r') %求解空间的有理基运行后显示结果如下:B =2 5/3-2 -4/31 00 1写出通解:syms k1 k2X=k1*B(:,1)+k2*B(:,2) %写出方程组的通解pretty(X) %让通解表达式更加精美运行后结果如下:X =[ 2*k1+5/3*k2][ -2*k1-4/3*k2][ k1][ k2]% 下面是其简化形式[2k1 + 5/3k2 ][ ][-2k1 - 4/3k2][ ][ k1 ][ ][ k2 ](4)MATLAB 求非齐次线性方程组的通解非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。
因此,步骤为:第一步:判断AX=b 是否有解,若有解则进行第二步第二步:求AX=b 的一个特解第三步:求AX=0的通解第四步:AX=b 的通解= AX=0的通解+AX=b 的一个特解。
例5 求解方程组⎪⎩⎪⎨⎧=-++=-+-=-+-32222353132432143214321x x x x x x x x x x x x解:在Matlab 编辑器中建立M 文件:fanex5.mA=[1 -2 3 -1;3 -1 5 -3;2 1 2 -2];b=[1 2 3]';B=[A b];n=4;R_A=rank(A)R_B=rank(B)format ratif R_A==R_B&R_A==n %判断有唯一解X=A\belseif R_A==R_B&R_A<n %判断有无穷解X=A\b %求特解C=null(A,'r') %求AX=0的基础解系else X='equition no solve' %判断无解end运行后结果显示:R_A =2R_B =3X =equition no solve说明该方程组无解例6 求解方程组的通解:⎪⎩⎪⎨⎧=--+=+--=--+0895443313432143214321x x x x x x x x x x x x解法一:在Matlab 编辑器中建立M 文件:fanex6.mA=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];b=[1 4 0]';B=[A b];n=4;R_A=rank(A)R_B=rank(B)format ratif R_A==R_B&R_A==nX=A\belseif R_A==R_B&R_A<nX=A\bC=null(A,'r')else X='Equation has no solves'end运行后结果显示为:R_A =2R_B =2X =-8/153/5C =3/2 -3/43/2 7/41 00 1所以原方程组的通解为X=k 1⎪⎪⎪⎪⎪⎭⎫ ⎝⎛012/32/3+k 2⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-104/74/3+⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-5/315/800 解法二:在Matlab 编辑器中建立M 文件:LX07212.mA=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];b=[1 4 0]';B=[A b];C=rref(B) %求增广矩阵的行最简形,可得最简同解方程组。
运行后结果显示为:C =1 0 -3/2 3/4 5/40 1 -3/2 -7/4 -1/40 0 0 0 0对应齐次方程组的基础解系为:⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=012/32/31ξ, ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=104/74/32ξ 非齐次方程组的特解为:⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=004/14/5*η 所以,原方程组的通解为:X=k 11ξ+k 22ξ+*η2.代数方程组求解在MMlab 中解方程组的命令有linsolve 和solve ,其中命令linsolve 专门用于求解线性方程组,而命令solve 可适用于所有的代数方程(组)。
下面分别加以介绍。
(1) 求解线性方程组linsolvelinsolve 命令对解形如AX=B 的线性方程组运用自如。
但在对矩阵A 的运算中有如下限制:A 必须至少是行满秩的。
Linsolve 具体使用格式为:X=linsolve(A,B)功能:得到线性方程组AX=B 的特解X 。
例7 求线性方程组⎪⎩⎪⎨⎧=+-=++=+-20141861234834483321321321x x x x x x x x x AX=b 的解。
命令如下:>>A=[3,-8,4;3,48,3;6,-18,14];>>b=[4;12;20];>>X=linsolve(A,b) %调用linsolve 函数求特解运行后结果显示为:X =[ -156/167][ 30/167][ 344/167]>>A\b %用另一种方法求特解运行后结果显示为:ans =-0.93410.17962.0599例8 求解方程组的特解:⎪⎩⎪⎨⎧=--+=+--=--+0895443313432143214321x x x x x x x x x x x x命令如下:>>A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];>>b=[1 4 0]';>>X=linsolve(A,b)运行后结果显示为:Warning: System is rank deficient. Solution is not unique.> In E:\MATLAB6p5\toolbox\symbolic\@sym\mldivide.m at line 38In E:\MATLAB6p5\toolbox\symbolic\linsolve.m at line 8X =[ 5/4][ -1/4][ 0][ 0](2) 一般符号表达式表示的代数方程求解在MATLAB 中,求解用符号表达式表示的代数方程可由函数solve 实现,其调用格式为:1) 格式:x=solve(S)功能:求解符号表达式S 的代数方程,求解变量为默认变量v=findsym(S),将结果赋给x 。
其中S 为包含方程(一个)等式的字符串(可以是函数名,或者是描述方程的字符串,关于方程组的输入在前面章节中有讨论);2) 格式:x=solve(S,v)功能:求解符号表达式S 的代数方程,求解变量为v, 将结果赋给x 。
3) 格式:[x1,x2, …,xn]=solve(S1,S 2,…,Sn)功能:求解符号表达式S1, S 2,…, Sn 组成的代数方程组,对n 个默认变量求解,将结果赋给[x1,x2, …,xn]。