首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gauss-Seidel的Jacobi迭代

Gauss-Seidel的Jacobi迭代
EN

Stack Overflow用户
提问于 2014-02-10 10:23:19
回答 2查看 19.1K关注 0票数 1

我有以下为Jacobi方法编写的函数,需要修改它以执行Gauss-Seidel

代码语言:javascript
复制
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)更新,但不确定如何编写它,谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-03-03 04:44:26

你只需要去掉y,并用x替换任何y的出现。

代码语言:javascript
复制
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;
end

Jacobi从旧的向量计算新的向量,然后一次替换所有变量。

Gau²-Seidel就地计算并始终使用最新的值。

票数 2
EN

Stack Overflow用户

发布于 2017-08-30 05:28:56

代码语言:javascript
复制
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;
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21668083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档