您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页Seidel迭代的MATLAB实现

Seidel迭代的MATLAB实现

来源:欧得旅游网
function solution=GaussSeidel(Ab,epsilon) %%Ab为用户输入的增广矩阵 %%epsilon为用户输入的精度要求

if nargin==1

disp('请输入精度要求epsilon') return end

row=size(Ab,1); col=size(Ab,2);

if ~ismatrix(Ab)||col-row~=1

disp('矩阵大小有误,不能使用高斯塞德尔迭代法') return end

A=Ab(:,1:row); b=Ab(:,col);

ddet=abs(det(A));

ddiag=abs(det(diag(diag(A)))); if ddetdisp('该方程的系数矩阵行列式为零,方程组无解或有无穷多解,或系数矩阵的对角线有零元,不能使用高斯塞德尔迭代 ') return end

%%提取上下三角矩阵及对角矩阵 U=-triu(A,1); L=-tril(A,-1); D=diag(diag(A));

%%判断迭代过程是否收敛 G=(D-L)^(-1)*U; if max(abs(eig(G)))>=1 disp('迭代法不收敛!') return end

%%迭代过程 error=10; n=row;

start=zeros(row,1); xk=start; xknext=start; while error>epsilon xk=xknext;

xknext(1)=1/A(1,1)*(b(1)-sum(A(1,2:n).*xk(2:n)')); for i=2:n-1

Ssum1=sum(A(i,1:i-1).*xk(1:i-1)'); Ssum2=sum(A(i,i+1:n).*xknext(i+1:n)'); xknext(i)=1/A(i,i)*(b(i)-Ssum1-Ssum2); end

xknext(n)=1/A(n,n)*(b(n)-sum(A(n,1:n-1).*xknext(1:n-1)')); error=norm(xk-xknext); end

solution=xknext;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务