Python/SciPy:如何从 CubicSpline 获取三次样条方程

2023-11-21

我正在通过给定的一组数据点生成三次样条曲线图:

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

x = np.array([1, 2, 4, 5])  # sort data points by increasing x value
y = np.array([2, 1, 4, 3])
arr = np.arange(np.amin(x), np.amax(x), 0.01)
s = interpolate.CubicSpline(x, y)
plt.plot(x, y, 'bo', label='Data Point')
plt.plot(arr, s(arr), 'r-', label='Cubic Spline')
plt.legend()
plt.show()

How can I get the spline equations from CubicSpline? I need the equations in the form:

我尝试了各种方法来获取系数,但它们都使用通过数据点以外的不同数据获得的数据。


From 文档:

c(ndarray, shape (4, n-1, ...)) 每段多项式的系数。尾部尺寸与以下尺寸相匹配y, 不包括轴。例如,如果y是 1-d,那么c[k, i]是一个 系数为(x-x[i])**(3-k)在之间的段上x[i] and x[i+1].

So in your example, the coefficients for the first segment [x1, x2] would be in column 0:

  • y1 would be s.c[3, 0]
  • b1 would be s.c[2, 0]
  • c1 would be s.c[1, 0]
  • d1 would be s.c[0, 0].

Then for the second segment [x2, x3] you would have s.c[3, 1], s.c[2, 1], s.c[1, 1] and s.c[0, 1] for y2, b2, c2, d2, and so on and so forth.

例如:

x = np.array([1, 2, 4, 5])  # sort data points by increasing x value
y = np.array([2, 1, 4, 3])
arr = np.arange(np.amin(x), np.amax(x), 0.01)
s = interpolate.CubicSpline(x, y)

fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.plot(x, y, 'bo', label='Data Point')
ax.plot(arr, s(arr), 'k-', label='Cubic Spline', lw=1)

for i in range(x.shape[0] - 1):
    segment_x = np.linspace(x[i], x[i + 1], 100)
    # A (4, 100) array, where the rows contain (x-x[i])**3, (x-x[i])**2 etc.
    exp_x = (segment_x - x[i])[None, :] ** np.arange(4)[::-1, None]
    # Sum over the rows of exp_x weighted by coefficients in the ith column of s.c
    segment_y = s.c[:, i].dot(exp_x)
    ax.plot(segment_x, segment_y, label='Segment {}'.format(i), ls='--', lw=3)

ax.legend()
plt.show()

enter image description here

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

Python/SciPy:如何从 CubicSpline 获取三次样条方程 的相关文章

