试图获得一些实验收集的数据的积分。
在使用了信封和abs函数之后,我使用了fit函数来获取我想要积分的方程式(不幸的是'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
'的情况下,如果是linearinterp搞砸了,我仍然会收到该错误。
TIA
答案 0 :(得分: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
可能有多个表达式,这就是我设置的原因 将'ArrayValued
'设为 true ,以便integral()
函数知道f
具有多个表达式,省略意味着f
有一个表达式 表达不正确。