Demo entry 6448877

金王震

   

Submitted by suzui961228 on May 27, 2017 at 13:29
Language: Matlab. Code size: 904 Bytes.

%A,b为输入值
%e为精度值
%n为A的维数 x0作为初值
%r作为b中的最大值,作为循环进入的条件
clear;clc;
A=[25,-41,10,-6;-41,68,-17,10;10,-17,5,-3;-6,10,-3,2]; 
b=[32,23,33,31];
e=5e-5;
n=length(A);
x0=[0,0,0,0]; 
x=zeros(n,1);
k=0;
r=max(abs(b));
while r>e             %判断b中的最大值有没有比误差大
for i=1:n
    d=A(i,i);         %开始赋值
    if abs(d)<e       %前后矛盾,输入错误,返回错误
fprintf('\n输入错误'); 
return;
end  
sum=0;
%迭代过程
for j=1:n        
    if j~=i  
       sum=sum+A(i,j)*x0(j);  
            end 
        end  
        x1(i)=(b(i)-sum)/A(i,i);
       end
        k=k+1;
        r=max(abs(x1-x0));
        x0=x1;
        fprintf('\n第%d次迭代:',k);
         fprintf('\n与上一次的计算结果距离:%f\n',r);
         disp(x1);
         if k>10000                %求出x,到10000次还出现结果,则输出不收敛
              fprintf('不收敛');
              break;
         end    
end
x=x0;
%输出结果10001次迭代:
与上一次的计算结果距离:Inf
  -Inf   Inf  -Inf   Inf

不收敛

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).