首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >曲线拟合

曲线拟合
EN

Stack Overflow用户
提问于 2013-04-08 10:41:39
回答 1查看 1.1K关注 0票数 0

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

这个功率谱通常如下图所示

值得注意的是,上述功率谱来源于一个模拟的时间序列。

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

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

代码语言:javascript
复制
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

我的工作如下:

代码语言:javascript
复制
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函数的输入变量数上的错误消息。

你介意放一盏灯吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-08 13:24:40

您所拟合的函数只能包含两个参数。您可以这样重写ps_th

代码语言:javascript
复制
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:

代码语言:javascript
复制
x0Start = [330.2,10]; % vector of initial parameters
x0_opt = lsqcurvefit(@ps_th,x0Start,xdata,ydata);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15877070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档