随机推荐

  • 运行时 Autofac 绑定

    我目前使用 Autofac 进行简单的构造函数注入 没有任何问题 然而我想知道的是如何在运行时解决依赖关系 下面的示例显示了导出文档的多种方式 通过简单的构造函数注入 IExport 的具体实现在运行时得到解决 但是 需要做的是解析下拉列表
  • sklearn:如何加速矢量化器(例如Tfidfvectorizer)

    在彻底分析我的程序之后 我已经能够确定它被矢量化器减慢了 我正在处理文本数据 两行简单的 tfidf 一元向量化占用了代码执行总时间的 99 2 这是一个可运行的示例 这会将 3mb 的训练文件下载到您的磁盘 省略 urllib 部分以在您
  • 将参数从jsp传递到Spring Controller方法

    我正在使用 Hibernate 的 Spring MVC 应用程序中工作 在 JSP 页面中 我有一个函数列出数据库中存储的值 当前是所有值 我写了一个方法 其中列表仅限于 JSP 文件中传递的 ID 我的 HQL 查询工作正常 所以我知道
  • 值reduceByKey不是org.apache.spark.rdd.RDD的成员

    很伤心 我的spark版本是2 1 1 Scala版本是2 11 import org apache spark SparkContext import com mufu wcsa component dimension Dimension
  • jQuery 滚动到页面底部

    当您单击某个链接时 我使用以下内容滚动到页面顶部 myLinkToTop click function html body animate scrollTop 0 slow return false 我想创建另一个滚动到页面底部的链接 以下
  • 如何选择 maven-gpg-plugin 用于签署工件的 GnuPG 密钥?

    我正在使用 maven gpg plugin 来签署 Maven 工件 这工作正常 但我的 GnuPG 密钥环中有几个密钥 并且想要使用与 GnuPG 选择的密钥不同的密钥 如果有多个键 GnuPG 如何选择 默认 键 是否可以指定在 ma
  • Play 2.0 框架,使用带有经过身份验证的请求的 BodyParser

    我希望能够在经过身份验证的请求上使用 BodyParser 但如果我的身份验证像 ZenTasks 示例那样设置 我很难弄清楚如何做到这一点 我的验证方法 def IsAuthenticated f gt String gt Request
  • 我可以将 Eclipse 设置为忽略“未处理的异常类型”吗

    是否有可能让 Eclipse 忽略错误 未处理的异常类型 在我的具体情况下 原因是我已经检查过该文件是否存在 因此我认为没有理由放入 try catch 语句 file new File filePath if file exists Fi
  • Ant 替换属性文件中的令牌

    我想用 Ant 替换源文件中的标记 some test foo other text 令牌包含在属性文件中 例如 foo 1 实际上 如果源文件中的标记类似于 foo 或 foo 那么这很容易 但我无法替换整个标记 foo 几年前我成功了
  • 如何在python中查找文件系统类型

    我正在 python 中寻找一种方法来找出给定路径使用哪种类型的文件系统 我想以跨平台的方式做到这一点 在linux上我可以抓取输出df T但这不适用于 OSX 或 Windows 请注意 不同的平台实际上是不同的 Use lsvfs在 M
  • 我可以将 MySQL 时间戳与日期时间列进行比较吗?是不是很糟糕?

    因此 我有一个表 其中列 ABC 是时间戳 BCD 是日期时间 如果我这样做 SELECT FROM myTable WHERE ABC gt BCD 是不是很糟糕 会影响性能吗 它们在性能方面如何比较 是的 您可以比较datetime w
  • ng-class 不会触发自定义指令

    我目前正在开发一个滑动菜单指令对于 AngularJS javascript 由三种类型的指令组成 每种类型的滑动菜单的指令 为简洁起见 我只包含左侧滑动菜单 一个用于屏幕其余部分的包装器指令 asm包装器 和一个控制按钮指令 汇编控制 目
  • android 是否有向 Google keep 添加数据的意图

    android 是否有向其中添加数据的意图谷歌保留 可以通过新的 Intent Intent ACTION SEND 实现 有一种技术可以通过编程方式选择适当的应用程序 而不是显示可能性 测试
  • Grails GGTS IDE GrailsProcessDiedException:Grails 进程终止

    我在 GGTS IDE 上遇到了以下奇怪的异常 Command terminated with an exception org grails ide eclipse longrunning client GrailsProcessDied
  • C++20 概念:元素可迭代概念

    我正在尝试创造一个概念ElementIterable它可以确定类型是否是嵌套范围 例如 中的元素std vector
  • 0x9d 在什么 8 位字符集中有意义?

    英语的 8 位类似 ASCII 的字符集是什么0x9d有意义吗 我正在清理一些旧的数据文件 偶尔会发现0x9d在其他 ASCII 文本中 不 这不是 UTF 8 它在 Windows 1252 中无效 Python latin 1 编解码器
  • 如何在 iPhone sdk 中创建 Excel 工作表和文件?

    我想生成应用程序来在 iPhone sdk 中创建 excel 文件 任何人都可以建议我创建它 嗯 对的人看到了你的帖子 SourceForge 上有一个开源 C 库 xlslib 这将完全满足您的需要 但是等等 还有更多 有一个 Obje
  • 限制访问 Web ASP .NET 应用程序的用户数量

    如何限制 Web 应用程序的用户数量 您可能希望将 Web 应用程序限制为一次仅处理 20 个用户 我们公司销售基于多个许可证的应用程序 但我们不确定网络应用程序中的行为是什么 我看到一些建议说 当用户登录时 您可以将用户帐户标记为 Log
  • android logcat中的致命信号6是什么[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我是 Android 开发新手 我的应用程序在从 Activity 切换 11 次时不断被终止 而且它只说 致命信号 6 SIGABRT tid 9485 中的代码 6 Thre
  • Python/SciPy:如何从 CubicSpline 获取三次样条方程

    我正在通过给定的一组数据点生成三次样条曲线图 import matplotlib pyplot as plt import numpy as np from scipy import interpolate x np array 1 2 4