我有一个带有三个参数和一些我想要的数据的函数。我怎样才能做到最佳?我甚至不确定等式中三个参数的范围。
该函数包含免费参数alpha
,beta
和gamma
,由
y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;
我有x
和y
个数据点的数组(每组约50个点),我希望使用任何{{1}找到最适合的数据点(定义为最小化最小化) },alpha
和beta
。
在线解决方案推荐曲线拟合工具箱,我的机器上没有这个工具箱,无法安装。我只有MATLAB 2015b版本的准系统。
答案 0 :(得分:1)
您需要一个平滑的R^n -> R
函数的优化算法。由于您只能访问准系统Matlab,因此最好从文件交换中获取算法。为了说明,我选择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
也列出了符号工具箱,但是对于这个问题,它不是必需的,并且该函数也应该在没有它的情况下运行。