码迷,mamicode.com
首页 > 其他好文 > 详细

Matlab随笔之求解线性方程

时间:2018-09-07 16:00:53      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:理论知识   html   arp   总结   输出   www.   警告   之间   else   

原文:Matlab随笔之求解线性方程

理论知识补充:

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

%矩阵右除的运算符号为“/”,设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

 

Matlab随笔之求解线性方程

标签:理论知识   html   arp   总结   输出   www.   警告   之间   else   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9604877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!