首页 > 编程学习 > matlab解线性方程组后结果是小数,MATLAB线性方程组求解

有唯一解线性方程组求法

对于一般的,有唯一解的线性方程组,我们可以转换成矩阵的形式:

A x = b Ax=bAx=b 则可以用矩阵运算求解x,即x=A\b

有无穷解的线性方程组求法

齐次线性方程组的通解

求解齐次线性方程组基础解系的函数是null

Z=null(A)表示返回矩阵A的基础解系组成的矩阵。Z还满足ZTZ=I

Z=null(A,‘r’)得出的Z不满足ZTZ=I,但得出的矩阵元素多为整数,顾一般都带参数r。

非齐次线性方程组通解

非齐次线性方程组在求出基础解析后还要求一个特解。对于矩阵形式的非齐次线性方程组A x = b Ax=bAx=b 特解x 0 x_0x0​的求法为x0=pinv(A)*b;其中函数pinv的意思是伪逆矩阵。

例如求解线性方程组:

f ( x ) = { x 1 + 2 x 2 + 2 x 3 = 1 x 2 − 2 x 3 − 2 x 4 = 2 x 1 + 3 x 2 − 2 x 4 = 3 f(x)=\left\{ \begin{aligned} x_1+2x_2+2x_3=1\\ x_2-2x_3-2x_4=2\\ x_1+3x_2-2x_4=3\\ \end{aligned} \right.f(x)=⎩⎪⎨⎪⎧​x1​+2x2​+2x3​=1x2​−2x3​−2x4​=2x1​+3x2​−2x4​=3​

f0f9d4c2e8e89fc723c2394bea3c3f30.png

由输出结果可知方程的解为

x = k 1 [ − 6 2 1 0 ] + k 2 [ − 4 2 0 1 ] + [ 13 / 77 46 / 77 − 1 / 11 − 40 / 77 ] ( k 1 , k 2 ∈ R ) x=k_1 \begin{bmatrix} -6\\2\\1\\0\\ \end{bmatrix} +k_2 \begin{bmatrix} -4\\2\\0\\1\\ \end{bmatrix} +\begin{bmatrix} 13/77\\46/77\\-1/11\\-40/77\\ \end{bmatrix} \quad (k_1,k_2 ∈R)x=k1​⎣⎢⎢⎡​−6210​⎦⎥⎥⎤​+k2​⎣⎢⎢⎡​−4201​⎦⎥⎥⎤​+⎣⎢⎢⎡​13/7746/77−1/11−40/77​⎦⎥⎥⎤​(k1​,k2​∈R)

利用Gauss消元法求解线性方程组

在线性代数中,我们主要的方法就是Gauss消元法。MATLAB中将矩阵化为行阶梯型的函数是:R = r r e f ( A ) R=rref(A)R=rref(A)

我们可以用线性代数知识,编写一个函数,给入矩阵A和b,给出方程的解,函数自动判断是有唯一解还是无穷解。

42fefeded197a2f07cf9011dac868f73.png

先搭建出函数的框架

function varargout = ZJX_solvebygauss(varargin)

%ZJX_solvebygauss 用高斯消元法解线性方程组

% A是系数矩阵,b是常熟矩阵。varargin={A,b};如果b为0,则不输入b

% varargout=[S flag],S给出结果

% flag为0无解;1唯一解;2齐次通解;3非齐次通解

A=cell2mat(varargin(1));

Alie=length(A);Asum=numel(A);Ahang=Asum/Alie;

if(nargin==2)

b=cell2mat(varargin(2));

else

b(Ahang,1)=0;

end

B=A; B(:,Alie+1)=b;

varargout(1)={S};

if(nargout==2)

varargout(2)={flag};

end

end

现在完成了基本框架的构建,其中varargout等含义参见函数部分的内容。现在我们已经得到了矩阵A、b,A的行数Ahang,A的列数Alie,增广矩阵B。现在在中间的空格位置进行运算。

程序设计

Ar=rank(A); Br=rank(B);

B=rref(B);

if (Ar

测试

同样求之前的方程组通解

{ x 1 + 2 x 2 + 2 x 3 = 1 x 2 − 2 x 3 − 2 x 4 = 2 x 1 + 3 x 2 − 2 x 4 = 3 \left\{ \begin{aligned} x_1+2x_2+2x_3=1\\ x_2-2x_3-2x_4=2\\ x_1+3x_2-2x_4=3\\ \end{aligned} \right.⎩⎪⎨⎪⎧​x1​+2x2​+2x3​=1x2​−2x3​−2x4​=2x1​+3x2​−2x4​=3​

6b52c15e1cb1558f7ebc7a17634deafd.png

如图,带方程b则S最后一列是特解,不带b则没有特解。日后我们可以直接调用这个函数方便求解。而且比较结果我们发现,这样求出来的特解形式要简单一些。

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000