• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab随笔之求解线性方程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

理论知识补充:

%矩阵除分为矩阵右除和矩阵左除。

%矩阵右除的运算符号为“/”,设A,B为两个矩阵,则“A/B”是指方程X*B=A的解矩阵X。

%矩阵A和B的列数必须是相等。

% 矩阵左除的运算符号为“\”,设A,B为两个矩阵,则“B\A”是指方程B*X=A的解矩阵X。

%矩阵A和B的行数必须是相等。

%求解多项式的解,用roots函数

%求解定解方程组(未知数个数等于方程总数)

%A*x=b 
A=[1,2; 
   3,4]; 
b=[5;11]; 
y=A\b
z=inv(A)*b

 

运行结果:

y =

     1 
     2


z =

     1 
     2

%求解不定方程组(未知数个数大于方程总数)

A=[4,5,1; 
   1,2,3]; 
b=[3;5]; 
x=A\b

运行结果:

x =

         0 
    0.3077 
    1.4615

%求解超定方程组(未知数个数小于方程总数)

 

A=[1,1; 
   -2,-4; 
   1,-2]; 
b=[2;-3;2]; 
x=A\b 

求解输出如下图所示,需要说明时,求得结果是以一最小二乘近似解。

x =

    1.8182 
   -0.1299

%求解奇异方程组(多个方程之间有重复)

 

A=[1,2,1; 
    -2,-4,-2; 
    1,-2,5]; 
b=[6;-12;3]; 
x=A\b 

此时,结果为

警告: 矩阵为奇异工作精度。 
> In test at 5

x =

   NaN 
   NaN 
   NaN

此时,可以做同解异构,如下:

A=[1,2,1; 
   -2,-4,-2; 
    1,-2,5; 
    0,0,0]; 
b=[6;-12;3;0]; 
x=A\b

运行结果为:

 

x =

         0 
    2.2500 
    1.5000

 

 总结:将上面的所有情况封装起来,做成一个函数,代码如下:

function X=solveEquation(A,b)
% 解方程A*x=b
% A为系数方程,b为列向量
[temp1,temp2]=size(b);
if(temp2~=1)%判断b是否为列向量
    disp(\'b不是列向量!\');
    return
end
[c,d]=size(A);%c为方程数,d为未知量个数
if(c~=temp1)
    disp(\'A,b行数不一致!\');
    return
end
if(c==d)
    if(det(A)==0)%奇异方程组
        disp(\'奇异方程组问题\');
        A=[A;zeros(1,d)];
        b=[b;0];
        X=A\b;
        return
    end
    %定解方程组    
    disp(\'定解方程组问题\');
    X=A\b;
    return
elseif(c>d)%超定方程
    disp(\'超定方程组问题\');
    X=A\b;
    return
else
    disp(\'不定方程问题\');
    X=A\b;
    return
end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi图像处理 -- 图像旋转发布时间:2022-07-18
下一篇:
抽筋的Delphi发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap