MATLAB为我们求解方程及方程组提供了便利条件.
1 任意函数方程与线性方程组
MATLAB命令输人格式:
solve('eqqu1','equ2',...'equN')
或 solve('eqqu1','equ2',...'equN','val1','val2'...,'valN')
其中 eqni表示第i个方程,vari表示第i个变量,i=1,2,…,N.
1.一般方程
例如,求解方程 x x^2+b*x+c=0
输入:solve('x^2+b*x+c')
输出:
-1 -1/2*b+1/2*(b^2-4*c)^(1/2)
-1/2*b-1/2*(b^2-4*c)^(1/2)
注意:如果不能求得精确的符号解,可以计算可变精度的数值解.
2.多项式方程
除了用上面求解一般方程的方法外,还可以直接用求解多项式方程的MATLAB函数roots(p) ,其中p是多项式的系数按降幂排列所形成的n+l维列向量,它能够给出全部根(包含重根)。
求解多项式方程
x^9+x^8+1=0
输入:
p=[1,1,0,0,0,0,0,0,0,1];
输出:
-l.213
-0.9017+0.5753 i
-0.9017-0.5753 i
-0.2694+0.9406 i
-0.2694-0.9406 i
0.4168+0.8419 i
0.4168-0.8419i
0.8608+0.3344i
0.8608-0.3344i
注意:也可以用 solve
求解,有何区别?
3.线性方程组
除了使用MATLAB函数solve以外,还可以用其他的MATLAB命令.如果将线性方程组写成矩阵形式AX=b,就可以考虑用几种形式之一求解.
linsolve(A,b);sym(A)\sym(b);A\b;inv(A)*b;pinv(A)*b
其中inv(A)表示 A的逆矩阵,因此要求 A为方阵且可逆;pinv(A)表示 A的广义逆矩阵,A可以为任意矩阵.
*********************************************************************
想:以上MATLAB函数均可以对任意的线性方程组求解,不管有解,无解、有一个还是有无穷多.它们有何区别?
A\b:
提示1)当Ax=b有唯一解时,给出该唯一解;
2)当其有无穷多解时,给出其中零元素最多的一组解;
3)当其无解时,给出一个最小二乘(广义)解.
pinv(A)*b:当 AX=b有无穷多解时,给出其中一个最小范数解;
其他两种情形与A\b相同.
linsolve(A,b):对齐次方程组,等价于A\b.
sym(A)\sym(b):linsolve(A,b)相同.
考虑以下几个求解线性方程组AX=b的例子:
1)A=[4 1 0;l -1 5;2 2 -3],b=[6; 14; -3];
2)A=[4 3 0;3 4 -l;0 -1 4],b=[24;30;-24];
3)A=hilb(12),b=sum(A)';或A=hilb(20),b=sum(A)’.其中hilb(n)表示N阶希尔伯特矩阵
分析:
1)此例中rank(A)=rank(A|b)=2<3,说明方程组有无穷多解;
2)此例中rank(A)=rank(A|b)=3,说明方程组有唯一解;
3)此例是希尔伯特方程,rank(A)=rank(A|b)=n ,说明方程组有唯一解。
2 非线性方程组
一些非线性方程组仍然可以用。Solve()函数进行求解,一般给出的是数值解,例如,
输人:
[x,y]=solve('(sin(x+y)-exp(x)*y=0','x^2-y=2’)
输出:
x = -6.01 73272500593065641097297 79505
y=34.208227234306296508646214438330
也可以用以下fsolve()进行求解,输人格式为
fsolve(’FUN’,X0)
其中FUN表M文件函数,X0表示变量的初始点.例如求解下列方程组
3)计算结果 y=
0.599 2.3959 2.0050
number=
34
其中迭代步骤为34次.
联系客服