MATLAB将数据拟合到逆二次方程

时间:2012-10-19 08:14:20

标签: matlab curve-fitting

我有一堆数据,我希望使用我想要的函数,例如1/(ax^2+bx+c)。我的目标是获得a,b,c值。

MATLAB的任何功能是否有助于此?我一直在检查fit()功能,但我没有得出结论。哪种方式最好?

3 个答案:

答案 0 :(得分:5)

您提供的模型可以使用简单的方法解决:

% model function
f = @(a,b,c,x) 1./(a*x.^2+b*x+c);

% noise function 
noise = @(z) 0.005*randn(size(z));

% parameters to find
a = +3;
b = +4;
c = -8;

% exmample data
x = -2:0.01:2;    x = x + noise(x);
y = f(a,b,c, x);  y = y + noise(y);


% create linear system Ax = b, with 
% A = [x²  x  1]
% x = [a; b; c]
% b = 1/y;
A = bsxfun(@power, x.', 2:-1:0);

A\(1./y.')

结果:

ans = 
 3.035753123094593e+00  % (a)
 4.029749103502019e+00  % (b)
-8.038644874704120e+00  % (c)

这是可能的,因为你给出的模型是线性模型,在这种情况下,反斜杠运算符将给出解决方案(1./y虽然有点危险...)

在拟合 - 线性模型时,请查看lsqcurvefit(优化工具箱),或者使用fmincon(优化工具箱)编写自己的实现,{ {1}}或fminsearch

此外,如果您碰巧有曲线拟合工具箱,请键入fminunc并从那里开始。

答案 1 :(得分:1)

对我而言,这听起来像是一个最小二乘的问题。

我认为lsqcurvefit可能是一个很好的起点:

http://www.mathworks.co.uk/help/optim/ug/lsqcurvefit.html

答案 2 :(得分:-1)

我不知道这篇文章是否在3个月后有用。 我认为cftool可能会对你有所帮助 检查

您可以轻松添加数据并选择拟合方法....