牛顿差分插值法的正确递归python实现,获取递归内的一些返回值

2024-01-20

我用Python编写了一个递归函数来评估一个序列插值法 http://en.wikipedia.org/wiki/Divided_differences#Definition.

下图对此进行了图形化解释:

f[x]=f(x) and f[x0,x1]= f[x1]-f[x0]) / (x1 - x0)所以当f[x0,x1,...xn]=f[all_leastFirst,allbutLast] / xlast-xfirst.

这就是递归。

我得到了以下代码:

xxs=[]
yys=[]
coeficientes = []
h = {}
r = 0.0

def a_j(xx,yy):
    global r
    if len(yy) == 1:
        h[xx[0]] = yy[0]
        return yy[0]
    else:
        r = (a_j(xx[1:],yy[1:])  - a_j(xx[:-1],yy[:-1])) / (xx-1]-xx[0])
        h[''.join(str(i) for i in xx[::-1])]=r
        coeficientes.append(r)
        return ( r )

但需要获取一个数组作为输出仅限绿色圆圈中标记的数字。我不知道如何在递归实现中只获取那些。 他们的一个常见模式是他们总是从X_0,所以我选择标记它们或使用字典可能会有所帮助。

预期结果是:

[1,1.71828,1.47625,.84553]

我正在获得:

[1, 2.71828, 7.3890599999999997, 20.085540000000002, 1.71828, 4.6707799999999997, 12.696480000000001, 1.4762499999999998, 4.0128500000000003, 0.84553333333333347]

再跑一次如果通过以下方式调用,则具有不同的参数:

a_j([1,2,3,5][4,3.5,4,5.6])

应该输出:

[4,-0.5,0.5,-0.1]

我正在获得:

[4, 3.5, 4, 5.6, -0.5, 0.5, 0.5, 0.7999999999999998, 0.09999999999999994, -0.10000000000000002]

另一个例子:

a_j([-2,-1,0,1,2], [13,24,39,65,106])

将输出:

[13, 24, 39, 65, 106, 11, 15, 2, 26, 5, 1, 41, 7, 0, -1]

但输出应该是:

[13,11,2,1.167,-0.125]

我也成功地编写了这个代码迭代实施,即已经正确了:

diferencias = {}
coeficientes = []

def sublists_n(l, n):
    subs = []
    for i in range(len(l)-n+1):
        subs.extend([l[i:i+n]])
    return subs

def sublists(l):
    subs = []
    for i in range(len(l)-1,0,-1):
        subs.extend(sublists_n(l,i))
    subs.insert(0,l)
    return subs[::-1]


def diferenciasDivididas(xx,yy,x):

    combinaciones = sublists([i for i in range(len(xx))])

    for c in combinaciones:

        if len(c) == 1:
            diferencias[str(c[0])]= float(yy[c[0]])
            if c[0] == 0:
                coeficientes.append(float(yy[c[0]]))

        else:
            c1 = diferencias.get(''.join(str(i) for i in c[1:]))
            c2 = diferencias.get(''.join(str(i) for i in c[:-1]))

            d = float(( c1 - c2 ) / ( xx[c[len(c)-1]] - xx[c[0]] ))

            diferencias[''.join(str(i) for i in c)] = d

            if c[0] == 0:
                coeficientes.append(float(d))

我只是想知道我错过了什么?


我对脚本做了一些修改。

    array=[]
    r='s'
    s=0
    def a_j(xx,yy):
        global r,s
        if r == 's':
            s=xx[0]
            r=0.0
        if len(yy) == 1:
            if xx[0]==s: array.append(yy[0])
            return float(yy[0])

        else:
            r=( a_j(xx[1:],yy[1:])  - a_j(xx[:-1],yy[:-1])) / (xx[-1]-xx[0])
            if xx[0]==s: array.append(r)
            return float(r)

    a_j([1,2,3,5],[4,3.5,4,5.6])
    print array

