📄 iterative_f.m
字号:
function x=iterative_f(A,b,x0,tol,max,w,method)
% inputs;
% A coefiecient matrix(n_by_n);
% b right_hand side(n_by_1);
% x0 initial solution(n_by_1);
% tol stop if norm of change in x<tol;
% max maxium number of iterations];
% w aditional parameter of relaxation factor;
% method iteration 1 byJacobi;2 by Gauss_seidel;3 by Successive Over Relatxation;
% outputs
% x solution vector(n_by_1);
[n,m]=size(A);
xold=x0;
C=-A;
x=x0;
for i=1:n
C(i,i)=0;
end
for i=1:n
C(i,:)=C(i,:)/A(i,i);
end
for i=1:n
d(i)=b(i)/A(i,i);
end
i=1;
switch method
case 1
while(i<=max)
xnew=(C*(xold')+d')';
xno=xnew-xold;
if norm(xno,n)<=tol
x=xnew;
disp('Jacobi method converged');
disp([i xnew]);
return;
else
xold=xnew;
end
disp([i xnew]);
i=i+1;
end
disp('Jcobi method did not converge');
case 2
x=x0;
while(i<=max)
xold=x;
for j=1:n
x(j)=C(j,:)*x'+d(j);
end
xn_o=xold-x;
if norm(xn_o,n)<=tol
disp('Gauss_Seidel methd converged');
disp([i x]);
return;
end
disp([i x]);
i=i+1;
end
disp('Gauss_Seidel method did not converge');
case 3
while(i<=max)
xold=x;
for j=1:n
x(j)=(1-w)*xold(j)+w*(C(j,:)*x'+d(j));
end
xn_o=xold-x;
if norm(xn_o,n)<=tol
disp('SOR mrthod conerged');
disp([i x]);
return;
end
disp([i x]);
i=i+1;
end
disp('SOR methd did not converged');
end
disp('results after maximum number of iterations');
function z=norm(xn_o,n)
z1=0;
for i_z=1:n
z1=z1+(xn_o(i_z))^2;
end
z=sqrt(z1/n);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -