2013-12-09 1 views
8

せずに、私は(私はVBを使用したことがありません。)エクセルVBを使用して簡単なニュートン法の反復ソルバーを実装しようとしているループが行うエラー

私はエラーloop without a Doを取得し、私は「何を把握することはできません保ちますここで間違っている。

私はcompressibility factorと呼ばれる関数z^3 - z^2 - (B^2 + B - A)z - A*Bのルーツを見つけようとしています。

マイソースMSN

Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double 

Dim tempCr As Double 
Dim pressCr As Double 
Dim A As Double 
Dim B As Double 

tempCr = temp/238.5 

pressCr = press/547.424092 

A = pressCr/tempCr 
A = A/(9 * (2^(1/3) - 1)) 
B = pressCr/tempCr 
B = B * (2^(1/3) - 1)/3 



Dim zNot As Double 
Dim counter As Integer 
counter = 0 
zNot = 1# 

Do 
    counter = counter + 1 

    zNot = zNot - (zNot^3 - zNot^2 - (B^2 + B - A) * zNot - A * B)/(3 * zNot^2 - 2 * zNot - (B^2 + B - A)) 
    If counter > 1000 Then 
     Exit Do 

Loop Until eval(zNot, A, B) < 0.000001 


zCalculation = zNot 


End Function 

ブレーク

Function eval(ByVal z As Double, ByVal A As Double, ByVal B As Double) As Double 

    eval = z^3 - z^2 - (B^2 + B - A) * z - A * B 

End Function 

答えて

12

あなたは必要とする:あなたのコード内で

End If 

+0

を一顧.....それはそれです。ありがとう!私はそれを逃したとは信じられません。 –

+3

あなたの責任ではない............この場合のExcelのエラーメッセージは誤っています。 –

+1

カント私は実際にこれをチェックする前にstackoverflowを検索したと信じて – Tascalator

1

あなたは試すことができます:

Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double 

    Dim tempCr As Double 
    Dim pressCr As Double 
    Dim A As Double 
    Dim B As Double 

    tempCr = temp/238.5 

    pressCr = press/0.546789 

    A = pressCr/tempCr 
    A = A/(9 * (2^(1/3) - 1)) 
    B = pressCr/tempCr 
    B = B * (2^(1/3) - 1)/3 



    Dim zNot As Double 
    Dim counter As Integer 
    counter = 0 
    zNot = 1# 

    Do 
     counter = counter + 1 

     zNot = zNot - (zNot^3 + zNot^2 - (B^2 + B - A) * zNot - A * B)/(3 * zNot^2 + 2 * zNot - (B^2 + B - A)) 
     If counter > 1000 Then 
     Exit Do 
     End if ' <--- Here 

    Loop Until eval(zNot, A, B) < 0.000001 

    zCalculation = zNot 
End Function 
+0

あなたはそれが正しかったとはいえ、ゲーリーが最初に投稿しました。ありがとう! –

+0

問題のない人。私はあなたを助けてうれしいです。 – Makah

-2
Sub datacalculationsandformat() 
Dim row As Integer 
row = 2 
Do While Cells(row, 2) <> "" 
Cells(row, 3).Value = Cells(row, 2).Value * 0.3 
Cells(row, 4).Value = Cells(row, 2) * 0.1 
Cells(row, 5).Value = Cells(row, 2).Value + Cells(row, 3).Value + Cells(row, 4).Value 
If Cells(row, 5).Value >= 8000 Then 
Worksheets("Sheet1").Cells(row, 5).Font.Bold = True 
row = row + 1 
Loop