吧务
level 13
所谓【迭代】,就是在⑴式中给出一个【λ】的值,从而得到一个【d】值,然后把【d】值放到⑵式中去验证【λ】的值,如果差别很小,【λ 、d】就是所求解。
算法大致如下:
' 要已知 L、qv、H、Δ、v、 的具体值
π = 3.14
15926535898
λ = 0.0001
Do
d = ((8 * λ * L * qv * qv / (8 * π * π * H)) ^ 0.2
λ1 = -2 * Log((Δ / (3.7 * d) + 4.1365 * (v * d / qv) ^ 0.89)
If Abs(λ1) > 1e-10 Then λ1 = Sqr(1 / λ1)
If Abs(λ -λ1) < 1e-6 Then
Exit Do ' 已经找到了合适的解
Else
λ = λ + 0.0001
End If
Loop
2020年06月18日 01点06分
3
为了不进入【死循环】,可以在【Loop】命令的前面加一句【DoEvents】移交控制权,以便按【Esc】退出程序运行状态。
2020年06月18日 01点06分
有一个问题:由于【d】在⑵式中出现在了分母上,有必要进行一次判断【If Abs(d) > 1e-10 Then 用上面的公式;否则只要第二项】。
2020年06月18日 01点06分
吧务
level 13
对于科学计算的问题,一般比较简单。公式照着写出来就是。
注意等号左边就是一个变量,等号右边出现的变量都要是【已知】的。
要特别注意两个问题:
一是分母为零;二是负数开偶次方。
出现这些问题时,别忘了要进行判断,可能公式都会发生一些变化。
对于【双精度数】绝对为零的情况几乎不存在,所以判断双精度数【d】是否为零的写法是【If Abs(d) < 1e-10 Then ……】。
2020年06月18日 01点06分
4
Luosen56老师,赞一个
2020年06月18日 22点06分