Ньютон-Рафсон в Excel VBA - PullRequest
       9

Ньютон-Рафсон в Excel VBA

0 голосов
/ 03 октября 2018

Я хочу сделать итерацию Ньютона-Рафсона, но застрял в том, как включить изменение Y в интересующую функцию.Для значений переменных Tpr и Ppr в моем коде я ожидаю, что значение Z составит около 0,78.Мой код, как показано ниже:

Sub Z_Factor()

Dim Z As Double
Dim t As Double
Dim Tpr As Double
Dim Ppr As Double
Dim X1 As Double
Dim X2 As Double
Dim X3 As Double
Dim X4 As Double
Dim Y As Single
Dim Ynext As Single
Dim DensityFunction As Double
Dim DensityFunctionPrime As Double
Dim i As Integer

Tpr = 1.52
Ppr = 2.99
t = 1 / Tpr
X1 = -0.06125 * Ppr * t * Exp(-1.2 * (1 - t) ^ 2)
X2 = 14.76 * t - 9.76 * t ^ 2 + 4.58 * t ^ 3
X3 = 90.7 * t - 242.2 * t ^ 2 + 42.4 * t ^ 3
X4 = 21.8 + 2.82 * t

' starting guess of Y is calculated as: 
Y = 0.0125 * Ppr * t * Exp(-1.2 * (1 - t) ^ 2)

For i = 1 To 100

    DensityFunction = X1 + ((Y + Y ^ 2 + Y ^ 3 + Y ^ 4) / (1 - Y) ^ 3) - X2 * Y ^ 2 + X3 * Y ^ X4

    ' derivative of DensityFunction
    DensityFunctionPrime = ((1 + 4 * Y + 4 * Y ^ 2 - 4 * Y ^ 3 + Y ^ 4) / (1 - Y) ^ 4 - 2 * X2 * Y + X3 * X4 * Y ^ (X4 - 1))

    Ynext = Y - DensityFunction / DensityFunctionPrime

    If Abs(Ynext - Y) <= 0.000000000001 Then
    Z = ((0.06125 * Ppr * t) / Y) * Exp(-1.2 * (1 - t) ^ 2)

    Else
    Y = Ynext
    End If

Next i

End Sub
...