2016-09-15 5 views
0

私はMatlabを新しく使いました。私はこのコードをオンラインで見つけようとしています。 私はHydrodynamicSpectrumで記述されたグラフに適合しようとしています。しかし、fvAとfmAを入力してからフィットさせるのではなく、この値に適合するパラメータも得ようとしています。パラメータを合わせる

私はそれらを削除して変更しようとしました。しかし、誰も働いていません。ここの誰かが私にこれを正しい方向に向けることができるかどうか疑問に思っていました。

specFunc = @(f, para)HydrodynamicSpectrum(f, [para fvA fmA]); 
[fit.AXfc, fit.AXD] = NonLinearFit(fit.f(indXY), fit.AXSpec(indXY), specFunc, [iguess_AXfc iguess_AXD]); 
[fit.AYfc, fit.AYD] = NonLinearFit(fit.f(indXY), fit.AYSpec(indXY), specFunc, [iguess_AYfc iguess_AYD]); 
[fit.ASumfc, fit.ASumD] = NonLinearFit(fit.f(indSum), fit.ASumSpec(indSum), specFunc, [iguess_ASumfc iguess_ASumD]); 
predictedAX = HydrodynamicSpectrum(fit.f, [fit.AXfc fit.AXD fvA fmA]); 
predictedAY = HydrodynamicSpectrum(fit.f, [fit.AYfc fit.AYD fvA fmA]); 
predictedASum = HydrodynamicSpectrum(fit.f, [fit.ASumfc fit.ASumD fvA fmA]); 

function spec = HydrodynamicSpectrum(f, para); 

fc = para(1); 
D = para(2); 
fv = para(3); 
fm = para(4); 
f = abs(f); %Kludge! 
spec = D/pi^2*(1+sqrt(f/fv))./((fc - f.*sqrt(f./fv) - (f.^2)/fm).^2 + (f + f.*sqrt(f./fv)).^2); 


function [fc, D, sfc, sD] = NonLinearFit(f, spec, specFunc, init); 

func = @(para, f)spec./specFunc(f, para); 

[paraFit, resid, J] = nlinfit(f, ones(1, length(spec)), func, init); 

fc = paraFit(1); 
D = paraFit(2); 

ci = nlparci(real(paraFit), real(resid), real(J)); % Kludge!! 

sfc = (ci(1,2) - ci(1,1))/4; 
sD = (ci(2,2) - ci(2,1))/4; 

答えて

0
[paraFit, resid, J] = nlinfit(f, ones(1, length(spec)), func, init); 

この行を使用して、あなたのフィットパラメータを得るように見えます。そして、それらをさらに処理して、関数から他のものを取り除きます。 2番目の関数を修正してそれらを取り出すこともできます。

コメントがほとんどなく、質問がアプリケーション固有のようであるため、あなたが提示したものを私が与えることができる多くの助けはありません。

関連する問題