高斯消元法(matlab)

目录

高斯部分主元消元法

高斯列主元消元法


 高斯部分主元消去法:

原理:将线性方程组的系数即为矩阵A(n,n),对应的值即为 B(n,1),记增广矩阵C为(A,B);

第一步:找出系数中绝对值最大的元素,将其交换到C(1,1),通过线性运算,使得第一列C(1,1)下面的元素都消为0;

第二步:找出除第一行第一列元素,系数中绝对值最大的元素,将其交换到C(2,2),通过线性运算,使得第二列C(2,2)下面的元素全部消为0;并以此类推,得到一个上三角矩阵;

注意:在高斯全主元消元时,可能交换了列,再得到上三角后,需要将列交换回来;

例:

%高斯主元消去法
clc;
clear;
close all;
A=[1 2 3;5 4 10;3 -0.1 1];%输入矩阵系数
B=[1;0;2];
C=[A B];
[m,n]=size(C); %计算出增广矩阵的行数和列数
%找主元->消去—>找主元->消去
%高斯主元消元法会更改列数,需要记录下来,消元完毕后再改回来;
%生成一个行向量r来记录列数的更改;
r=1:m
H=m;L=n;
for q=1:m-1
 %找出主元
 max=0;   
for i=q:H
    for j=q:L-1
     if(abs(C(i,j))>max)
         max=abs(C(i,j));
         a=i;
         b=j;%利用a,b来记录最大值的位置,方便后续的交换位置;
       
     end
    end
    
end

%将主元换至第q行第q列
C([q,a],:)=C([a,q],:);%交换第q行和最大值所在的第a行
C(:,[q,b])=C(:,[b,q]);%交换第q列和最大值所在的第b列
%r记录列的更换
r(:,[q,b])=r(:,[b,q]);%交换第q列和最大值所在的第b列
disp(C(q,q));
disp(C);
%消元过程,消去主元下面一列
for k=q+1:m
   temp=C(q,q)/C(k,q);
   for d=1:n
  C(k,d)=temp*C(k,d)-C(q,d);
    end
end
disp(C);
end
disp(r(2));

%反带回方程式
x=zeros(1,m)%生成1行m列的0矩阵
for s=m:-1:1;
    x(s)=C(s,n);
    for t=1:m-s;
     x(s)=x(s)-C(s,n-t)*x(m+1-t);
     %disp(C(s,n-t));
    end
    x(s)=x(s)/C(s,s);
end
%将更换的列更改回来,按照r给定的顺序重新排列
for l=1:m
 X(r(l))=x(l); 
end
disp(X);
    

 运行结果:

 可以解得:x1=1.200 x2=2.00 x3=-1.40

高斯列主元消元法:

原理:将线性方程组的系数即为矩阵A(n,n),对应的值即为 B(n,1),记增广矩阵C为(A,B);

 第一步:找出第一列绝对值最大的元素,将其换到C(1,1),通过线性运算使得第一列C(1,1)下所有元素都消为0; 

第二步:找出第二列绝对值最大的元素,将其换到C(2,2),通过线性运算使得第一列C(2,2)下所有元素都消为0;并以此类推:

例:

%高斯列主元消元法
clc;
clear;
close all;
A=[1/4 1/5 1/6;1/3 1/4 1/5;1/2 1 2];%输入矩阵系数
B=[9;8;8];

C=[A B];
[m,n]=size(C); %计算出增广矩阵的行数和列数
H=m;L=n;

%找出第一列中最大元素->消元—>找出第二列中最大元素—>消元...


    for i=1:n-2%第i列
        max=0;
        for j=i:m%第j行
            if(abs(C(j,i))>max)
                max=abs(C(j,i));
                a=i;%记录i列中最大在第a列
                b=j;%记录i列中最大在第b行
            end
        end
        disp(max);
    %找到一列中最大元素后,交换位置
 C([i,b],:)=C([b,i],:);%交换第i行和最大值所在的第b行使得列最大元素在C(i,i);
disp(C);
%消元
for k=i+1:m
    temp=C(i,i)/C( k,i)
  for d=1:n
  C(k,d)=temp*C(k,d)-C(i,d);
    end
end  
disp(C);
    end
 
    %反带回方程
x=zeros(1,m)%生成1行m列的0矩阵   
x=zeros(1,m)%生成1行m列的0矩阵
for s=m:-1:1;
    x(s)=C(s,n);
    for t=1:m-s;
     x(s)=x(s)-C(s,n-t)*x(m+1-t);
     %disp(C(s,n-t));
    end
    x(s)=x(s)/C(s,s);
end
disp(x);

 运行结果:

 x1=-227.0769 x2=476.9231 x3=-177.6923

  • 37
    点赞
  • 304
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值