实验六  方程和方程组的求解

 

一、实验目的:

熟悉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.54140.3310

 

三、实验内容

1.利用MATLAB求线性方程组的全部解。

2.利用MATLAB求方程的解。

3.利用MATLAB求方程在区间中的全部解。

4.利用MATLAB求方程组的解。

5.利用函数fzero求解方程在区间上的根。

6.完成实验报告。