使用N-1维数据X,我想在K个三次B样条曲线上计算每个点。在R中,有一个简单的函数和一个直观的API,叫做。实际上有一个python包patsy,它是的,但是我不能使用这个包--只有scipy之类的。
浏览了与样条函数相关的scipy.interpolate文档后,我能找到的最接近的是BSpline或BSpline.basis_element,但是如何获得K基函数对我来说完全是个谜。我尝试了以下几种方法:
import numpy as np
import scipy.interpolate as intrp
import matplotlib.pyplot as plt
import pat
我感兴趣的是创建一个函数导数,它返回一个函数,这个函数是在某个时刻传递给它的某个函数的导数。但是,我希望能够对此进行专门化,以便对于特定的函数,我可以返回分析解决方案。
所以,我正在寻找这样的东西:
auto Derivate(alias Function)(x)
{ return (Function(x+h) - Function(x-h))/(2h);}
auto Derivate(BSpline!(k)(x))(x)
{ return k * BSpline!(k-1)(x) + x * BSpline!(k-1)(x); }
但是,我目前的BSpline是这样定义的:
pure Re
我在用D创建一个有效的模板时遇到了问题:
pure T BSpline(int k:1, T)(in T x, in T[] t)
{
if (t[0] <= x && x < t[k])
return 1;
else
return 0;
}
pure T BSpline(int k, T)(in T x, in T[] t)
{
if (t[0] <= x && x < t[k])
{
T a = (x - t[0]) / (t[k-1] - t[0]);
为什么在使用相同的CMakeLists文件运行点云库教程中的“对无序点云的贴切B样条”示例时,我会收到以下错误?
PCL : 1.7.1(compiled from source at /usr/local/include/pcl-1.7.1/pcl/)
OS : Ubuntu 12.04
CMakeFiles/bspline_fitting.dir/Bspline.cpp.o: In function `main': Bspline.cpp:(.text+0x282):`
如果只知道点和系数,怎么能创建样条呢?我在这里使用scipy.interpolate.BSpline,但也对其他标准包开放。所以基本上,我想给一个人一个简单的系数数组,让他们能够重新建立数据的拟合。请看下面失败的红色虚线。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import BSpline, LSQUnivariateSpline
x = np.linspace(0, 10, 50) # x-data
y = np.exp(-(x-5)**2/4) # y-data
# de
我在NumPy数组knots中有一个三次样条的节点序列,我想有效地计算一个完整的三次BSpline基,它是由某个点的节点数组表示的。我目前所做的是使用SciPy scipy.interpolate.BSpline类构建基础:
from scipy.interpolate import BSpline
def bspline_basis(knots):
return [
BSpline.basis_element(knots[i:(i+5)], extrapolate=False)
for i in range(len(knots) - 4)
]
我在matlab上遇到了一些麻烦。我在用B样条。有时我想使用实际样条,而另一些时候我只想使用所谓的基函数。在不深入b样条理论的情况下,实际的区别是,当我想使用b样条时,我需要一个额外的方法和性质。我希望通过在构造函数中传递该属性来初始化该属性。
到目前为止(删除了大多数无关的方法和属性),我希望能够粗略地展示我想要的行为:
B样条。m:
classdef bsplinespace < handle
properties
p % polynomial degree
end
methods
function result = bspl
我对此很陌生,并尝试用统一的B样条实现这个算法.我不知道我在哪里做错了,结果就是没有达到预期的结果。
我不知道基础是错误的还是PIA的程序是错误的。有人能帮我吗?非常感谢!
我使用Python来实现所有这些。
根据我的理解,PIA首先以给定的点集P作为控制点(迭代0),并使用这些控制点计算b样条,Q,然后找到P和Q之间的差值d,让Q+d在每次迭代中,直到d足够小,作为你在开始设定的阈值。
我使用deboor-Cox算法生成基矩阵.
def b_spline_basis(i, p, u, nodeVector):
# p means the degree of the spline
我想模仿Excel平滑风格在R中使用ggplot2和绘图。 套餐 library(dplyr)
library(tibble)
library(ggplot2)
library(plotly)
library(ggforce) #only for geom_bspline() in example below (other smoothing functions can be used)
library(scales) #only for percent() formatting below 示例数据集 df <- tibble(Group = rep(LETTERS[1:2], e
这是我第一次使用BSpline,我想要将曲线拟合到我的数据点。我已经尝试过使用单变量样条线,并尝试使用splev和splrep,但我真的很想学习如何使用BSpline来做到这一点。
看起来我的拟合真的很不稳定,这条线甚至没有通过这些点。
arraymagU = linspace(U_timeband.min(),U_timeband.max(),300) #array for my x data points
UfunctionBS = BSpline(U_timeband,U_magband,k=4,extrapolate=False)
arraymagU2 = UfunctionBS(ar
我需要通过一些点绘制一条平滑的曲线,然后将其显示为SVG路径。所以我用scipy.interpolate创建了一个B-Spline,并且可以访问一些我认为完全定义它的数组。有人知道从这些数组中创建Bezier曲线的一种相当简单的方法吗? import numpy as np
from scipy import interpolate
x = np.array([-1, 0, 2])
y = np.array([ 0, 2, 0])
x = np.r_[x, x[0]]
y = np.r_[y, y[0]]
tck, u = interpolate.splprep([x, y], s=0
假设我有一个这样的设置:
namespace hi {
template<typename L, typename R> L operator+(L l, R r) {
// some body
}
auto f() {
return [] {}; // Legal C++14
}
}
int main() {
auto x = hi::f();
1 + x; // Is this legal?
}
问题是lambda类型上的ADL是否会根据标准找到该命名空间中的重载运算符。
我需要评估蟒蛇的b样条。为了做到这一点,我编写了下面的代码,它运行得非常好。
import numpy as np
import scipy.interpolate as si
def scipy_bspline(cv,n,degree):
""" bspline basis function
c = list of control points.
n = number of points on the curve.
degree = curve degree
"&