J:牛顿法的隐性副词

2024-02-21

我发现在'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^:_'

什么是默认等价物?


TL;DR

Per 评论 https://stackoverflow.com/questions/26690417/j-tacit-adverb-of-newtons-method#comment42031688_26690417,简短回答;与原始的、显式的默认等价newton_i and newton分别是:

n_i =: d.0 1 (%/@:) (]`-`) (`:6) 
newton =: n_i (^:_)

一般来说,可以在以下位置找到有关如何获得此类翻译的一些技术:J 论坛 http://www.jsoftware.com/pipermail/programming/2010-November/021172.html.

建造

这里的关键见解是(a)函数与它自己的“零阶导数”相同,并且(b)我们可以同时计算 J 中函数的“零阶”和一阶导数,这要归功于该语言的数组 -导向的性质。剩下的就是集邮了。

在理想世界中,给定一个函数f,我们想要生成一个动词序列,例如(] - f % f d. 1)。问题是 J 中的默认状语编程限制我们产生一个提到输入函数的动词(f)一次且仅一次。

因此,我们使用了一个偷偷摸摸的技巧:我们计算two的衍生物f同时:“零”导数(这是一个恒等函数)和一阶导数。

   load 'trig'
   sin              NB. Sine function (special case of the "circle functions", o.)
1&o.

   sin d. 1 f.      NB. First derivative of sine, sin'.
2&o.

   sin d. 0 f.      NB. "Zeroeth" derivative of sine, i.e. sine.
1&o."0

   sin d. 0 1 f.    NB.  Both, resulting in two outputs.
(1&o. , 2&o.)"0

   znfd =: d. 0 1   NB. Packaged up as a re-usable name.
   sin znfd f.
(1&o. , 2&o.)"0

然后我们只需在它们之间插入一个除法:

   dh =: znfd (%/@) NB. Quotient of first-derivative over 0th-derivattive

   sin dh
%/@(sin d.0 1)

   sin dh f.
%/@((1&o. , 2&o.)"0)

   sin dh 1p1  NB. 0
_1.22465e_16

   sin 1p1     NB. sin(pi) = 0
1.22465e_16
   sin d. 1 ] 1p1  NB. sin'(pi) = -1
_1
   sin dh 1p1  NB. sin(pi)/sin'(pi) = 0/-1 = 0
_1.22465e_16

The (%/@)来到右侧znfd因为 J 中的默认状语编程是 LIFO(即从左到右,而“正常”J 是从右到左)。

集邮

正如我所说,剩下的代码只是集邮,使用标准工具构建一个动词序列,从原始输入中减去这个商:

   ssub  =: (]`-`) (`:6)     NB. x - f(x)

   +: ssub                   NB. x - double(x)
] - +:
   -: ssub                   NB. x - halve(x)
] - -:

   -: ssub 16                NB. 16 - halve(16)
8
   +: ssub 16                NB. 16 - double(16)
_16
   *: ssub 16                NB. 16 - square(16)
_240
   %: ssub 16                NB. 16 - sqrt(16)
12

Thus:

    n_i =: znfd ssub         NB. x - f'(x)/f(x)

最后,使用“应用到定点”功能 https://stackoverflow.com/questions/18682404/j-why-does-fproposition-y-stand-for-a-while-loop/18685836#18685836 of ^:_, 我们有:

    newton =: n_i (^:_)

Voila.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

