簡體   English   中英

將數據擬合到已知函數MATLAB(無曲線擬合工具箱)

[英]Fitting data to a known function MATLAB (without curve fitting toolbox)

我有一個帶有三個參數的函數和一些我想擬合的數據。 我怎樣才能做到最好? 我什至不確定方程式中三個參數的范圍。

該函數具有自由參數alphabetagamma並且由給出

 y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;

我有xy數據點的數組(每組中約50個點),我想使用任何alphabetagamma來找到最合適的位置(定義為最小化最小二乘)。

在線解決方案建議使用曲線擬合工具箱,該工具箱在我的計算機上沒有,並且無法安裝。 我只有准系統MATLAB 2015b版本。

您需要優化算法來平滑R^n -> R函數。 由於您只能訪問准系統Matlab,所以一個好主意是從File Exchange中獲取一種算法。 為了說明LMFnlsq ,我選擇了LMFnlsq ,這應該足夠了,因為您有一個小問題,盡管這似乎更籠統,並且有點過分。

下載LMFnlsq並添加到您的Matlab路徑。


為了方便起見,請創建一個名為regr_fun的函數:

function y = regr_fun(par, x)
    alpha   = par(1);
    beta    = par(2);
    gamma   = par(3); 
    y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;
end

曲線擬合(與regr_fun在同一文件夾中):

%---------------------------------------------------------------------
% DUMMY DATA
%---------------------------------------------------------------------
% Generate data from known model contaminated with random noise
rng(333) % for reproducibility

alpha   = 2;
beta    = 0.1;
gamma   = 0.1;
par     = [alpha, beta, gamma];

xx      = 1:50;
y_true  = regr_fun(par, xx);
yy      = y_true + normrnd(0,1,1,50);

%---------------------------------------------------------------------
% FIT MODEL
%---------------------------------------------------------------------
% intial point of solver
p0      = [1,1,1];

obj_fun = @(p) sum((regr_fun(p, xx) - yy).^2);

% optimization
p_fit   = LMFnlsq(obj_fun, p0);

y_fit   = regr_fun(p_fit, xx);

%---------------------------------------------------------------------
% PLOT
%---------------------------------------------------------------------
plot(xx, yy, 'o')
hold on
plot(xx, y_true)
plot(xx, y_fit, '--')

在此處輸入圖片說明


注意

盡管matlab.codetools.requiredFilesAndProducts列出了符號工具箱,但對於此問題,它不是必需的,並且函數也應如此運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM