MATLAB中的Gauss-Seidel方法
我试图在MATLAB中实现Gauss-Seidel方法。但我的代码中有两个主要错误,我无法修复它们:MATLAB中的Gauss-Seidel方法,matlab,numerical-methods,gauss,Matlab,Numerical Methods,Gauss,我试图在MATLAB中实现Gauss-Seidel方法。但我的代码中有两个主要错误,我无法修复它们: 我的代码在小矩阵上收敛得很好,但在大矩阵上永远不会收敛 代码进行冗余迭代。如何防止重复迭代 N=5; A=兰特(N,N); b=兰特(N,1); x=零(N,1); 总和=0; xold=x; 抽搐 对于n_iter=1:1000 对于i=1:N 对于j=1:N if(j~=i) sum=sum+(A(i,j)/A(i,i))*xold(j); 其他的 继续; 结束 结束 x(i)=-和+b(
N=5;
A=兰特(N,N);
b=兰特(N,1);
x=零(N,1);
总和=0;
xold=x;
抽搐
对于n_iter=1:1000
对于i=1:N
对于j=1:N
if(j~=i)
sum=sum+(A(i,j)/A(i,i))*xold(j);
其他的
继续;
结束
结束
x(i)=-和+b(i)/A(i,i);
总和=0;
结束
三个方程的if(abs(x(i)-xold(j))%Gauss-seidal方法
clc;
x1=0;
x2=0;
x3=0;
m=输入(“输入迭代次数”);
对于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
如果er1首先是一般性的。Gauß-Seidel和Jacobi方法仅适用于对角占优矩阵,而不是一般的随机矩阵。因此,要获得正确的测试示例,您需要实际地建设性地确保该条件,例如通过
A = rand(N,N)+N*eye(N)
或类似的
否则,该方法将在某些或所有组件中向无穷远方向发散
现在,让我们来看看您的实现中的其他一些奇怪之处。您的目标是什么
if(abs(x(i)-xold(j))<0.001)
甚至更短,使用matlab的语言功能
for i = 1:N
J = [1:(i-1) (i+1):N];
x(i) = ( b(i) - A(i,J)*xold(J) )/A(i,i);
end
if(abs(x(i)-xold(j))<0.001)
for i = 1:N
sum = b(i);
for j = 1:N
if (j ~= i)
sum = sum - A(i,j) * xold(j);
end
end
x(i) = sum/A(i,i);
end
for i = 1:N
J = [1:(i-1) (i+1):N];
x(i) = ( b(i) - A(i,J)*xold(J) )/A(i,i);
end