文件名称:用SOR迭代法解法方程①
文件大小:32KB
文件格式:DOC
更新时间:2013-01-07 18:47:45
sor 迭代
用SOR迭代法解法方程① SOR.m文件为 function [x,n]=SOR(a,b,E,p) temp1=size(a);temp2=size(b); if temp1(1)~=temp1(2)|temp1(1)~=temp2(1)|temp2(2)~=1|det(a)==0 error('矩阵或向量的大小不对应或矩阵为奇异矩阵') return; end %%化为三角矩阵过程 leng=temp1(1);N=-tril(a,-1)-triu(a,1);M=a+N;N=-a; t=1; for i=1:leng t=t*M(i,i); end if t==0 error('对角元素都为零!') end x=zeros(leng,1); t=0;x1=zeros(leng,1); for i=1:leng for j=1:leng if j=i x(i)=N(i,j)*x1(j)+x(i); end end x(i)=x1(i)+(x(i)+b(i))/M(i,i)*p; end for i=1:leng t=t+(x1(i)-x(i))^2; end e=E^2; n=1; while t>e t=0; x1=x; x=zeros(leng,1); for i=1:leng temp=0; for j=1:leng if j=i x(i)=N(i,j)*x1(j)+x(i); end end x(i)=x1(i)+(x(i)+b(i))/M(i,i)*p; t=t+(x1(i)-x(i))^2; end n=n+1; if t>1000 break; error('不收敛') end end 控制命令窗口命令为: 当松弛因子p=1.3时 [x,n]=SOR(a,b,0.001,1.3) x = 3.0000 2.0000 1.0001 n = 11 当松弛因子p=1时也即是高斯-塞德尔方法 >> [x,n]=SOR(a,b,0.001,1) x = 2.9998 2.0001 1.0001 n = 5 当松弛因子p=0.9时 [x,n]=SOR(a,b,0.001,0.9) x = 3.0001 1.9999 0.9999 n = 6 所以当p=1时松弛因子比较好 通过比较发现 高斯-塞德尔迭代法收敛的速度明显比雅各比收敛速度快