【发布时间】:2014-12-28 16:52:15
【问题描述】:
我在'addons/math/misc/brent.ijs' 中找到了将布伦特方法作为副词的实现。我也想建立一个牛顿法作为副词,但这比建立默示动词要困难得多。
这是牛顿迭代的显式版本:
newton_i =: 1 : '] - u % u d.1'
这样的用法:
2&o. newton_i^:_ (1) NB. (-: 1p1) must be found
1.5708
2 o. 1.5708 NB. after substitution we get almost 0
_3.67321e_6
当然,为了方便:
newton =: 1 : 'u newton_i^:_'
什么是默认等价物?
【问题讨论】:
-
我认为
d.在这种情况下会阻止你写一个默认副词。 -
简短的回答是
n_i =: d.0 1 (%/@:) (-`) (]`) (`:6)和newton =: n_i (^:_)。我稍后会回来explain why(我现在正在打电话)。 -
@DanBron,非常感谢!在您的消息链接的帮助下,我已经了解了所有内容,除了为什么
(-`) (]`) (`:6)而不是(]`) (-`) (`:6)用于构建] - ffork。 -
Danylo:因为副词列车是从左到右的(即 LIFO);将
f (d.0 1) (%/@:)视为建立(有效)(f % f d.1)的黑匣子;那么你得到了black_box (`-) (`]),它在reverse (LIFO) 中读取,读取为],-,black_box,然后被执行到火车] - black_box。不,这里真正的诡计是使用d.0 1:) 。这是否清楚,还是您仍然希望我发布正式答案? -
Dan,我已经完全理解
f (d.0 1) (%/@:)的把戏 :) - 确实很酷:我们计算f的零和一阶导数,然后在它们之间插入%。我也理解了你写这三个副词的顺序。非常感谢!
标签: operators j newtons-method tacit-programming