Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的三维样条曲线_Python_Matlab_Scipy_Curve Fitting_Spline - Fatal编程技术网

Python的三维样条曲线

Python的三维样条曲线,python,matlab,scipy,curve-fitting,spline,Python,Matlab,Scipy,Curve Fitting,Spline,我正在寻找一个函数,模仿MATLAB的曲线拟合工具箱,适用于三维空间的点。我发现的最接近的函数是,它能够计算三维空间,但由于数据点较少而失去了准确性。如果平滑度降低到拟合点的程度,则曲线会出现扭曲 我有一个由物理点(高程数据)组成的离散数据集,我希望对其进行建模,因此样条曲线必须通过这些点。在彼此不同的弦长上有有限数量的点 下面是我为测试Python样条线而编写的快速测试函数的示例。不幸的是,我无法共享我的MATLAB代码,但是cscvn函数平滑地进行样条拟合,并通过所有数据点 import s

我正在寻找一个函数,模仿MATLAB的曲线拟合工具箱,适用于三维空间的点。我发现的最接近的函数是,它能够计算三维空间,但由于数据点较少而失去了准确性。如果平滑度降低到拟合点的程度,则曲线会出现扭曲

我有一个由物理点(高程数据)组成的离散数据集,我希望对其进行建模,因此样条曲线必须通过这些点。在彼此不同的弦长上有有限数量的点

下面是我为测试Python样条线而编写的快速测试函数的示例。不幸的是,我无法共享我的MATLAB代码,但是
cscvn
函数平滑地进行样条拟合,并通过所有数据点

import scipy as sp
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import splprep, splev, interp2d

x = np.linspace(0, 10, num = 20)   #list of known x coordinates
y = 2*x   #list of known y coordinates
z = x*x   #list of known z coordinates
## Note: You must have more points than degree of the spline. if k = 3, must have 4 points min.

print([x,y,z])

tck, u = splprep([x,y,z], s = 26)  # Generate function out of provided points, default k = 3
newPoints = splev(u, tck)          # Creating spline points
print(newPoints)

ax = plt.axes(projection = "3d")
ax.plot3D(x, y, z, 'go')     # Green is the actual 3D function
ax.plot3D(newPoints[:][0], newPoints[:][1], newPoints[:][2], 'r-')   # Red is the spline
plt.show()
下面是一个多点创建平滑曲线(红色)的示例,但该线与物理数据点(绿色)不对齐

以下是由太少的数据点(绿色)创建的样条曲线(红色)中的扭结示例。这与我的数据集看起来更相似

将U更改为:


unew=np.arange(0,1.00,0.005)

欢迎来到StackOverflow,到目前为止您做了什么?你能分享你的代码吗?我添加了一些额外的代码detail@SardarUsama代码以文本形式共享