excel - Excel VBA中的牛顿-拉夫森
问题描述
我想进行 Newton-Raphson 迭代,但坚持如何将变化的 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
解决方案
推荐阅读
- java - 流过滤另一个流并计数
- java - 我们可以不在 Trie 构造函数中初始化引用数组吗
- angular - Angular 7 - build --prod 失败并出现错误:无法解析所有参数
- c# - 需要解析通过 Post 请求传入的 JSON
- azure - 点到站点配置的地址池
- reactjs - 开玩笑测试一个 React 类方法被 componentWillMount 调用
- c++ - 返回元组的可变参数模板
- java - 如何在 Spring MVC 中使用带有属性名称的 Spring @RequestMapping 注解
- python - 网络抓取问题(William Hill-UFC 赔率)
- android - onDraw 在自定义视图中的 onMeasure 之前被调用