Matlab隐式拟合三维数据点
我试图用圆柱体的隐式函数(5个参数:a、b、c、d、r)拟合3D数据点(>1000): 我找不到一个用Matlab实现的好方法(我对Matlab语法的了解还很肤浅)。使用显式函数肯定会容易得多。我已经在网上广泛搜索了一下,没有找到任何具体的答案 如果你知道一种直接拟合参数方程的方法,我也有使用相同参数的圆柱体的参数函数Matlab隐式拟合三维数据点,matlab,3d,curve-fitting,minimization,Matlab,3d,Curve Fitting,Minimization,我试图用圆柱体的隐式函数(5个参数:a、b、c、d、r)拟合3D数据点(>1000): 我找不到一个用Matlab实现的好方法(我对Matlab语法的了解还很肤浅)。使用显式函数肯定会容易得多。我已经在网上广泛搜索了一下,没有找到任何具体的答案 如果你知道一种直接拟合参数方程的方法,我也有使用相同参数的圆柱体的参数函数 x = v-(c*r*cos(u))/(sqrt(1+c^2))-(a*r*sin(u))/((1+c^2)*sqrt(1+(a^2)/(1+c^2))); y = b+a*v+
x = v-(c*r*cos(u))/(sqrt(1+c^2))-(a*r*sin(u))/((1+c^2)*sqrt(1+(a^2)/(1+c^2)));
y = b+a*v+(r*sin(u))/(sqrt(1+(a^2)/(1+c^2)));
z = d+c*v+(r*cos(u))/(sqrt(1+c^2))-(a*c*r*sin(u))/((1+c^2)*sqrt(1+(a^2)/(1+c^2)));
非常感谢。您可以将
cf工具
与上面指定的圆柱体形式的用户定义功能一起使用。从文件来看
cftool(x、y、z)创建与x、y输入和z输出的曲面拟合。x、 y和z必须是数字,具有两个或多个元素,并且具有兼容的大小。如果x、y和z都有相同数量的元素,或者x和y是向量,z是二维矩阵,长度(x)=n,长度(y)=m,其中[m,n]=大小(z),则大小是兼容的。cftool在必要时打开曲线拟合应用程序
如果您只需键入cftool,它将打开一个交互式会话,您可以在其中尝试一些fits(假设您有工具箱)
编辑:在这种情况下,可以使用fsolve
。将cylinder函数保存到名为cylinder的单独文件中,其中的代码类似于:
function F = cylinder(P, X)
a = P(1);
b = P(2);
c = P(3);
d = P(4);
r = P(5);
x = X(1,:);
y = X(2,:);
z = X(3,:);
% f(x,y,z) - r = 0
F = sqrt( ( x-( (x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ...
+(-b+y-(a*(x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ...
+(-d+z-(c*(x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ) -r;
end
我假设你有正确的圆柱形状。你可以用N
数据点,X
的形式(3,N)调用它
不幸的是,就我使用cftool而言,没有办法定义隐式函数。您需要定义一个自定义的显式函数,其形式为:z=f(x,y)。我想做的是与形式为:f(x,y,z)=0的函数相匹配。嘿,Ed,非常感谢您的帮助。不幸的是,最后一个解决方案也不起作用,因为fsolve没有将X视为他应该在函数中使用的坐标,如果他很清楚这个脚本的作用的话。我得到“输入参数不足”错误。我试着绕过它,但它仍然不起作用。。。我觉得这已经接近最终解决方案了。。
function F = cylinder(P, X)
a = P(1);
b = P(2);
c = P(3);
d = P(4);
r = P(5);
x = X(1,:);
y = X(2,:);
z = X(3,:);
% f(x,y,z) - r = 0
F = sqrt( ( x-( (x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ...
+(-b+y-(a*(x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ...
+(-d+z-(c*(x+a*(-b+y)+c*(-d+z)))/(1+a^2+c^2)).^2 ) -r;
end
startparams = [0,0,0,0,1]
coeff=fsolve('cylinder',startparams,[],X)