gpt4 book ai didi

python - 如何在样条插值的所有数据点处设置导数零约束?

转载 作者:行者123 更新时间:2023-12-04 01:55:12 26 4
gpt4 key购买 nike

scipy 中是否有任何样条插值方法,我可以在其中对每个数据点的导数使用约束?我找到了一个“scipy.interpolate.PiecewisePolynomial”,但 PiecewisePolynomial 类已被弃用。

最佳答案

是的。

scipy.interpolate 中的BPoly 类有一个构造方法

a piecewise polynomial in the Bernstein basis, compatible with the specified values and derivatives at breakpoints.

scipy 引用中所述,here .

Python3 的基本用法如下:

from numpy import linspace, sin, pi
from scipy.interpolate import BPoly, CubicSpline

xi = linspace(0, pi, 5)
xnew = linspace(0, pi, 50)

yi = sin(xi)
ynew = sin(xnew)
yder = [[yi[i], 0] for i in range(len(yi))]

cubic = CubicSpline(xi, yi)
bpoly = BPoly.from_derivatives(xi, yder)

y_bpoly = bpoly(xnew)
y_cubic = cubic(xnew)

解释

此程序为 senoid 的第一个半周期创建两个样条插值,一个使用 CubicSpline 类,一个使用 from_derivatives 方法BPoly 类,在原始曲线的每个点将导数设置为0

此方法的主要问题是,除非您指定每个点的导数,否则该算法不能保证平滑过渡。然而,衍生品在指定的点上得到保证。尽管如此,这应该不会出现问题,因为您正在寻找的是在每个点将导数设置为 0

情节

使用下面的方法你可以正确地看到不同的结果,如最后的图片所示:

import matplotlib.pyplot as plt

plt.figure()
plt.plot(xnew, y_bpoly, '-g', xnew, ynew, '--c', xnew, y_cubic, '-.m', xi, yi, '*r')
plt.legend(['BPoly', 'True', 'Cubic', 'Points'])
plt.title('Spline interpolation')
plt.grid()
plt.show()

Plot using pyplot

关于python - 如何在样条插值的所有数据点处设置导数零约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com