2017-02-02 25 views
2

Я пытаюсь реализовать метод Гаусса-Зейделя в MATLAB. Но есть две главные ошибки в своем коде, и я не мог их исправить:Метод Гаусса-Зейделя в MATLAB

  1. Мой код сходится очень хорошо на маленьких матрицах, но она никогда не сходится на больших матрицах.

  2. Код делает избыточные итерации. Как я могу предотвратить избыточные итерации?

Gauss-Seidel Method on wikipedia.

N=5; 
A=rand(N,N); 
b=rand(N,1); 
x = zeros(N,1); 
sum = 0; 
xold = x; 
tic 
for n_iter=1:1000 
    for i = 1:N 
     for j = 1:N 
      if (j ~= i) 
       sum = sum + (A(i,j)/A(i,i)) * xold(j); 
      else 
       continue; 
      end 
     end 
     x(i) = -sum + b(i)/A(i,i); 
     sum = 0; 
    end 
    if(abs(x(i)-xold(j))<0.001) 
     break; 
    end 
    xold = x; 
end 
gs_time=toc; 
prompt1='Gauss-Seidel Method Time'; 
prompt2='x Matrix'; 
disp(prompt2); 
disp(x); 
disp(prompt1); 
disp(gs_time); 

ответ

0
%Gauss-seidal method for three equations 
clc; 
x1=0; 
x2=0; 
x3=0; 
m=input('Enter number of iteration'); 
for i=1:1:m 
    x1(i+1)=(-0.01-0.52*x2(i)-x3(i))/0.3 
    x2(i+1)=0.67-1.9*x3(i)-0.5*x1(i+1) 
    x3(i+1)=(0.44-0.1*x1(i+1)-0.3*x2(i+1))/0.5 
    er1=abs((x1(i+1)-x1(i))/x1(i+1))*100 
    er2=abs((x2(i+1)-x2(i))/x2(i+1))*100 
    er3=abs((x3(i+1)-x3(i))/x3(i+1))*100 

    if er1<=0.01 
     er2<=0.01 
     er3<=0.01 
     break; 
    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^