0

我有一个特定的功率谱阵列保存为test,取决于频率阵列f

这个功率谱一般如下图所示 在此处输入图像描述

需要注意的是,上述功率谱源于模拟时间序列。

原则上,我想要做的是拟合一条接近模拟功率谱的曲线,如下所示:

在此处输入图像描述

我知道理论功率谱可以定义如下:

function ps_theo = ps_th(L,Uhub,f)

const = L/Uhub;
f_x = 6.*f.*(L/Uhub);
exp = 5/3;
ps_theo = (4*const)./((1 + f_x).^exp);

end

其中L是恒定长度尺度,Uhub,恒定速度和f频率矢量。

问题是:我不知道 'L' 的值,因此我正在考虑使用优化的非线性分辨率lsqcurvefit

我一直在进行如下:

xdata = f;
ydata = test;
Uhub = 10;

fit_func = @(L) ps_th(L,Uhub,f);

L_opt = lsqcurvefit(@fit_func,330.2,xdata,ydata)

fit_func它检索有关函数输入变量数量的错误消息。

你介意发光吗?

4

1 回答 1

1

您要拟合的函数只能接受两个参数。你可以这样重写ps_th

function ps_theo = ps_th(x0,f)
L = x0(1);
Uhub = x0(2);

const = L/Uhub;
f_x = 6.*f.*(L/Uhub);
exp = 5/3;
ps_theo = (4*const)./((1 + f_x).^exp);

end

然后用这样的方法调用 lsqcurvefit:

x0Start = [330.2,10]; % vector of initial parameters
x0_opt = lsqcurvefit(@ps_th,x0Start,xdata,ydata);
于 2013-04-08T13:24:40.693 回答