二变量多项式的霍纳规则

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(使用前将#替换为@)

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

  • 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 谁能解释一下这
  • F# 检查列表是否为空

    作为 F 新手 我正在尝试实现一个简单的函数 该函数将索引和列表作为参数 然后返回给定索引的列表值 let rec getElementAtIndex index int list a list match index list with
  • 如何在不改变也不重新分配的情况下实现可设置和可检索的状态?

    编写代码时可以遵循以下几条规则 当没有重新分配时 代码更容易阅读和推理 许多 linter 推荐首选const只要有可能 代码也更容易阅读和推理对象何时不会发生变化 如果您在代码的一部分中定义了一个对象 那么知道您可以在其他地方自由引用该对
  • 你为什么决定“反对”使用 Erlang?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 你是否真的 尝试过 意味着在其中编程 而不仅仅是阅读有关它的文章 Erlang并决定在项目中不
  • 如何在对象的多个方法上使用 functools.partial 并无序冻结参数?

    我发现 functools partial 非常有用 但我希望能够无序地冻结参数 您想要冻结的参数并不总是第一个 并且我希望能够将其应用于多个一次在类上使用方法 以创建一个代理对象 该对象具有与底层对象相同的方法 除了它的一些方法参数被冻结
  • duckmap 到底有什么作用?

    From 文档 https docs perl6 org routine duckmap duckmap将会应用 block每个元素上并返回一个新列表 其中包含块的已定义返回值 对于未定义的返回值 duckmap如果该元素实现了 将尝试下降
  • Scala 函数定义参数列表中不同的括号样式

    Scala 中以下两个函数定义有什么区别 1 def sum f Int gt Int a Int b Int Int code 2 def sum f Int gt Int a Int b Int Int code SBT 的控制台 RE
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • 如何使用 rxpy/rxjs 延迟事件发射?

    我有两个事件流 一个来自电感环路 另一个来自网络摄像机 汽车将驶过环路 然后撞上相机 如果事件彼此相差在 N 毫秒内 汽车总是会首先进入循环 我想将它们组合起来 但我也希望每个流中不匹配的事件 硬件可能会失败 全部合并到单个流中 像这样的事
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel
  • 检查对象是否是字符串列表的列表?

    是什么elegant检查对象是否是字符串列表列表的方法 没有嵌套循环 也许这里必须是构造结构化迭代的常规方法 UPD 像这样的东西 l a b c d 1 3 e 2 f def recurse iterable levels result
  • 在 JavaScript 中将函数映射到生成器上

    我有一个名为generateNumbers在 JavaScript 和另一个生成器中generateLargerNumbers它采用由生成的每个值generateNumbers并应用一个函数addOne对其而言 如下 function ad
  • 根据类的类型参数在方法中使用 Poly1 映射到 HList

    我有类 参数化为HList和其他一些类型 我该如何使用map on HList在其方法之一中 编译此代码会抛出java lang AssertionError class Test L lt HList P l L p P type Con
  • Haskell 真的是纯粹的吗(有任何语言可以处理系统外的输入和输出)吗?

    在谈到函数式编程中的 Monad 后 该功能是否真的使语言变得纯粹 或者它只是黑板数学之外的现实世界中计算机系统推理的另一张 免狱卡 EDIT 这不是有人在这篇文章中所说的火焰诱饵 而是一个真正的问题 我希望有人能用它来击倒我并说 证明 它
  • 函数式编程是否避免了状态?

    根据维基百科 http en wikipedia org wiki Functional programming 函数式编程是一种编程范式 它将计算视为数学函数的评估避免状态和可变数据 强调我的 这是真的吗 我个人的理解是 它使状态更加明确
  • 如何向 Scotty 中间件添加基本身份验证?

    我目前正在制作 Scotty API 但找不到任何 basicAuth 实现的示例 Wai Middleware HttpAuth 具体来说 我想将基本身份验证标头 用户 通行证 添加到我的某些端点 即以 admin 开头的端点 我已经设置
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • C# 中我们需要定点组合器吗?

    我在 C 中使用递归 lambda 并在网络上找到了两种执行此操作的方法 一种方法使用定点组合器 http en wikipedia org wiki Y combinator而另一个则没有 在下面的代码中 f1是使用组合器构建的 f2是直
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将

随机推荐

  • 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 轻松地将