Matlab数值分析编程:高斯消元解方程和高斯列主元消元法解方程

%高斯消元解方程
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


 

你可能感兴趣的:(matlab)