我有以下为Jacobi方法编写的函数,需要修改它以执行Gauss-Seidel
function [ x,iter] = jacobi( A,b,tol,maxit )
%jacobi iterations
%
x=zeros(size(b));
[n,m]=size(A);
i=1;
iter=maxit;
for i=1:maxit
for j=1:n
y(j)=(b(j)-A(j,1:j-1)*x(1:j-1)-A(j,j+1:n)*x(j+1:n))/A(j,j)
end
if max(abs(A*y'-b))<tol
iter=i;
break;
end
x=y';
end我知道我需要让x(1:j-1)更新,但不确定如何编写它,谢谢
发布于 2014-03-03 04:44:26
你只需要去掉y,并用x替换任何y的出现。
for j=1:n
x(j)=(b(j)-A(j,1:j-1)*x(1:j-1)-A(j,j+1:n)*x(j+1:n))/A(j,j)
end
if max(abs(A*x-b))<tol
iter=i;
break;
endJacobi从旧的向量计算新的向量,然后一次替换所有变量。
Gau²-Seidel就地计算并始终使用最新的值。
发布于 2017-08-30 05:28:56
function [x succes iter]=gausssedel(A,b,x0,tol,maxiter)
n=length(A);
succes=0;
iter=maxiter;
x=zeros(n,1);
while maxiter > 0
maxiter=maxiter-1;
for i=1:n
% suma=A(i,1:i-1)*x(i,1-i)+A(i,i+1:n)*x0(i+1:n);
suma=A(i,1:i-1)*x(1:i-1)+A(i,i+1:n)*x0(i+1:n);
x(i) = (b(i)-suma)/A(i,i);
end
if norm(x-x0) < tol
succes=1;
break;
end
x0=x;
end
iter=iter-maxiter;
endhttps://stackoverflow.com/questions/21668083
复制相似问题