matlab解方程组Ax=b

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab解方程组Ax=b相关的知识,希望对你有一定的参考价值。

x=A\b

参考技术A 如果矩阵不太大的话,可以采用直接法,例如
A=[2 5 7;3 8 2;3 4 1];
b=[54 12 2];
x=A\b
回车执行即可,
x =
-2.6667
0.4638
8.1449

当然首先要确定det(A)~=0,对于高阶矩阵或者大型稀疏矩阵,都有相应的方法,如高斯消元法,迭代法,共个梯度法等等,你可以针对矩阵特点看看相应书籍。追问

Ax=0;其中x中某些项已知,求其余项,怎么解?

追答

这个考虑的问题就要多了,如果矩阵在6阶一下的话,先把已经知道的解带入Ax=0中,尽量减小矩阵的阶数,然后再利用初等行变换即可求解;如果阶数较高的话,首先是未知元数和已经知道的解元数比例,可以判断矩阵的秩R(A)和A的阶数N关系,R(A)=N的话就有唯一解,小于的话就有无穷解,这要具体分析了。还是建议你看看书。

参考技术B

数值分析实验之矩阵的LU分解及在解线性方程组中的应用(MATLAB 代码)

详细实验指导见上一篇,此处只写内容啦

 

求如下4阶矩阵的LU分解。

         技术图片

 

• LU分解法

函数定义:
function x=solvebyLU(A,b)% 该函数利用LU分解法求线性方程组Ax=b的解
flag=[exist(‘A‘),exist(‘b‘)];
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

命令行窗口输入:
A=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10];
b=[32 23 33 31]‘;
x=solvebyLU(A,b)
[L,U,P]=lu(A)

 运行结果:

         技术图片

        技术图片

• 不选主元素的三角分解法

%%不选主元素的三角分解法
A=[10,7,8,7;7,5,6,5;8,6,10,9;7,5,9,10];
%A=[6,2,1,-1;2,4,1,0;1,1,4,-1;-1,0,-1,3];
b=[32;23;33;31];
[m,n]=size(A);
L=zeros(m,n);
U=zeros(m,n);
y=zeros(m,1);
x=zeros(m,1);
for i=1:m
    U(1,i)=A(1,i);
    L(i,1)=A(i,1)/U(1,1);
end
for k=1:m-1
    for j=k+1:m
        U(k+1,j)=A(k+1,j);
        L(j,k+1)=A(j,k+1)/U(k+1,k+1);
        for r=1:k
        U(k+1,j)=U(k+1,j)-L(k+1,r)*U(r,j);
        L(j,k+1)=L(j,k+1)-L(j,r)*U(r,k+1)/U(k+1,k+1);
        end
    end
    L(k+1,k+1)=1;
end
y(1,1)=b(1,1);
for i=2:m
     y(i,1)=b(i,1);
    for r=1:i-1
    y(i,1)=y(i,1)-L(i,r)*y(r,1);
    end
end
x(m,1)=y(m,1)/U(m,m);
for i=m-1:-1:1
    x(i,1)=y(i,1)/U(i,i);
    for r=i+1:m
        x(i,1)=x(i,1)-U(i,r)*x(r,1)/U(i,i);
    end
end

 运行结果:

        技术图片

以上是关于matlab解方程组Ax=b的主要内容,如果未能解决你的问题,请参考以下文章

在MATLAB中,方程Ax=B的解可以用哪个命令求得?

如何运用matlab矩阵运算求解线性方程组

矩阵方程。 AX=B B在啥情况下一定有解

matlab矩阵齐次方程求解

如何用matlab解方程组

matlab中如何求解齐次线性方程组(代数矩阵)的非零解