输出: [4、-0.5、0.5、-0.10000000000000002]

另外,您给出的第二个示例看起来不正确。 a_j([-2,-1,0,1,2], [13,24,39,65,106]) --> [13,11,4,7,-3]

上面的答案说第三个元素是 4。

    3rd element means --> x(-2,-1,0) -> x(-1,0)  -  x(-2,-1)/(2)
                                     -> x(0)-x(-1)/1  -  x(-1)-x(-2)/(1) /(2)
                                     ->(39-24) - (24-13)   /(2)
                                     ->15-11/(2)
                                     ->4/2 =2

如果我错了,请纠正我。

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

牛顿差分插值法的正确递归python实现,获取递归内的一些返回值 的相关文章

  • django_openid_auth TypeError openid.yadis.manager.YadisServiceManager 对象不是 JSON 可序列化

    I used django openid auth在我的项目上 一段时间以来它运行得很好 但今天 我测试了该应用程序并遇到了这个异常 Environment Request Method GET Request URL http local
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 仅使用堆区域的递归

    是否有仅使用堆区域的递归示例 在 C 中 基于函数调用的递归总是使用堆栈 几乎按照定义 如果您愿意将递归转换为迭代 那么可以仅使用堆空间 但这并不是真正的递归 您可以通过在堆中实现堆栈来实现这一点 某些问题可以使用尾递归 http en w
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 将 matplotlib 颜色图集中在特定值上

    我正在使用 matplotlib 颜色图 seismic 绘制绘图 并且希望白色以 0 为中心 当我在不进行任何更改的情况下运行脚本时 白色从 0 下降到 10 我尝试设置 vmin 50 vmax 50 但在这种情况下我完全失去了白色 关
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 如何在 python 中没有 csv.reader 迭代器的情况下解析单行 csv 字符串?

    我有一个 CSV 文件 需要重新排列和重新编码 我想跑 line line decode windows 1250 encode utf 8 在由 CSV 读取器解析和分割之前的每一行 或者我想自己迭代行 运行重新编码 并仅使用单行解析表单
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x

