【问题标题】:Get the points from a MatLab fit object plot从 MatLab 拟合对象图中获取点
【发布时间】:2017-07-20 04:49:09
【问题描述】:

我是 Matlab 业余爱好者,所以请多多包涵 -

我目前使用 Matlab 将复杂方程拟合到二维数据。现在我有一个程序,它使用f = fit(xdata, ydata, function, options) 来生成一个合适的对象。

然后我可以使用confint(f)f.parameter 等来获得拟合系数和置信区间,我可以使用plot(f,x,y) 绘制数据和拟合图。

从那时起,我知道如何获取绘制的点的唯一方法是使用画笔(?)工具并选择所有行,然后将数据复制到剪贴板并将其粘贴到 excel 或类似的事物。我宁愿直接从 Matlab 中获取这些点,也许是到一个数组中,但我不知道如何。

任何 MatLab 资深人士能否告诉我我想要的东西是否可行?由于我的方程的复杂性,我自己绘制这些点会非常困难,但如果需要的话,我会(可能需要大约 30 分钟才能做到这一点,而且我的电脑也没有懈怠)。

【问题讨论】:

    标签: matlab model-fitting


    【解决方案1】:

    由于您没有共享任何代码或数据,我使用 MATLAB 文档中的示例:

    load franke
    f = fit([x, y],z,'poly23');
    plot(f,[x,y],z)
    

    所以你可以缝合,它首先加载一个包含x,y,z 向量的数据集。然后使用“poly23”将表面拟合到数据中。在您的情况下,它可以是不同的向量和函数集,但仍然如您所说,您将获得 f 函数。

    现在我们可以看看函数f

    >> f
    
         Linear model Poly23:
         f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y 
                        + p12*x*y^2 + p03*y^3
         Coefficients (with 95% confidence bounds):
           p00 =       1.118  (0.9149, 1.321)
           p10 =  -0.0002941  (-0.000502, -8.623e-05)
           p01 =       1.533  (0.7032, 2.364)
           p20 =  -1.966e-08  (-7.084e-08, 3.152e-08)
           p11 =   0.0003427  (-0.0001009, 0.0007863)
           p02 =      -6.951  (-8.421, -5.481)
           p21 =   9.563e-08  (6.276e-09, 1.85e-07)
           p12 =  -0.0004401  (-0.0007082, -0.0001721)
           p03 =       4.999  (4.082, 5.917)
    

    它向您展示了函数的形式和系数。所以你可以按如下方式使用它:

    zz = f(x,y);
    

    为了确保您可以再次绘制数据:

    figure;
    scatter3(x,y,zz,'.k');
    hold on
    scatter3(x,y,z,'.');
    

    【讨论】:

      【解决方案2】:

      当您调用f = fit(xdata, ydata, function, options) 时,函数 名称决定了方程式。见list of official equations

      只需遍历数据点并使用相应的多项式计算结果。因此,在您的情况下,假设 function=poly2 您将按如下方式进行计算:

      #Fit your data
      f = fit([xdata, ydata],'poly2');
      
      #Print name of coefficients (Just for Verification)
      coeffnames(f)
      
      #Fetch values of coefficients like p1, p2, ...
      p = coeffvalues(c) 
      
      #Compute output points from min(xdata) to max(xdata) spaced at deltaX
      deltaX = 0.1;
      x = [min(xdata):deltaX:max(xdata)];
      Y = p(1)*x^2+p(2)*x+p(3);            #This is equation for function
      

      我知道可以使用替代的复杂 Java 代码来遍历 matlab 图 上的对象并绘制其值,但使用方程式是一种快速有效的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多