2744557306 发表于 2023-12-31 17:28

高斯消元法解线性方程组

这段代码是用于解线性方程组的高斯消元法(Gaussian elimination)。以下是代码的主要步骤:

1.初始化: 定义系数矩阵 a 和常数向量 b,以及一个排列矩阵 L,用于记录行的交换顺序。

a=; % 系数矩阵 a
b=[-8,-20,-2,4]'; % 常数向量 b
L=; % 排列矩阵 L
n=length(b);


2.高斯消元: 通过一系列行变换将系数矩阵转化为上三角矩阵,并相应地更新常数向量。这里使用了列主元素法,即每次选取绝对值最大的元素所在的行与当前行进行交换。

for k=1:n-1
    =find(abs(a)==max(max(abs(a(k:n,k:n)))));

    if(p~=k | q~=k)
      t=a(k,:);
      a(k,:)=a(p,:);
      a(p,:)=t;
      r=a(:,k);
      a(:,k)=a(:,q);
      a(:,q)=r;
      t=L(k);
      L(k)=L(q);
      L(q)=t;
      u=b(k);
      b(k)=b(p);
      b(p)=u;
    end
    m(k+1:n,k)=a(k+1:n,k)./a(k,k);
    a(k+1:n,k:n)=a(k+1:n,k:n)-m(k+1:n,k)*a(k,k:n);
    b(k+1:n)=b(k+1:n)-m(k+1:n,k)*b(k);
end


3.回代: 通过回代过程求解方程组。从最后一行开始,逐步计算未知数的值。

y(n)=b(n)/a(n,n);
for i=n-1:-1:1
    sum=0;
    for j=i+1:n
        sum=sum+a(i,j)*y(j);
    end
    y(i)=(b(i)-sum)/a(i,i);
end


4.输出结果: 将解存储在 x 中,并输出结果。

x(L(n))=y(n);
x(L(1:n-1))=y(1:n-1);
jie=x'

最后,解向量 jie 包含了线性方程组的解。请注意,这段代码在求解之前进行了列主元素的行交换,以提高数值稳定性。


页: [1]
查看完整版本: 高斯消元法解线性方程组