实验六 方程和方程组的求解
一、实验目的:
熟悉Matlab软件中关于求解方程和方程组的各种命令,掌握利用Matlab软件进行线性方程组、非线性方程、非线性方程组的求解。
二、相关知识
在MATLAB中,由两个函数solve()、null()、fsolve()等来解决线性方程(组)和非线性方程(组)的求解问题,其具体格式如下:
X=solve(‘eqn1’,’eqn2’,…,’eqnN’,’var1’,’var2’,…,’varN’)
X=fsolve(fun,x0,options)
函数solve用来解符号方程、方程组,以及超越方程,如三角函数方程等非线性方程。参数’eqnN’为方程组中的第N个方程,’varN’则是第N个变量。
函数null(A)则用来解线性方程组AX=O的基础解系,实际是求系数矩阵A的零空间,在null函数中可加入参数’r’,表示有理基。通过求系数矩阵的秩和增广矩阵的秩,可以判定方程组是否有解,以及是否需要求基础解系。
另外,还可以用函数fzero来求解非线性方程。用法与fsolve类似,请大家自己查看帮组系统。
例1:求解方程
的MATLAB程序为:X=solve(‘x^2-x-6=0’,’x’)
结果为:X=
[ -2]
[ 3]
例2:求解方程组
的程序为:[X,Y]=solve('x^2+y-6=0','y^2+x-6=0','x','y')
结果为:X =
[ 2]
[ -3]
[1/2-1/2*21^(1/2)]
[1/2+1/2*21^(1/2)]
Y =
[ 2]
[ -3]
[1/2+1/2*21^(1/2)]
[1/2-1/2*21^(1/2)]
例3:求解方程组
的程序为:
clear
format rat
A=[5, 0, 4, 2;1, -1, 2, 1;4, 1, 2,0;1,1,1,1];
B=[3;1;1;0];
X=A\B
结果请大家自己运行。
例4:求方程组
的通解的程序为:
clear
format rat
A=[1,2,2,1;2,1,-2,-2;1,-1,-4,-3]
C=null(A,'r') %求出矩阵A的解空间的有理基。
结果如下:
C =
2 5/3
-2 -4/3
1 0
0 1
接着,用命令:
syms k1 k2
X=k1*C(:,1)+k2*C(:,2)
求出的通解为:
X =
[ 2*k1+5/3*k2]
[ -2*k1-4/3*k2]
[ k1]
[ k2]
例5:求方程组
的通解的程序为:
clear
format rat
A=sym('[1,2,2,1;2,1,-2,-2;1,-1,-4,-3]')
b=sym('[1;2;2]')
B=[A,b]
n=length(b)
RA=rank(eval(A))
RB=rank(eval(B))
if(RA==RB&RA==n)
X=eval(A\B) %在方程组满秩时,求出唯一解
elseif(RA==RB&RA<n)
C=eval(A\b) %在方程组不满秩时,求出特解
D=null(eval(A),'r') %求出矩阵A的零空间的基,即方程组的基础解系
syms k1 k2
X=k1*D(:,1)+k2*D(:,2)+C %求出方程组的全部解
else
fprintf('No Solution for the Equations')
end
结果请大家自己运行。
现在我们转而来看非线性方程组的求解,对于非线性方程组,我们用函数fsolve来求解。
例6:求解非线性方程组
时,我们采用如下的方法,先建立存放函数的m文件,文件名必须与函数名一致,这里就应该为sy6_6.m,内容如下:
function y=sy6_6(x)
y(1)=x(1)-0.5*sin(x(1))-0.3*cos(x(2))
y(2)=x(2)-0.5*cos(x(1))+0.3*sin(x(2))
接着,我们建立另一个m文件sy6_6_1.m,其内容为:
clear
format short
x0=[0.1,0.1]
fsolve(@sy6_6,x0,optimset('fsolve'))%这里的optimset('fsolve')部分时优化设置,可以不用
结果是:0.5414,0.3310。
三、实验内容
1.利用MATLAB求线性方程组
的全部解。
2.利用MATLAB求方程
的解。
3.利用MATLAB求方程
在区间
中的全部解。
4.利用MATLAB求方程组
的解。
5.利用函数fzero求解方程
在区间
上的根。
6.完成实验报告。