这个问题既是编程的一半,也是数学的一半。我想通过一条曲线对点集进行插值,而又不添加不必要的极值,而这些极值保持“接近线性插值”,同时保持一条看起来平滑的曲线。我知道这种表述是模糊的,但是我希望通过一个例子可以使它更加清楚。让我们看一下下面的html" target="_blank">代码和结果:
#! /usr/bin/python
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
list_points=[(-3,0.1),(-2,0.15),(0,4),(2,-6),(4,-2),(7,-0.15),(8,-0.1)]
(xp,yp)=zip(*list_points)
fun=interp1d(xp,yp,kind='cubic')
xc=np.linspace(min(xp),max(xp),300)
plt.plot(xp,yp,'o',color='black',ms=5)
plt.plot(xc,fun(xc))
fun2=interp1d(xp,yp,kind='linear')
plt.plot(xc,fun2(xc))
plt.show()
我本来希望只有两个极值(大约x〜0和x〜2)的插值,而这里我们有5个极值。如果我们要求他们手工绘制一条平滑曲线的点,这就是大多数人会画的图。有没有一种方法可以达到这个目的(在python中)。
更新:请注意,xfig的内容很接近(称为“近似样条图”),其不便之处在于曲线不能精确地通过指定点。我希望曲线能精确地通过指定点,但是如果没有人知道更好的解决方案,我会欢迎使用xfig方法。
虽然不完全相同(?),但您的问题与此类似,因此相同的答案可能会很有用。您可以尝试单调插值器。该PchipInterpolator类(您可以通过它的短别名参考pchip
)中scipy.interpolate
都可以使用。这是脚本的一个版本,pchip
其中包含使用include创建的曲线:
import numpy as np
from scipy.interpolate import interp1d, pchip
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
list_points = [(-3,0.1),(-2,0.15),(0,4),(2,-6),(4,-2),(7,-0.15),(8,-0.1)]
(xp,yp) = zip(*list_points)
fun = interp1d(xp,yp,kind='cubic')
xc = np.linspace(min(xp),max(xp),300)
plt.plot(xp,yp,'o',color='black',ms=5)
plt.plot(xc,fun(xc))
fun2 = interp1d(xp,yp,kind='linear')
plt.plot(xc,fun2(xc))
p = pchip(xp, yp)
plt.plot(xc, p(xc), 'r', linewidth=3, alpha=0.6)
plt.show()
它生成的图如下所示。
我有以下Mongoose查询: 这是可行的,但会增加很多重复的值。我只想插入唯一的值。我该怎么做?
你好,我正在创建一个游戏,它有分数,我需要使点被添加和更改setText. 我在转换时遇到了问题,因为我在字符串中获取文本值,对其求和会产生错误。 错误:不兼容的类型:int无法转换为String错误:不兼容的类型:String无法转换为int错误:二进制运算符的坏操作数类型'第一种类型:int第二种类型:TextView
我有一个已经预先输入值的hashmap,并且我正在从用户那里获取更多的值。然后按升序对这些值进行排序。但是在这段代码中,用户输入的值不会插入到HashMap中。 我创建了一个名为adduser()的方法,我调用它来添加新值。但它不能输入数据。我该怎么解决这个?
您好,我是firebase firestore的新手,无法将对象直接添加到集合中查看图像错误结果和预期结果 尝试 它在余额集合下创建一个新文档,但我需要它的Object值直接在余额集合中
我想在单个产品页面中向“添加到购物车”按钮显示产品价值(版本) 我找到了必须编辑的文件:woocommerce\templates\single-product\add-to-cart\external.php 但现在我的“添加到购物车”按钮上什么也没有显示
问题内容: 我有一个BaseActivity,其他所有活动都可以对其进行扩展。关键是,每当用户离开活动时,我都会将音乐静音。我也停止听电话。 问题是,只要用户在活动之间进行切换,就会被调用,这意味着该应用程序不必要地静音和停止,即使仅当用户离开该应用程序时该静音也应该停止。 现在说我在和之间切换。即使我只想 在用户离开应用程序时* 被调用,此开关也 不必要 执行。我该怎么办? * 感谢您的专家意见