【问题标题】:Matlab fit 3D data points with implicit functionMatlab 用隐式函数拟合 3D 数据点
【发布时间】:2015-07-03 14:02:53
【问题描述】:

我正在尝试用圆柱体的隐式函数(5 个参数:a、b、c、d、r)拟合 3D 数据点(>1000):

 -r + 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) == 0

我找不到用 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+(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)));

非常感谢。

【问题讨论】:

    标签: matlab 3d curve-fitting minimization


    【解决方案1】:

    您可以将cftool 与您在上面指定的圆柱体形式的用户定义函数一起使用。从文档中,

    cftool( x, y, z ) 创建适合 x 和 y 输入以及 z 输出的曲面。 x、y 和 z 必须是数字,具有两个或多个元素,并且具有兼容的大小。如果 x、y 和 z 都具有相同数量的元素,或者 x 和 y 是向量,z 是二维矩阵,length(x) = n 和 length(y) = m,则大小是兼容的,其中 [m,n] = 大小(z)。 cftool 会在必要时打开 Curve Fitting 应用程序。

    如果您只键入 cftool,它将打开一个交互式会话,您可以在其中尝试一些适合(假设您有工具箱)...

    编辑:在这种情况下,您可以使用 fsolve。将圆柱体函数保存到一个名为圆柱体的单独文件中,其中代码类似于:

    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),

    startparams = [0,0,0,0,1]
    coeff=fsolve('cylinder',startparams,[],X)
    

    【讨论】:

    • 不幸的是,就我使用 cftool 而言,没有办法定义隐式函数。您需要以以下形式定义一个自定义显式函数:z = f(x,y) 我要做的是适应以下形式的函数:f(x,y,z) = 0
    • 嘿,埃德,非常感谢您的帮助。不幸的是,最后一个解决方案也不起作用,因为 fsolve 没有将 X 视为他应该在函数中使用的坐标,如果能很好地理解这个脚本的作用。我收到“输入参数不足”错误。我试图绕过它,但它仍然无法正常工作......我能感觉到这非常接近最终解决方案......
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2023-04-04
    • 2023-03-28
    • 1970-01-01
    • 2011-11-08
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多