我需要在关闭时使用牛顿的方法。是否可以在VBA中执行一次* Newton的方法?
Function f (x as Double, y as Double) as Double
f = x^3-y
End Function
我从一个细胞得到的y
值,然后我想找出时f
为零。在上面的玩具例子中,如果单元格包含y=8
,那么我希望牛顿的方法找到接近x=2
的解决方案。
我的解决办法是让一个newton_solve_f
功能:
Function newton_solve_f (y as Double as Double) as Double
Dim x as Double
x = 0 'initial guess for x
'do Newton's method to find x
...
newton_solve_f = x
End Function
因此,实际上,我复制粘贴我的牛顿法(taken from here)到newton_solve_f
代码。
问题是我有几个这样的f
(有些具有两个以上的参数),并且如果我不必为每个参数制作单独的几乎相同的newton_solve_f
,那将会非常整齐。
你会如何在VBA中解决这个问题?
在Python,例如,有可能按如下方式解决此问题:
def f(y):
def g(x):
return x^3-y
return g
def newton_solve(f):
#do newton's method on f(x)
newton_solve(f(3))
这里f(3)
是一个函数,一个变量的closure。 (维基百科的封闭示例几乎与此相同。)
ps。我知道牛顿的方法也需要f
的(部分)导数,我实际上做的更像是割线方法,但这与我所询问的不相关
顺便把“solve_f = x”改为“newton_solve_f = x” – user3598756
@MukulVarshney:这个问题是关于另一个缺失的功能,关闭。 – user357269