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

フィッティングしている関数は、2 つの引数しか取ることができません。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 に答える