matlab求解代数方程组解析 联系客服

发布时间 : 星期一 文章matlab求解代数方程组解析更新完毕开始阅读c0f9956c78563c1ec5da50e2524de518964bd3f9

练习和分析与思考:

求方程f(x)?x2?x?14的一个正根。 四、求解非线性方程组的牛顿法

方程组记作F(x)?0,其中x?(x1,?,xnT)F,x(?)f(?),fnx,1x(f),2x(T(设)),(k)Tx(k)?(x1(k),?,xn),且方程组F(x)?0的第k步近似解,与牛顿切线法类似,在

x(k)作Taylor展式,线性化后用x(k?1)代替x可得:

fi(x记

(k?1)?fi(x(k))(k?1)?fi(x(k))(k?1)(k)(k))?fi(x)?(x1?x1)???(xn?xn)(i?1,2,?,n)

?x1?xn(k)??f1??x?1??f2?F'(x)???x1?????fn??x?1?f1?x2?f2?x2?fn?x2?f1??xn???f2???xn?? ????fn???xn???则有F(x(k?1))?F(x(k))?F'(x(k))(x(k?1)?x(k)),若F'(x()k)可逆,我们得到解非线性方程组的牛顿迭代公式:x(k?1)?x(k)?[F'(x(k))]?1F(x(k)).

注:实际上在计算过程的第k步,往往先计算F(x(k))和F'(x(k)),再解方程组F'(x(k))?x(k)??F(x(k))得到?x(k)后,令x(k?1)?x(k)??x(k)即可.迭代过程需要分析其收敛性、分支与混沌. 练习和分析与思考:

用牛顿迭代法解非线性方程组:

2?x12?10x1?x2?x3?7?0?22?x1x2?x3?2x3?0 ?x2?x2?3x?x2?0223?1五、Matlab求解(非)线性方程组的内置工具箱 1.线性方程组求解

(1)直接求解:线性方程组Ax?b,解法x?A\\b,(注意:此处\\不是/符号)

9

若A为方阵,x?inv(A)*b,若A不是方阵,x?pinv(A)*b. 练习和分析与思考:

求方程组的解.

?5x1?6x2?1?x?5x?6x?0123??

?x2?5x3?6x4?0 ?x?5x?6x?0

45

?3??x4?5x5?1

(2)利用矩阵分解求解线性方程组

矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积.常见的矩阵分解有LU分解、QR分解、Cholesky分解以及Schur分解、Hessenberg分解、奇异分解等.

LU分解:矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式.只要方阵A非奇异,矩阵的LU分解总是可以进行的.

Matlab提供的lu函数用于对矩阵进行LU分解,其调用格式为:

[L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角矩阵L(行交换)使之满足A=LU,注意:这里的矩阵A必须是方阵.

[L,U,P]=lu(A): 产生一个上三角阵U和一个变换形式的下三角矩阵L以及一个置换矩阵P使之满足PA=LU,注意:这里的矩阵A必须是方阵.

实现LU分解后,线性方程组Ax?b的解为:x?U\\(L\\b)或x?U\\(L\\Pb). QR分解:矩阵的QR分解就是将一个矩阵A分解成一个正交矩阵Q和一个上三角矩阵R的乘积形式. QR分解只能对方阵进行. Matlab的函数qr用于对矩阵进行QR分解,其调用格式为:

[Q,R]=qr(A):产生一个正交矩阵Q和一个上三角矩阵R使之满足A=QR. [Q,R,E]=qr(A): 产生一个正交矩阵Q和一个上三角矩阵R以及一个置换矩 阵E使之满足AE=QR方阵.

实现QR分解后,线性方程组Ax?b的解为:x?R\\(Q\\b)或x?E(R\\(Q\\b)). Cholesky分解:如果矩阵A是对称正定的,则Cholesky分解将矩阵A分解成一个下三角矩阵R和上三角矩阵的乘积R’(R的转置),即A= R’R. Matlab的函数

10

chol(A)用于对矩阵进行Cholesky分解,其调用格式为:

R=chol(A):产生一个上三角矩阵R使之满足A=R’R.若矩阵A不是对称正定 的,则输出一个出错信息.

[R,p]=chol(A): 这个命令格式不输出出错信息. 当A是对称正定的,则p=0,R与上述格式得到的结果相同,否则p为一个正整数,如果A为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足R’R=A(1:q,1:q).

实现Cholesky分解后, Ax?b变为R'Rx?b,所以x?R\\(R'\\b). 2.单变量非线性方程求解

Matlab的函数fzero可用于对矩阵求单变量非线性方程的根,其调用格式为:z=fzero(‘fname’,x0,tol,trace)

其中fname是待求根的函数文件名,x0为搜索起点,一个函数可能有多个根,但fzero函数只给出离x0最近的那个根.tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时trace=0. 练习和分析与思考:

求f(x)?x?10x?2在x0?0.5附近的根. 3.非线性方程组的求解

对于非线性方程组F(x)?0用fsolve函数求其数值解.fsolve函数的调用格式为:x=fsolve(‘fun’,x0,option)

其中x为返回的解,fun用于定义需求解的非线性方程组的函数文件名,x0是求根过程的初值,option为最优化工具箱的选项设定.最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来.如果想改变其中某个选项,可以调用optimset()函数来完成.例如optimset(‘display’,’off’). 六、实例赏析

11

a=[1 -1 4 -2; 1 -1 -1 2;3 1 7 -2;1 -3 -12 b=[2 3 1;1 -2 4;3 8 -2;4 -1 9] 6]; rref(a) b1=[4 -5 13 -6]’ [b,b1] rref([b,b1]) [x,y]=solve('5*y^2-6*x*y+5*x^2-16','y^2-x*y+2*x^2-y-x-4') a*x^2+b*x+c=0 求方程 x^4+7x^3 +9x-20=0的全部根 a=[1,1.5,2,9,7;0,3.6,0.5,-4,4;7,10,-3,22,33;3,7,8.5,21,6;3,8,0,90,-20]; b=[3;-4;20;5;16]; x=a\\b 12