do
do k=2,n-1
Ek0=E(k)
P0=(P(k)*Dz(k)+P(k-1)*Dz(k-1))/(Dz(k)+Dz(k-1))
Dz0=(Dz(k)+Dz(k-1))/2D0
E(k)=E(k)*(1D0-W0)+W0*(E(k+1)/(Dz0*Dz(k))+E(k-1)/(Dz0*Dz(k-1)))/(1.0D0/(Dz(k)*Dz0)+1.0D0/(Dz(k-1)*Dz0)+i*W*U*P0)
T=(abs(dble(Ek0)-dble(E(k)))+abs(aimag(Ek0)-aimag(E(k))))/2D0
if(T<1e-45)goto 100
enddo
enddo
100 H2=(E(3)-E(2))/(Dz(2)*i*W*U)
Hs=P(2)*Dz(2)*(E(2)+(E(3)-E(2))/4)/2+H2
Pa=(E(2)/Hs)**2/(W*U)
aliouying 发表于 2014-4-18 14:12
迭代法的收敛方式很多,一般计算的有: 残差、两次迭代结果的RMS,判断有两种,1、小于某个阈值,2、变化很 ...
H_S 发表于 2014-4-18 18:15
能不能具体点呢
我上面的就是比较了迭代之前与之后其中一个值的大小
但是矩阵中有许多值 可能恰好比较了 ...
珊瑚虫 发表于 2014-4-18 18:20
可以用初始荷载的某种范数与求解得结果与失衡力同样的范数比值 作为收敛判断标准 ...
aliouying 发表于 2014-4-19 10:29
你这代码有问题,为什么是判断某一个值?
我说的残差或者解的RMS都是指所有的解,即对应所有的Ek
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |