%高斯消元解方程
G=[0.4096 0.1234 0.3678 0.2943 0.4043;0.2246 0.3872 0.4015 0.1129 0.1550;0.3645 0.1920 0.3781 0.0643 0.4240;0.1784 0.4002 0.2786 0.3927 -0.2557]; %输入增广矩阵
[m,n]=size(G); %m为增广矩阵行数,n为增广矩阵列数
for k=0:m-2 %k用于记录存放列元素的次数(记录几次则循环几次),亦可用来控制消元循环(所以从0开始),从而简化代码。
GG=G(:,k+1); %GG记录要处理的第一列的原始列元素
for i=1+k:m-1 %冒号右边为最大行数-1,因为第一行不处理。处理完后的行不再处理,所以从1+k开始。
for j=1+k:n %冒号右边为最大列数。处理完后的列也不再处理,所以从1+k开始。
if GG(k+1,1)~=0 G(i+1,j)=-(G(1+k,j))*(GG(1+i,1)/GG(k+1,1))+G(i+1,j); end; %高斯消元,先判断列元素是否为0,分母为零时方程可能无解。
end;
end;
end; %高斯消元过程结束
Answer=zeros(1,n-1); %Answer用于存放方程的解,初始值为0
for i=m:-1:1
SUM=0;
for j=1:n-1
if i~=j
SUM=SUM+G(i,j)*Answer(1,j);%此处计算的是书第45页第二个方程组的括号内的数值之和
end;
end;
Answer(1,i)=(G(i,n)-SUM)/G(i,i);
end
%/
%//佛光普照分界线/
%
%高斯列主元消元法解方程
G=[0.4096 0.1234 0.3678 0.2943 0.4043;0.2246 0.3872 0.4015 0.1129 0.1550;0.3645 0.1920 0.3781 0.0643 0.4240;0.1784 0.4002 0.2786 0.3927 -0.2557]; %输入增广矩阵
[m,n]=size(G); %m为增广矩阵行数,n为增广矩阵列数
for k=0:m-2 %k用于记录存放列元素的次数(记录几次则循环几次),亦可用来控制消元循环(所以从0开始),从而简化代码。
GG=G(:,k+1); %GG记录要处理的第一列的原始列元素
GGG=zeros(m,1);
for l=k+1:m
GGG(l,1)=GG(l,1);
end;
[a,b]=max(abs(GGG(:,1))); %查询最大列元素位置
if b~=k+1 %如果最大元素所在行不在当前行,开始更换列主元
Change=G(k+1,:);
G(k+1,:)=G(b,:);
G(b,:)=Change(1,:);
Change(:,:)=0;
change_flag_number=GG(k+1,1);
GG(k+1,1)=GG(b,1);
GG(b,1)=change_flag_number;
end %更换主元结束
for i=1+k:m-1 %冒号右边为最大行数-1,因为第一行不处理。处理完后的行不再处理,所以从1+k开始。
for j=1+k:n %冒号右边为最大列数。处理完后的列也不再处理,所以从1+k开始。
if GG(k+1,1)~=0 G(i+1,j)=-(G(1+k,j))*(GG(1+i,1)/GG(k+1,1))+G(i+1,j); end; %高斯消元,先判断列元素是否为0,分母为零时方程可能无解。
end;
end;
end; %高斯消元过程结束
Answer=zeros(1,n-1); %Answer用于存放方程的解,初始值为0
for i=m:-1:1
SUM=0;
for j=1:n-1
if i~=j
SUM=SUM+G(i,j)*Answer(1,j);%此处计算的是书第45页第二个方程组的括号内的数值之和
end;
end;
Answer(1,i)=(G(i,n)-SUM)/G(i,i);
end