【问题标题】:Using matlab fit object as a function使用 matlab 拟合对象作为函数
【发布时间】:2016-03-19 11:33:07
【问题描述】:

Matlab fit 无疑是有用的,但不清楚如何将其用作函数 除了官网给出的微不足道的整合和分化: http://uk.mathworks.com/help/curvefit/example-differentiating-and-integrating-a-fit.html

例如,给定存储在对象“曲线”中的拟合,可以评估 曲线(x)得到一个数字。但是一个人会怎么做,例如整合 |curve(x)|^2 (除了笨拙地创建一个新的拟合)?天真地尝试

 curve = fit(x_vals,y_vals,'smoothingspline');
 integral(curve(x)*curve(x), 0, 1)

给出一个错误:

 Output of the function must be the same size as the input. If FUN is an array-valued integrand, set the 'ArrayValued' option to true.

我还尝试通过为被积函数(如下)定义一个普通函数和一个隐式函数来解决问题,但两者都给出了相同的错误。

 func=@(x)(curve(x))...; % trial solution 1
 function func_val=func(curve, x)...; % trial solution 2

【问题讨论】:

    标签: matlab curve-fitting data-fitting


    【解决方案1】:

    为被积函数定义函数,然后将选项“ArrayValued”设置为“true”进行集成:

     func=@(x)(curve(x)*curve(x));
     integral(func,0,1,'ArrayValued',true)
    

    【讨论】:

      【解决方案2】:

      您需要将函数向量化,即使用元素操作,如 curve(x).*curve(x)curve(x).^2

      还要确保输出的形状与输入匹配,即行输入给出行输出,类似地,列作为列输出。似乎评估 fit 对象总是返回一个列向量(例如 f(1:10) 返回一个 10x1 向量而不是 1x10)。

      话虽如此,这里有一个例子:

      x = linspace(0,4*pi,100)';
      y = sin(x);
      y = y + 0.5*y.*randn(size(y));
      f = fit(x, y, 'smoothingspline');
      

      现在您可以集成为:

      integral(@(x) reshape(f(x).^2,size(x)), 0, 1)
      

      在这种情况下,可以简化为简单的转置:

      integral(@(x) (f(x).^2)', 0, 1)
      

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多