MATLAB:方程组的求解

系列文章目录

综合实例应用:方程组的求解



前言

无论工程应用问题,还是数学计算问题,方程组都是解决问题转化的重要途径之一,将复杂问题转化为简单的方程组矩阵求解问题。


一、求解四元一次线性方程组

>> %创建方程组系数矩阵
>> A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];
>> b=[8 9 -5 0]';
>> %判断方程是否有解
>> %求方程组的秩
>> r=rank(4)

r =

     1

>> B=[A,b];%创建增广矩阵
>> s=rank(B)

s =

     4

>> %r=s=n(未知数)=4,则该齐次线性方程组有唯一解。
>> %利用矩阵的逆
>> x0=pinv(A)*b

x0 =

    3.0000
   -4.0000
   -1.0000
    1.0000

二、利用矩阵分解求解

利用矩阵分解来求解线性方程组,是工程计算中最常用的计算。

1.LU分解法

LU分解法是先将系数矩阵A进行LU分解,得到LU=PA,然后解Ly=Pb,最后再解Ux=y得到原方程组的解。

编写利用LU分解法求解线性方程组Ax=b的自定义函数M文件,操作方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数solvebyLU的程序,如下所示

function x=solvebyLU(A,b)
%该函数利用LU分解法求线性方程组Ax=b的解
flag=isexist(A,b); 					%调用自定义函数isexist()判断方程组解的情况
if flag==0
    disp('该方程组无解!');
    x=[];
    return;
else
    r=rank(A);
    [m,n]=size(A);
    [L,U,P]=lu(A);
    b=P*b;
        %解Ly=b
    y(1)=b(1);
    if m>1
        for i=2:m
            y(i)=b(i)-L(i,1:i-1)*y(1:i-1)';
        end
    end
    y=y';
        %解Ux=y得原方程组得一个特解
    x0(r)=y(r)/U(r,r);
    if r>1
        for i=r-1:-1:1
            x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)')/U(i,i);
        end
    end
    x0=x0';
     if flag==1  					%若方程组有唯一解
        x=x0;
        return;
    else        						%若方程组有无穷多解
        format rat;
        Z=null(A,'r'); 				%求出对应齐次方程组的基础解系
        [mZ,nZ]=size(Z);
        x0(r+1:n)=0;
        for i=1:nZ
            t=sym(char([107 48+i]));
            k(i)=t;      				%取k=[k1,k2...,];
        end
        x=x0;         
        for i=1:nZ          
            x=x+k(i)*Z(:,i); 			%将方程组的通解表示为特解加对应齐次通解形式
        end        
    end
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数isexist()的程序,如下所示

function y=isexist(A,b)
%该函数用来判断线性方程组Ax=b的解的存在性
%若方程组无解则返回0,若有唯一解则返回1,若有无穷多解则返回Inf。
 [m,n]=size(A);
[mb,nb]=size(b);
if m~=mb
    error('输入有误!');
    return;
end
r=rank(A);
s=rank([A,b]);
if r==s &&r==n
    y=1;
elseif r==s&&r<n
    y=Inf;
else
    y=0;
end

在这里插入图片描述

命令行代码,如下所示

>> A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];
>> b=[8 9 -5 0]';
>> x2=solvebyLU(A,b)

x2 =

       3       
      -4       
      -1       
       1       

2.QR分解法

利用QR分解法先将系数矩阵A进行QR分解A=QR,然后解Qy=b,最后解Rx=y得到原方程组的解
在这里插入图片描述

1.编写求解线性方程组Ax=b的函数solvebyQR,代码如下:

function x=solvebyQR(A,b)
%该函数利用QR分解法求线性方程组Ax=b的解
flag=isexist(A,b); 					%调用自定义函数isexist()
if flag==0
    disp('方程组无解');
    x=[];
    return;
else
    r=rank(A);
    [m,n]=size(A);
    [Q,R]=qr(A);
    b=Q'*b;
    %解Rx=b得原方程组得一个特解
    x0(r)=b(r)/R(r,r);
    if r>1
        for i=r-1:-1:1
            x0(i)=(b(i)-R(i,i+1:r)*x0(i+1:r)')/R(i,i);
        end
    end
    x0=x0';
       if flag==1  					%若方程组有唯一解
        x=x0;
        return;
    else        						%若方程组有无穷多解
        format rat;
        Z=null(A,'r'); 				%求出对应齐次方程组得基础解系
        [mZ,nZ]=size(Z);
        x0(r+1:n)=0;
        for i=1:nZ
            t=sym(char([107 48+i]));
            k(i)=t;      					%取k=[k1,...,kr];
        end
        x=x0;         
        for i=1:nZ          
            x=x+k(i)*Z(:,i); 				%将方程组的通解表示为特解加对应齐次通解形式
        end        
    end
end

总结

综合实例—方程组的求解,到这里就结束啦!感谢观看,希望这篇文章对大家有帮助。

  • 16
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
MATLAB提供了多种方法来求解线性方程组。其中主要包括直接法和迭代法两种方法。 直接法是将线性方程组求解问题转化为三角方程组求解问题。在MATLAB中,可以使用高斯消去法、列主元消去法和矩阵的三角分法等直接法。其中,高斯消去法是一个经典的直接法,列主元消去法是目前计算机上求解线性方程组的标准算法。可以使用左除运算符"\ "来求解线性方程组,它使用列主元消去法。例如,给定线性方程组Ax=b,可以使用左除运算符求解,即x=A\b。这种方法使用起来很方便。 迭代法是通过迭代逼近来求解线性方程组。在MATLAB中,可以使用Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法等迭代方法来求解线性方程组。这些方法通过迭代计算来逐步逼近线性方程组。 总之,MATLAB提供了多种直接法和迭代法来求解线性方程组,可以根据具体情况选择合适的方法进行求解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlab线性方程组求解](https://blog.csdn.net/DXFGJ/article/details/108143942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于MATLAB求解线性方程组(附完整代码和例题)](https://blog.csdn.net/forest_LL/article/details/124209950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bitter tea seeds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值