Matlab随笔之求解线性方程

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab随笔之求解线性方程相关的知识,希望对你有一定的参考价值。

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

理论知识补充:

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

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

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

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

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

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

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

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

 

运行结果:

y =

     1 
     2


z =

     1 
     2

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

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

运行结果:

x =

         0 
    0.3077 
    1.4615

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

 

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

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

x =

    1.8182 
   -0.1299

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

 

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

此时,结果为

警告: 矩阵为奇异工作精度。 
> 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

运行结果为:

 

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;
        return
    end
    %定解方程组    
    disp(定解方程组问题);
    X=A;
    return
elseif(c>d)%超定方程
    disp(超定方程组问题);
    X=A;
    return
else
    disp(不定方程问题);
    X=A;
    return
end

 


以上是关于Matlab随笔之求解线性方程的主要内容,如果未能解决你的问题,请参考以下文章

QuantLib 金融计算——数学工具之求解器

怎么用matlab解一元二次方程

matlab中fsolve解二元方程问题

matlab怎么求多元一次方程组

Matlab随笔之分段线性函数化为线性规划

跪求用牛顿迭代法解三元三次非线性方程组,急!! 在线等。。。MATLAB求解要代码