随机推荐

  • 如何在android中使用volley下载视频文件?

    我想使用 volley 库下载视频 我正在使用 volley 库来处理应用程序中的所有网络调用 首先 我们需要创建一个扩展 Volley Request 类的自定义类 要下载文件数据 我们可以创建自定义字节数组请求 该字节数组可以转换为输入
  • 模板类的编译时计数器

    想象一下 您有很多带有很多不同模板参数的类 每个类都有一个方法static void f 你想将所有这些函数指针收集到一个列表 L 中 运行时解决方案很简单 typedef void p std vector p L int reg p x
  • AnTLR4 C# 中的解析树

    我目前正在使用针对 C 的 AnTLR4 创建语法 但在开发访问者时遇到问题 我找不到书中提到的 ParseTree 类 书中我们有 LabeledExprLexer lexer new LabeledExprLexer input Com
  • 只读 mutableStateListOf

    在 Jetpack Compose 中 如果我有MutableState变量 我可以将其状态公开为 只读 对其他类的价值为State
  • currentsessioncontext流畅nhibernate怎么办呢?

    我正在尝试根据请求使用流利的会话 我正在遵循 nhibernate 食谱中的 食谱 但它使用 nhibernate 配置文件 我不确定什么更好 但现在我坚持使用流畅的配置 只是因为我不知道如何设置 nhibernate 配置文件以使用流畅的
  • “gcloud app log tail”显示一周前的数据

    我正在尝试流式传输我的 Google Cloud Platform 应用程序的日志 我注意到的第一件事是 Google 每秒至少发送大约 10 次健康检查 所以我必须grep v health以获得任何有用的信息 这是标准吗 第二件事是它传
  • ASP.NET MVC 4 用户身份验证

    我正在尝试编写一个 Login 方法 对用户进行身份验证并授权他们进入使用 ASP NET MVC 4 开发的网站 问题是 尽管我在 Login 方法内验证用户并重定向到 ViewProfile 操作后调用 FormsAuthenticat
  • 使用 getline 跳过空格

    我正在编写一个程序来制作问题表格 这些问题被保存到一个文件中 我想读取它们并将它们存储在内存中 我为此使用向量 我的问题有以下形式 1 TEXT What is your name 2 CHOICE Are you ready for th
  • jQuery Isotope - 多个过滤器的问题

    我尝试在使用 Isotope js 的类似投资组合的页面中使用多个过滤器 请看一下这个页面 http decart design com avancia wp vi tilbyr http decart design com avancia
  • 为什么不能从一个表中删除引用另一个表

    我一直在寻找答案 但也许我错过了一些东西 我有 2 个表 如下所示 第一个表中的实体是从第二个表中引用的 但是当我尝试从第二个表中删除时 我得到Error foreign key mismatch 有触发器 此处未显示 但它们与DELETE
  • 将文件输入和标准输入传递给 gdb

    所以我想在 gdb 中运行一个程序 并将文件的内容作为参数 然后 当遇到 EOF 时 我希望能够再次输入用户输入 对于终端中的普通程序 我可以使用以下命令执行类似的操作 cat input txt cat program 在 gdb 中 我
  • 在java中从xml解码大型base64:OutOfMemory

    我需要将 xml 文件的 base64 编码元素写入单独的文件中 问题 文件的大小很容易达到 100 MB 我尝试的每个解决方案都以 java lang OutOfMemoryError Java堆空间 结束 问题不在于一般的读取xml或解
  • 如何在我的 Electron 应用程序中隐藏 API 密钥?

    我正在构建一个使用 Google 的 YouTube Data API v3 的 Electron 应用程序 为了访问 API 我决定使用标准 API 密钥 而不是 OAuth 因为我不会访问任何个人数据 但问题是 我无法在我的应用程序中隐
  • React Native Typescript路径别名无法解析模块

    所以基本上 我使用 RN 主页中的命令行创建了 React Native with Typescript npx react native init MyApp template react native template typescri
  • 什么时候应该调用 Fragment 的 onActivityCreated ?

    我在 ViewPager 中有一些片段 并且我找到了片段的onActivityCreated and onCreateView两者都在我预期之前在页面上被调用 例如 当ViewPager从第2页过渡到第3页时 那么第4页的Fragmento
  • IE11无法连接本地IIS,其他浏览器正常

    我正在使用 XIP IO 通配符域访问在本地 IIS 服务器上运行的网站 今天 IE 11 停止访问该网站 而 Chrome 和 Firefox 继续访问 它甚至可以在远程计算机上运行 所以我知道它与我的本地 IE 有关 我检查过没有代理设
  • 如何在r中一次创建数据框(不仅仅是一个)

    这是一个进一步的问题无序组合并将结果存储在 r 的矩阵中 https stackoverflow com questions 53604144 unordered combination and store the result in a
  • 将 Material-UI 的自动完成组件与 Formik 结合使用

    目前正在尝试使用 Material UI自动完成 https material ui com components autocomplete 与 Formik 的组件 到目前为止 诸如文本字段和来自 Material UI 的传统选择之类的
  • URL 重写在 Laravel 应用程序中编译的 CSS 文件中生成错误的 URL

    我尝试在 Laravel 应用程序中编译 Font Awesome SCSS 文件 Font Awesome 随 NPM 安装 编译后的 CSS 存储在 public css 文件夹中 还创建了 public fonts 文件夹 但编译后的
  • 牛顿差分插值法的正确递归python实现,获取递归内的一些返回值

    我用Python编写了一个递归函数来评估一个序列插值法 http en wikipedia org wiki Divided differences Definition 下图对此进行了图形化解释 f x f x and f x0 x1 f