指数曲线拟合matlab

时间:2015-01-23 14:55:49

标签: matlab curve-fitting

我有以下等式:

我想使用MATLAB对上述等式进行指数曲线拟合,其中y = f(u,a)y是我的输出,(u,a)是我的输入。我想为一组提供的数据找到系数A,B

我知道如何通过定义状态来为简单多项式做这个。例如,如果states= (ones(size(u)), u u.^2),这将给我L+Mu+Nu^2,其中LMN是回归系数。

然而,上述等式不是这种情况。我怎么能在MATLAB中做到这一点?

2 个答案:

答案 0 :(得分:3)

一种方法是使用log(y)相对于u²和a³:

的线性回归

假设uay是相同长度的列向量:

AB = [u .^ 2, a .^ 3] \ log(y)

在此之后,AB(1)是A的拟合值,AB(2)是B的拟合值。计算使用Matlab的mldivide operator;另一种方法是使用pseudo-inverse

这样得到的拟合值是参数的最大似然估计,假设偏离精确方程是常数 - 方差正态分布误差加到Au²+ Ba³。如果实际的偏差来源与此不同,则这些估计可能不是最佳的。

答案 1 :(得分:3)

以@eigenchris所说的为基础,简单地采用等式两边的自然对数(MATLAB中的log)。如果我们这样做,我们实际上将log空间中的等式线性化。换句话说,给出你原来的等式:

我们得到:

然而,这不完全是多项式回归。这更像是least squares fitting分。具体来说,你要做的是给出一组y和一对(u,a)点,你将建立一个方程组并通过最小二乘法求解这个系统。换句话说,给定集合y = (y_0, y_1, y_2,...y_N)(u,a) = ((u_0, a_0), (u_1, a_1), ..., (u_N, a_N)),其中N是您拥有的点数,您将建立您的方程组,如下所示:

这可以用矩阵形式写出:

要解决AB,您只需找到最小二乘解。您可以看到它的形式为:

Y = AX

要解决X,我们会使用所谓的pseudoinverse。就这样:

X = A^{*} * Y

A^{*}是伪逆。这可以使用\mldivide运算符在MATLAB中雄辩地完成。您所要做的就是构建一个y值的向量,并使用log,并构建ua值的矩阵。因此,如果您的分数(u,a)分别存储在UA以及y中存储的Y的值,那么您只需执行此操作:

x = [u.^2 a.^3] \ log(y);

x(1)将包含A的系数,而x(2)将包含B的系数。正如A. Donda在他的回答(我尴尬地忘记了)中所指出的那样,AB的值是假设关于你想要适合的精确曲线的误差是通常(高斯)以恒定方差分布。这些错误也需要加以补充。如果不是这种情况,那么您获得的参数可能并不代表最佳匹配。

请参阅此维基百科页面,了解有关假设最小二乘拟合的更多详细信息:

http://en.wikipedia.org/wiki/Least_squares#Least_squares.2C_regression_analysis_and_statistics