J:牛顿法的隐性副词 的相关文章

  • (a != b) 和 (a != (a = b) 之间有什么区别?

    In a 最近的问题 https stackoverflow com questions 48319047 why concurrentlinkedqueue source code use to check for tail 483192
  • C++ 中的 const 运算符重载问题

    我在使用 const 版本重载 operator 时遇到问题 include
  • 前向声明不适用于转换运算符

    考虑下一个代码 include
  • 批:管子是什么|用于?

    stackoverflow 用户大家好 我对批处理并不陌生 我只是从来没用过管道 批量 甚至在我阅读 ss64 com 上的参考资料后 我也不明白管道的用途 起初我以为它是 OR 运算符或其他东西 显然我现在知道它不是 我只知道它位于两行
  • F# 自定义运算符优先级

    在 F 中 您可以定义自定义运算符 例如 let input pattern Regex IsMatch input pattern 与 Haskell 不同 自定义运算符的定义没有优先级 F 中自定义运算符的运算符优先级是什么 运算符优先
  • 为什么不使用强制转换语法调用“operator void”?

    玩的时候这个答案 https stackoverflow com questions 4030959 will a variablename c statement be a no op at all times 4030983 40309
  • 取消引用后 *p++ 会递增吗? [复制]

    这个问题在这里已经有答案了 我不太确定这里的顺序是什么 是吗 1 增加指针p的值后取消引用它 2 在增加指针 p 的值之前先取消引用它 增量和取消引用之间没有顺序 但是 那 运算符应用于结果p 这是原始值p在增量之前
  • 什么时候在排序之外使用太空船运算符?

    我只见过 Perl 宇宙飞船运算符 在数字排序例程中使用 但它在其他情况下似乎很有用 我只是想不出实际用途 什么时候可以在 Perl 排序之外使用它 This is a best practice question 我正在为机器人乔编写一个
  • 一个只接受编译时已知表达式的函数?

    编译时表达式很好 因为您可以使用它们来专门化模板 例如 可以通过使用带有以下内容的编译时表达式来访问元组std get method std cout lt lt std get lt 0 gt my tuple lt lt std end
  • Objective-C 运算符 (?) 和 (:)

    做什么的 and 这里表示 define MAX a b a gt b a b 这是一个三元运算符 http en wikipedia org wiki Ternary operation 也可用于 C 语言 Objective C 是 C
  • 这就是 C 中 + 运算符的实现方式吗?

    当理解原始运算符如 and 是用C实现的 我发现了以下片段一个有趣的答案 https stackoverflow com a 11694778 5399734 replaces the operator int add int x int
  • VB.NET中有条件三元运算符吗?

    在 Perl 和其他语言 中 条件三元运算符可以表示如下 my foo bar buz cat dog VB NET中有类似的运算符吗 取决于版本 这IfVB NET 2008 中的运算符是三元运算符 以及空合并运算符 这是刚刚推出的 20
  • Java 中 & 和 && 有什么区别?

    我一直以为 Java中的运算符用于验证其两个布尔操作数是否为true 以及 运算符用于对两个整数类型进行按位运算 最近我才知道 运算符也可用于验证其布尔操作数是否为true 唯一的区别是即使 LHS 操作数为 false 它也会检查 RHS
  • 变量运算符可以吗?

    有没有办法执行类似于以下任一操作 var1 10 var2 20 var operator lt console log var1 operator var2 returns true OR var1 10 var2 20 var oper
  • '+=' 的含义

    我对 C 的语法感到困惑 有什么用 The 语法可以以不同的方式使用 SomeEvent EventHandler 向事件添加处理程序 SomeVariable 3 相当于 SomeVariable SomeVariable 3
  • C++:输入和输出流运算符:结合性

    输入 输出流运算符理论上的结合性 左到右 例如 根据这个 圣玛丽大学网站 http cs smu ca porter csc ref cpp operators html 输入 输出流运算符结合性实践 include
  • 比较 .NET 中的两个字节数组

    我怎样才能快速做到这一点 当然我可以这样做 static bool ByteArrayCompare byte a1 byte a2 if a1 Length a2 Length return false for int i 0 i
  • 将副词应用于动名词列表

    考虑一个动名词列表和一些我们希望循环应用它们的数据 ms NB list of gerunds d 3 4 5 6 NB some data 我们可以做的 ms d NB returns 9 ie the result of 3 4 5 6
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐

  • 如何在 angularjs 中单击按钮添加行和表格?

    我需要一个表 其行可以在单击按钮时动态添加 并且表本身可以通过另一个按钮单击来重新创建并显示在页面上 我创建了以下内容 HTML
  • Objective-c 布尔值的释放

    我会怎样dealloc布尔值 下面这种方式释放它给了我一个警告 Incompanypointer to integer conversion allocateing to BOOL aka signed char from void voi
  • 数据触发器中的标记扩展

    为了翻译我的 WPF 应用程序 我使用了一个返回 Binding 对象的标记扩展 这允许我在应用程序运行时切换语言 我这样使用这个标记
  • 三元运算表现得很奇怪[重复]

    这个问题在这里已经有答案了 我很难理解下面代码中三元运算的工作原理 public static void main String args try throw new ArithmeticException Exception Testin
  • 如何为排列编写一个好的 hashCode() ?

    在我的程序中 我处理很多大小的列表n所有这些都是 1 n 我的问题是我把这些排列放在HashMaps and HashSets 我需要一个好的hashCode 这样可以避免太多的碰撞 我想到的所有解决方案都会导致大量冲突或溢出 如何为排列编
  • C# - 调用具有所有默认参数的结构构造函数

    今天创建的时候遇到了这个问题struct保存一堆数据 这是一个例子 public struct ExampleStruct public int Value get private set public ExampleStruct int
  • 使用 CocoaPods 停止使用 ionic Project 构建 iOS

    我创建了一个离子项目 我使用 Ionic CIL 构建了该应用程序并完美运行 现在使用 cocoapods 我创建了一个 pod 文件并加载了所需的 pod 并进行了 pod 安装 现在 当我尝试运行 ionic run build ios
  • 如何将 React 中的默认端口从 3000 更改为另一个端口?

    如何将React默认端口3000更改为其他端口 默认情况下 ReactJS 应用程序在端口 3000 上运行 Express js 应用程序也在同一端口 3000 上运行 如果您要同时运行这两个应用程序 则会发生冲突 您需要更改其中之一的端
  • 未捕获的 ReferenceError:foobar 未定义(匿名函数)

    我有这个 js 文件从某个域提供服务foobar com at http foobar com static js main js document ready function function foobar bar ajax url s
  • 插件的 VueJS 反应式绑定 - 如何?

    我正在为 Pouch CouchDB 开发一个 Vue 插件 该插件将是开源的 但只要我能找出我遇到的问题 目前 我正在尝试使该插件非常类似于 Vuex 它具有内部状态 并检测更改 并在发生更改时渲染视图 在 Vue 实例中 我正在初始化一
  • URI 中复杂类型的 WebAPI 帮助页面

    我在用着WebAPI 帮助页面 http blogs msdn com b yaohuang1 archive 2012 08 15 introducing the asp net web api help page preview asp
  • 如何将对象转换为字符串以便与 ActiveRecord 查询一起使用?

    我有一个User 其中有一个String email属性 但是 当我在应用程序中处理电子邮件时 我发现最好先将其转换为 非持久 Email对象 就像这样 class User lt ActiveRecord Base def email E
  • Cron:每 1 秒运行一次 cron?

    如何让 cron 每 1 秒运行一次 默认只有分钟选项 让 cron 第一次开始这项工作 将程序置于无限循环中 每次循环结束时 sleep 1 秒 像这样 在C中 int main int argc char argv while 1 do
  • 如何在 Android 中启用 Google Chrome 的“扫描新卡”选项?

    Google Chrome 具有扫描信用卡以在付款期间填充字段的功能 该功能适用 于 Android Chrome 不适用于 Android 的所有版本和设备 我已附上屏幕截图 It shows on other websites but
  • 在 C++11 智能指针中存储 std::thread

    In C 11 多于有什么优点或缺点当存储一个std thread直接作为班级成员 如下所示 std thread my thread 与存储相反std shared ptr or std unique ptr像这样的线程 std shar
  • 如何从 Google 版本地图中拖动的标记获取格式化地址

    我制作了一个谷歌地图 可以让你在文本字段中输入地址 然后 它会将您导航到您在文本字段中输入的地址 并留下一个可拖动的标记 拖动时会显示纬度和经度以及地理位置地址 我不想显示上述地址 而是希望当您拖动标记时在底角显示标记的地址 而不是从文本字
  • 纯 CSS 中基于复选框隐藏表格行

    对于那些关心的人来说 有一些背景故事 不久前我偶然发现了这个 https medium com front end hacking how it feels to learn javascript in 2017 a934b801fbe h
  • Windows 上的 Python str 与 unicode,Python 2.7,为什么 'á' 变成 '\xa0'

    背景 我使用的是 Windows 机器 我知道不再支持 Python 2 但我仍在学习 Python 2 7 16 我还有Python 3 7 1 我知道Python 3 unicode被重命名为str https stackoverflo
  • EntityManagerFactory 已关闭,Hibernate

    我最近创建了一个 Web 服务 它使用 Java 中的静态方法从数据库中获取项目列表 Web 服务运行良好 并将 JSON 返回给调用者 然而 它只能工作一次 如果您尝试刷新或提出新请求 我会收到一个EntityManagerFactory
  • J:牛顿法的隐性副词

    我发现在 addons math misc brent ijs 布伦特方法作为副词的实现 我也想构建牛顿法作为副词 但这比构建默认动词要困难得多 这是牛顿迭代的显式版本 newton i 1 u u d 1 有了这样的用法 2 o newt