⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iterative_f.m

📁 主要介绍Matlab的一个函数的使用
💻 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 + -