二变量多项式的霍纳规则

2023-12-06

霍纳规则用于简化在特定变量值下评估多项式的​​过程。https://rosettacode.org/wiki/Horner%27s_rule_for_polynomial_evaluation#Standard_ML

我已经使用 SML 轻松地将该方法应用于单变量多项式,表示为 int 列表:

fun horner coeffList x = foldr (fn (a, b) => a + b * x) (0.0) coeffList

这很好用。然后我们可以使用以下方式调用它:

- val test = horner [1.0, 2.0, 3.0] 2.0;
> val test = 17.0 : real

Where [1.0, 2.0, 3.0]是表示多项式系数的列表,2.0是变量 x 的值,并且17.0是多项式的计算结果。

我的问题是这样的:我们有一个由 (int list list) 表示的二变量多项式。高级列表中的第 n 项将表示包含 y^n 的所有多项式项,低级列表中的第 m 项将表示包含 x^m 的所有多项式项。

例如:[[2],[3,0,0,3],[1,2]]是多项式

( 2(x^0)(y^0) ) +
( 3(x^0)(y^1) + 0(x^1)(y^1) + 0(x^2)(y^1) + 3(x^3)(y^1) ) +
( 1(x^0)(y^2) + 2(x^1)(y^2) )

该函数需要返回指定 x 和 y 处的多项式值。

我尝试过使用 mlton 编译器的各种方法。

  1. 首先我尝试了嵌套的foldr函数:

    fun evalXY (z::zs) x y = 
            foldr 
            (fn (s, li:list) => 
                s + ((foldr (fn(a, b) => a + b*x) 0 li)*y)
            )
            0 
            z:zs
    

您可以看到我尝试使用“s”作为累加器,就像在单变量示例中使用“a”一样。由于foldr 处理的每个元素本身都需要“foldr”,因此我在描述外部foldr 的函数中再次调用foldr。我知道这个内部文件夹工作得很好,我在上面证明了这一点。*我的问题似乎是我无法访问外部文件夹所在的列表的元素以将该列表传递到内部文件夹中。 >看看我在内部文件夹中使用 li 的地方,这就是我的问题。 *

  1. 然后我尝试将我的单变量函数应用于地图。我遇到了同样的问题:

    fun evalXY (z::zs) x y = 
            map 
            (foldr (fn(a, b) => a + b*x) 0 ???)
            z:zs
    

    *通过这次尝试,我知道我得到了一个整数列表。我放入了一个 int list 列表,其中内部列表被处理并由foldr 作为 int 返回到外部列表。之后我会再次折叠以将 y 值应用于多项式。 这里的函数应该类似于 :: fn evalXY : (int list list) * int * int) -> ... -> int list *

我是 SML 的新手,所以也许我在这里遗漏了一些基本的东西。我知道这是一种函数式编程语言,所以我尝试累积值而不是更改不同的变量,


你们非常接近。让我们首先将问题形式化。将系数 C 作为嵌套列表,如您所示,您想要评估

Notice that you can pull out the s from the inner sum, to get

Look closely at the inner sum. This is just a polynomial on variable x with coefficients given by . In SML, we can write the inner sum in terms of your horner function as

fun sumj Ci = horner Ci x

让我们更进一步定义

在 SML 中,这是val D = map sumj C。现在我们可以用 D 来写出原始多项式:

It should be clear that this is just another instance of horner, since we have a polynomial with coefficients . In SML, the value of this polynomial is

horner D y

...我们就完成了!


这是最终的代码:

fun horner2 C x y =
  let
    fun sumj Ci = horner Ci x
    val D = map sumj C
  in
    horner D y
  end

这不是很好吗?我们所需要的只是霍纳方法的多次应用,并且map.

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

