[英]Fitting data to a known function MATLAB (without curve fitting toolbox)
我有一個帶有三個參數的函數和一些我想擬合的數據。 我怎樣才能做到最好? 我什至不確定方程式中三個參數的范圍。
該函數具有自由參數alpha
, beta
和gamma
並且由給出
y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;
我有x
和y
數據點的數組(每組中約50個點),我想使用任何alpha
, beta
和gamma
來找到最合適的位置(定義為最小化最小二乘)。
在線解決方案建議使用曲線擬合工具箱,該工具箱在我的計算機上沒有,並且無法安裝。 我只有准系統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.