2013-11-26 42 views
0

'我想用下面的常量在主程序中調用這個函數dpdxf​​,但是它在第一次迭代期間停止給出dpdxf​​的-ve值。胸圍dpdxf​​總是應該> 0或正數。溢出錯誤---循環不會收斂在函數中

p1=40196684 
p2=4019668 
xf=320 
PI=4*10^-11 
t=20 
n=0.4 
k=20 
wg=3*10^-6 
H=46 
w=0.006 
qg=0.002 
mug_p=0.04 

'=================================================================== 

Function dpdxf(p1, p2, xf, PI, t, n, k, wg, H, w, qg, mug_p) 

Static frpr 

dpdxf = (p1 - p2 - 2 * qg/PI)/xf 
FrGaF = 1 
Static qgg 

Do 
    frpr = dpdxf 
     Do 
     qgg = FrGaF 

      FrGaF = -((H * wg * (-3 * 2^(-1/n) * k * n^(2 + 1/n) * ((-2 * t + dpdxf * wf)/(k * n))^(1 + 1/n) - (2 * dpdxf^2 * wg^2)/(mug_p) - (2 *n * dpdxf^2 * wg^2)/(mug_p)))/(3 * (1 + n) * dpdxf)) 
     Loop While Abs(FrGaF - qgg) >= 0.00 

    dpdxf = (p1 - p2 - 2 * (FrGaF/PI))/xf 

Loop Until Abs(dpdxf - frpr) <= 0.0001 

End Function 
+0

我真的很想幫助你解決這個問題,但是代碼真的很難讀取所有這些變量(即frpr,dpdxf​​,k,n,t)聽起來像銀行或物理:)。你可能會考慮編輯代碼? – Takedasama

+0

是的,來自銀行業,但不能減少代碼。但我可以說有兩個未知數FrGaF和dpdxf​​。我只是宣佈qgg和frpr來應用循環條件。我覺得我的邏輯不夠好,因爲在計算dpdxf​​時,它的值不會收斂,但迭代繼續進行,並且當它轉到-ve值時,會產生溢出錯誤。 – user2981046

+0

將在明天嘗試並專注於它,如果您允許,我可能會編輯代碼以便其他人更容易地遵循 – Takedasama

回答

0

嘗試

Function dpdxf(ByVal p1 as Double, ByVal p2 as Double, ByVal xf as Double, ByVal PI as Double, _ 
       ByVal t as Double, ByVal n as Double, ByVal k as Double, ByVal wg as Double, _ 
       ByVal H as Double, ByVal w as Double, ByVal qg as Double, ByVal mug_p as Double) 

所以你最終不會將整數值。還要將常量改爲1#2#以將它們聲明爲浮點數。

+0

感謝您的帖子,但它並沒有解決問題。 – user2981046

+0

我想解決FrFdF = ------和dpdxf​​ =(p1-p2-2 *(FrGaF/PI))/ xf以得到dpdxf​​和FrGaF的解。 – user2981046