二变量多项式的霍纳规则 的相关文章

  • 解决 SML/NJ 编译管理器中的库冲突

    我正在使用 SML NJ 110 79 其中包括对 Successor ML 项目定义的新结构的支持 其中 Fn https github com SMLFamily BasisLibrary wiki 2015 005 Addition
  • 如何在 React Native ListView 中将项目居中?

    我试图在选择一个项目时将其置于水平列表视图的中心 我当前的策略是首先测量项目并滚动到视图中引用项目的 x 坐标 目前 每当我按下某个项目时ListView滚动到最后x 538 有没有更简单的方法来实现这一点 同时保持代码无状态 功能 con
  • Erlang 参与者与 OOP 对象有何不同?

    假设我有一个 Erlang actor 定义如下 counter Num gt receive From increment gt From self new value Num 1 counter Num 1 end 同样 我有一个 Ru
  • Clojure 函数 - 返回最后一条语句之前计算的值

    我有一些用 Clojure 编写的测试 这是一个简单的例子 defn test1 start server run pvt and expect PVT 0 stop server 我想返回 run pvt and expect 的结果 但
  • scalaz 中的 Store 是什么

    我试图理解Lenses in scalaz 令人惊讶的是没有找到类似的东西cats core 我遇到了所谓的Store这是一个类型别名 type StoreT F A B IndexedStoreT F A A B type Indexed
  • 将命令行参数传递给 SML 脚本

    如何将命令行参数传递给 SML 脚本 我知道有一个CommandLine arguments 正确类型的函数 unit gt string list 但像这样调用解释器 sml script name sml an argument ano
  • 如何根据列表中的先前值过滤Haskell中的列表元素?

    我正在努力在 Haskell 中创建一个函数 该函数根据列表中前一个元素的条件过滤列表的数字 Example 前一个数字是 2 的倍数 myFunction 1 2 5 6 3 expected output 5 3 我知道如何申请filt
  • 与可变结构相比,不可变结构有哪些优点?

    我已经知道不变性相对于可变性的好处在于能够推理代码并引入更少的错误 尤其是在多线程代码中 不过 在创建结构时 我看不出创建一个完全不可变的结构比创建一个可变的结构有任何好处 让我们以保存一些分数的结构为例 struct ScoreKeepe
  • 如何使用 swift flatMap 从数组中过滤掉选项

    我对 flatMap 有点困惑 添加到 Swift 1 2 假设我有一些可选类型的数组 例如 let possibles Int nil 1 2 3 nil nil 4 5 在 Swift 1 1 中 我会做一个过滤器 然后是一个像这样的地
  • 如何在 Haskell 中获得列表的中间位置?

    我刚刚开始使用 Haskel 学习函数式编程 我正在慢慢度过Erik Meijer 在 Channel 9 的讲座 http channel9 msdn com shows Going Deep Lecture Series Erik Me
  • 理解 Scala FP 库

    只是为了让那些想要开始使用 Scala FP 库 在纯 FP 方面变得更好的人快速清晰地了解 有人能澄清猫和猫效应 猫效应 IO 之间的区别 关系吗 最重要的是 齐奥和莫尼克斯对此有何看法 最后 与 ScalaZ 7 8 有何关系 到目前为
  • ML 中高阶函数中的 curry 和 uncurry 是什么

    fun curry f x y f x y fun uncurry f x y f x y fun compose f g x f g x 我了解 compose 函数 但不太了解 ML 中的 curry 和 uncurry 谁能解释一下这
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 为什么 Javascript 函数在实例化时的行为与执行时的行为不同?

    我来自 C PHP 并试图了解 Javascript 的想法 即函数是变量 对象并且具有准构造函数等 任何人都可以解释为什么以下代码会起作用 即 为什么实例化变量 函数时不显示 2 test 为什么执行变量 函数时不显示 1 test co
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • 使用fold_left/right反转OCaml中的列表

    更新 解决方案 感谢 jacobm 的帮助 我想出了一个解决方案 Folding Recursion let reverse list 3 theList List fold left fun element recursive call
  • 函数式 Scala 中的选择排序

    我正在学习 Scala 编程 并编写了选择排序算法的快速实现 然而 由于我对函数式编程还不太了解 所以在转换为更 Scala 风格时遇到了困难 对于 Scala 程序员来说 如何使用 Lists 和 vals 来做到这一点 而不是回到我的命
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi

