目录
高斯部分主元消元法
高斯列主元消元法
高斯部分主元消去法:
原理:将线性方程组的系数即为矩阵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