Matlab 集成拟合的“linearinterp”返回错误“第一个输入参数必须是函数句柄”

问题描述 投票:0回答:1

尝试对一些实验收集的数据进行积分。

使用信封和abs函数后,我使用拟合函数来获得我想要积分的方程(不幸的是“

poly
”没有给出足够接近的数据拟合):

[yupper,ylower] = envelope(signal,1000,'peak');

dat = abs(yupper);

f = fit(x,dat,'linearinterp');

然后当我尝试时

q = integral(f,3e4,9e4);

我收到错误:

使用积分时出错(第 82 行)第一个输入参数必须是函数 手柄。

findenergyfromfitcurve 中出现错误(第 10 行)

q = integral(f,3e4,9e4)

我认为

f
是一个(数学)函数,不明白错误告诉我什么。当我尝试使用“
poly3
”以防线性插值把事情搞砸时,我仍然收到该错误。

matlab numerical-integration linear-interpolation
1个回答
2
投票
  • f
    是一个函数,但其类型是cfit而不是函数句柄

  • integral()
    函数需要函数句柄,你可以做什么 是在获取之前将 cfit 转换为 函数句柄 积分

代码如下

x = rand(5,1);
dat = rand(5,1);
f = fit(x,dat,'linearinterp');

% Create a new function handle
f = @(x)f(x);

q = integral(f, 3e4,9e4,  'ArrayValued', 1)


2)...“数组值”,1)还有什么作用?没用 直到我把它放进去,所以它必须做一些事情

f
是一个分段函数,下图基于假设
f
是一个2分段线性函数,但它也可以用于n分段函数

fit()
函数的任务是查找参数:

  • a
  • b
  • c
  • d
  • k

就代码而言

f
看起来像

function y = f(x,a,b,c,d,k)
    % PIECEWISELINE   A line made of two pieces
    % that is not continuous.

    y = zeros(size(x));

    % This example includes a for-loop and if statement
    % purely for example purposes.
    for i = 1:length(x)
        if x(i) < k
            y(i) = a.* x(i) + b;
        else
            y(i) = c.* x(i) + d;
        end
    end
end

要绘制函数句柄,只需使用

fplot(f)

这是

f
的图表


综上所述,

f
可能有不止一个表达方式,这就是我设置的原因 '
ArrayValued
' 为 true,以便
integral()
函数已知
f
有多个表达式,省略它意味着
f
有一个 表达不真实。


© www.soinside.com 2019 - 2024. All rights reserved.