随机推荐

  • Cocoa Pods 需要完全重新安装

    的背景 我对来自 NET 环境的 Unix 有点陌生 但我现在了解的足够多 足以让我陷入麻烦 我正在使用的现有代码使用 Cocoapods 因此我尝试安装 Cocoapods 最初 当我安装它时 它失败了 说它需要更新版本的 Ruby 为了
  • 在多线程应用程序中使用 libmysqlclient

    我正在 Linux 平台上构建一个 C 应用程序 我需要使用 libmysqlclient 来连接数据库 我下载了Linux源代码包mysql connector c 6 0 2 tar gz 我按照说明编译了它 我得到以下库 libmys
  • 检索包含指定点的矩形集

    我不知道如何以表演的方式实现这一点 所以我决定问你们 我有一个矩形列表 实际上只是 atm 正方形 但稍后我可能必须迁移到矩形 所以让我们坚持使用它们并使其更通用 在二维空间中 每个矩形由两个点指定 矩形可以重叠 我不太关心设置时间 因为矩
  • 如何取消文件上传?

    我想知道如何通过表单取消文件上传multipart form data 那可能吗 将表单发布到隐藏iframe 改变iframe src当你想取消时 浏览器将重新加载iframe并取消之前的POST对其提出请求
  • 边框和网格布局

    Hi everyone I have a problem If anyone can help it would be great I am using border and gridlayout and I am trying to sp
  • 如何使用 X509SecurityKey 进行 Asp.Net Core JWT 验证?

    我如何 可以 使用 X509SecurityKey 进行 Asp Net Core JWT 验证 我当前的代码大致是 X509SecurityKey signingKey null using X509Store store new X50
  • 可以发送到 WCF 服务的数据量是否有大小限制?

    可以发送到 WCF 服务的数据量是否有大小限制 我发送了一个对象数组 当数组达到一定大小时 我收到 404 错误请求异常 这是 httpHosting 的限制吗 另一种类型的托管效果会更好吗 有最大数组大小和最大内容大小 这是用于增加大小的
  • 使用 setcs 命令时 Clearcase 配置规范的行为很奇怪

    我将配置规范存储在文本文件中 以下为内容 element CHECKEDOUT element lost found none element My MYF R2 1 0 9 5179 element My My 2 1 0 13 4875
  • 如何动态获取当前的base URL? [复制]

    这个问题在这里已经有答案了 我正在尝试在我的网络项目中创建一个链接 在链接文本中显示链接 url 例如 如果我正在处理本地主机的示例项目 我希望 example jsp 页面的链接看起来像http localhost 8081 Exampl
  • 三元运算符左结合性[重复]

    这个问题在这里已经有答案了 在 PHP 手册中 我发现以下 用户贡献的注释 在 操作员 下 请注意 在 php 中 三元运算符 具有左结合性 这与 C 和 C 中的右结合性不同 您不能编写这样的代码 正如您可能在 C C 中习惯的那样
  • 使用 AppleScript 设置文件标签

    我正在尝试使用以下代码使用 AppleScript 在文件上放置彩色标签 set theFile to HDD Path to the file ext tell application Finder set label of file t
  • 将 UWP 应用程序连接到远程 SQL Server 2008 提供程序:TCP 提供程序,错误:0

    System Data SqlClient SqlException 已成功与服务器建立连接 但在登录过程中发生错误 提供程序 TCP 提供程序 错误 0 操作成功完成 我正在尝试使用 UWP 应用程序连接到 SQL Server 2008
  • 使用变量替换 shell 脚本中的字符串

    我正在使用下面的代码来替换字符串 在 shell 脚本中 echo LINE sed e s 12345678 replace g 但它正在被取代 replace而不是该变量的值 有人能告诉我出了什么问题吗 如果你想解读 replace 您
  • 如何将这个特定的 json 字符串转换为 python 字典?

    我如何转换这个字符串 gt string name sam 像这样进入 python 字典 gt data name sam In 1 import json In 2 json loads name sam Out 2 u name u
  • JavaScript 使用reduce 从数组创建带有计数的对象

    我正在尝试解决这个小问题 我需要在哪里使用reduce创建一个包含每个项目计数的对象 我以为我明白了reduce有效 使用一个函数将多个值减少到一个 但我不知道这是如何工作的 有什么想法或建议吗 对此 我真的非常感激 var people
  • 使用 MFMailComposer 通过电子邮件发送 CSV 文件

    我想使用带有 csv 扩展名的 NSString 已创建 创建一个文件 然后使用 UIMessage 框架通过电子邮件发送该文件 那么有人可以向我展示创建文件的代码 带有 csv 扩展名和 NSString 的内容 然后如何将其附加到 MF
  • react-native:共享 api,将 base64 字符串而不是图像传递给 WhatsApp

    嘿 我正在努力通过 WhatsApp 分享 Base64 图像 在 iOS 和 Android 中 共享的是实际的基数 64 而不是图像 如果我使用 iMessage 或电子邮件 iOS base64 图像将按预期转换并显示 在 Andro
  • 使用内嵌引号将 JSON 导入到 R 中

    我正在尝试将以下 JSON 文件 my file json 读入 R 其中包含以下内容 id 484 comment They call me Bruce 使用 jsonlite 包 0 9 12 出现以下错误 library jsonli
  • Actionbarsherlock searchview:setOnQueryTextListener

    我正在尝试使用 ActionBarSherlock 的搜索视图在列表中创建一个过滤器 我目前拥有的代码如下 Override public boolean onCreateOptionsMenu final Menu menu getSup
  • 二变量多项式的霍纳规则

    霍纳规则用于简化在特定变量值下评估多项式的 过程 https rosettacode org wiki Horner 27s rule for polynomial evaluation Standard ML 我已经使用 SML 轻松地将