[英]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.