Demo entry 6365584

金王震

   

Submitted by suzui961228 on May 20, 2017 at 12:54
Language: Matlab. Code size: 1.3 kB.

function[x,det,flag]=zhuyuan(A,b)  
[n,m]=size(A);nb=length(b);       
if n~=m                                %验证是否为方阵 是否满足条件
   error('A不是方阵')
   return;
end 
if m~=nb 
   error('b的长度不等于A的阶数')
   return;
end 
%如果满足条件,则进入主程序
flag='OK';det=1;x=zeros(n,1);
for k=1:n-1 
   max1=0;                             %将max1作为当前最大的储存值
   for i=k:n                           %搜寻每一列的最大值将那一行作为主元行
   if abs(A(i,k))>max1                
   max1=abs(A(i,k));r=i;
   end 
   end 
if max1<1e-10                          %如果最大值小于精度值,则返回“失败”
 flag='failure';return;
end
if r>k                                 
for j=k:n 
    z=A(k,j);A(k,j)=A(r,j);A(r,j)=z;   %如果当前行不符合条件,则交换最大行与当前行的元素位置
end 
    z=b(k);b(k)=b(r);b(r)=z;det=-det;  %将相应的b值也进行交换
end 
for i=k+1:n                            %对相应的主元行作消元操作
    m=A(i,k)/A(k,k);
for j=k+1:n 
    A(i,j)=A(i,j)-m*A(k,j);
end 
    b(i)=b(i)-m*b(k);
end 
    det=det*A(k,k); 
end 
    det=det*A(n,n);
if abs(A(n,n))<1e-10 
flag='failure';return;
end 
for k=n:-1:1                           %按照倒序将结果代入回去
for j=k+1:n 
b(k)=b(k)-A(k,j)*x(j);
end 
x(k)=b(k)/A(k,k);
end 
x(k)=b(k)/A(k,k); 
end
 
A=[1 -1 -1 0 0
    0 0 1 -1 -1 
5 5 0 0 0
0 5 -7 -2 0
0 0 0 2 -3];
b=[0;0;5.35;0;0];
0.66
0.41
0.25
0.15
0.1
x=Gauss(A,b);fprintf('%.5g\n',x)

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).