2016-09-15 72 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); 

看起來你使用這條線讓你的擬合參數。並且你正在進一步處理它們以從功能中獲得其他東西。你可以修改你的第二個函數來讓它們出來。

由於評論很少,而且問題似乎是特定於應用程序的,所以我沒有太多的幫助可以給你提供的東西。