2

次のコサイン関数のパラメーターを取得するための Python 関数を作成しました。 ここに画像の説明を入力

param = Parameters()    
param.add( 'amp', value = amp_guess, min = 0.1 * amp_guess, max = amp_guess )

param.add( 'off', value = off_guess, min = -10, max = 10 )

param.add( 'shift', value = shift_guess[0], min = 0, max = 2 * np.pi, )

fit_values = minimize( self.residual, param, args = ( azi_unique, los_unique ) )

def residual( self, param, azi, data ):
        """
        Parameters
        ----------

        Returns
        -------
        """
        amp = param['amp'].value
        off = param['off'].value
        shift = param['shift'].value
        model = off + amp * np.cos( azi - shift )
        return model - data

Matlabでは、余弦関数の振幅、オフセット、およびシフトを取得するにはどうすればよいですか?

4

2 に答える 2

4

MATLAB にはlsqcurvefit、最適化ツールボックスで呼び出される関数があります。

lsqcurvefit(fun,X0,xdata,ydata,lbound,ubound);

ここfunで、 は適合する関数、x0は初期パラメータ推定値、xdata と ydata は一目瞭然、lbound と ubound はパラメータの下限と上限です。したがって、たとえば、関数がある場合があります。

% x(1) = amp
% x(2) = shift
% x(3) = offset
% note cosd instead of cos, because your data appears to be in degrees
cosfit = @(x,xdata) x(1) .* cosd(xdata - x(2)) + x(3);

次に、次のように lsqcurvefit 関数を呼び出します。

guess = [7,150,0.5];
lbound = [-10,0,-10]
ubound = [10,360,10]
fit_values = lsqcurvefit(cosfit,guess,azi_unique,los_unique,lbound,ubound);
于 2013-10-22T10:17:59.493 に答える