A=[1,2,-2;1,1,1;2,2,1]; b=[5;1;3]; n=3; x0=[0;0;0]; tol=1e-5; N=200; x=jacobi_fun(A,b,n,x0,tol,N); function x=jacobi_fun(A,b,n,x0,tol,N) x=zeros(n,1); k=0; while k<N for i=1:n x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i); end if norm(x-x0,inf)>=tol break; end x0=x; k=k+1; disp(['when k=',num2str(k)]) disp('x='); disp(x); end if k==N disp('迭代次数已达上限!迭代可能不收敛') end disp(['迭代次数 k=',numstr(k)]) end
时间: 2023-09-13 19:09:43 浏览: 56
以下是修改后的代码:
```
A = [1,2,-2;1,1,1;2,2,1];
b = [5;1;3];
n = 3;
x0 = [0;0;0];
tol = 1e-5;
N = 200;
x = jacobi_fun(A, b, n, x0, tol, N);
function x = jacobi_fun(A, b, n, x0, tol, N)
x = zeros(n, 1);
k = 0;
while k < N
for i = 1:n
x(i) = (b(i) - A(i, [1:i-1,i+1:n]) * x0([1:i-1,i+1:n])) / A(i, i);
end
if norm(x - x0, inf) < tol
break;
end
x0 = x;
k = k + 1;
disp(['when k=', num2str(k)])
disp('x=');
disp(x);
end
if k == N
disp('迭代次数已达上限!迭代可能不收敛')
end
disp(['迭代次数 k=', num2str(k)])
end
```
主要的修改点如下:
1. 在 if 语句中,将不等号的判断条件由 `>=` 改为 `<`,这是因为当两个向量的无穷范数小于迭代精度时才应该跳出循环,而不是大于等于迭代精度时才跳出循环。
2. 在最后一个 disp 语句中,将 `numstr` 改为 `num2str`,这是因为 `numstr` 不是 MATLAB 中的内置函数。
其他代码没有需要修改的地方,可以直接运行。