问题标签 [cubic-spline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
computer-vision - 三次样条/曲线拟合
我需要确定照明变化的参数,它由这个连续分段多项式 C(t) 定义,其中 f(t) 是由两个边界点 (t1,c) 和 (t2,0) 定义的三次曲线),也 f'(t1)=0 和 f'(t2)=0。 原始论文:纹理一致的阴影去除
强度曲线是从阴影边界上的法线采样的,它看起来像这样:
每一行都是样本,显示光照变化。所以 X 是列数,Y 是像素强度。
我有这样的真实数据(一个样本来自所有样本):
我有 N 个样本,我需要确定参数 (c,t1,t2)
我该怎么做?
我试图通过在 Matlab 中求解线性方程来做到这一点:
avr_curve 是平均曲线,通过对所有样本进行平均获得。
f(x)= x^3+a2*x^2+a1*x1+a0 是三次函数
[t1 t2] 上 avr_curve 的一部分
我得到的三次曲线(看起来不像 avr_curve)
所以我做错了什么?
更新: 似乎我的错误是由于我使用 3 个变量对三次多项式进行建模,如下所示:
但后来我使用了 4 个变量,一切似乎都很好:
Matlab中的代码如下:
区间 [t1-1 t2+1] 上的样条
并且全间隔
python - 如何计算 python 的 interpolate.splrep 中使用的平滑条件?
我正在尝试使用 scipy's 将三次样条拟合到时间序列中interpolate.splrep
。但是,如果不通过肉眼手动调整,我无法确定如何确定有效的平滑条件。似乎应该有一种方法来计算这个条件。
根据文档,平滑条件应以这种方式确定:
s 的推荐值取决于权重 w。如果权重表示 y 的标准差的倒数,则应在 (m-sqrt(2*m),m+sqrt(2*m)) 范围内找到一个好的 s 值,其中 m 是x、y 和 w 中的数据点。默认值:如果提供了权重,则为 s=m-sqrt(2*m)。如果没有提供权重,s = 0.0(插值)。
但是,经过大量测试,我无法让它工作(平滑不为零)。“拟合”通常最终看起来像一个任意的 3 次多项式。我正在处理一个数据集,该数据集在正确拟合时应该是一个高度多项式。仅仅通过摆弄平滑条件,我发现 s = 1E-9 可以很好地平衡接近度和平滑度(我正在对数据使用权重)。
有谁知道发生了什么?
我使用三次样条曲线而不是其他插值方法是有原因的,但我想知道我是否应该寻找其他地方......
function - 插值后的近似函数
你如何逼近插值点的函数?我使用自然三次样条对 n = 500 个点进行如下插值:
有什么方法可以近似这些 n 点的函数(对于大 n)?或者有没有办法将插值点视为一个函数,即找到 zn 向量的梯度?因为 zn 是一个常量向量,所以这不一定有用。
更新:特别是,我的数据似乎形成了一个二次多项式,所以我继续使用以下 Matlab 函数来拟合我的数据:
这会产生二次多项式的系数估计值。它确实适合数据,但误差值很高,我必须将此系数向量乘以向量 [1 zz^2] 以获得正确的多项式。有没有办法简化这个?
python - 使用三次样条插值
所以这是我到目前为止插入一组数据的代码,我已经做到了这一点,但我被告知我有一个“整数除法或模数为零”,我玩过它,但我找不到我的错误。
cubic-spline - 切线为零的 1D Hermite Cubic Splines - 如何使其看起来更平滑
我得到 3 个值y0
, y1
, y2
. 它们应该是均匀分布的,例如x0 = -0.5
, x1 = 0.5
, x2 = 1.5
。并且为了能够通过所有这些绘制样条曲线,所有点的导数都被称为dy/dx = 0
。
现在渲染两个 Catmull-Rom-Splines 的结果(通过 GLSL 片段着色器完成,包括非线性变换)看起来相当严格。即,在曲线弯曲的地方,它确实很平滑,但是弯曲区域非常小。缩小会使弯曲看起来太尖锐。
我想切换到 TCB-Splines(又名 Kochanek-Bartels Splines),因为它们提供了张力参数——因此我希望我可以平滑外观。但我意识到所有应用于零切线的 TCB 参数都没有任何好处。
有什么想法可以让我获得更平滑的曲线吗?
matlab - 如何在 Matlab 中求解具有 3 个未知系数的方程?
我有这个三次样条函数:
我想实现一个简单的函数,给这个函数,它确定系数 k1,k2 和 k3,但我不能这样做..
有人有想法吗?
javascript - 在 javascript 中渲染 b 样条动画的问题
我编写了一个函数来计算 b 样条曲线的点,在使用内置setinterval()
函数生成点时在屏幕上绘制曲线。问题是当这些点被绘制到屏幕上时,只有曲线的一部分或一小段可见沿着插值曲线移动,但整个曲线在绘制曲线时不会持续存在。除此之外,一旦到达某个点,曲线就会离开屏幕。代码看起来是这样设计的,一旦 t 的值达到 1,函数就会结束(即间隔将被清除),但由于某种原因,函数继续被调用,导致曲线继续被动画化离屏。
相反,我有另一个函数,它简单地使用一个 for 循环来绘制具有相同点的曲线,但是使用这个函数绘制一次小曲线,清楚地适合屏幕。下面是这两个函数的代码:
matlab - 如何在matlab中生成自然样条?
我注意到Matlab中只有not-a-knot和clamped spline,它们是在函数spline中组装的。我们可以稍微改变一下matlab中的原始代码,让它可以执行(或只执行)自然样条吗?我觉得这是一项简单的任务,因为我们只需要更改额外的两个参数自由度,这样就可以满足在端点处具有零二阶导数。但盯着样条的代码我不知道如何进行。谁能帮我吗?
r - 如何使用 na.spline() 防止外推
我na.spline()
在使用包中的功能时遇到问题zoo
。尽管文档明确指出这是一个插值函数,但我得到的行为包括外推。
以下代码重现了该问题:
这个的输出应该是:
这将是内部 NA 的插值,将尾随 NA 留在原处。但是,相反,我得到:
根据文档,这不应该发生。有什么方法可以避免外推吗?
我认识到在我的示例中,我可以使用线性插值,但这是一个 MWE。虽然我不一定会使用 na.spline() 函数,但我需要一些方法来使用三次样条进行插值。