指数曲线拟合matlab

Exponential curve fit matlab

我有以下等式:

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

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

然而,上述等式并非如此。我如何在 MATLAB 中执行此操作?

一种方法是使用 log(y) 关于 u² 和 a³ 的线性回归:

假设uay是等长的列向量:

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

之后,AB(1)为A的拟合值,AB(2)为B的拟合值。计算使用Matlab的mldivide operator; an alternative would be to use the pseudo-inverse.

以这种方式找到的拟合值是参数的最大似然估计,假设与精确方程的偏差是常量方差正态分布误差加到 A u² + B a³ 上。如果偏差的实际来源与此不同,则这些估计可能不是最佳的。

根据@eigenchris 所说的,只需对等式两边取自然对数(log 在 MATLAB 中)。如果我们这样做,我们实际上会将 log space 中的方程线性化。换句话说,给定您的原始等式:

我们得到:

但是,这不完全是多项式回归。这更多是 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,您只需找到 least-squares 解。可以看到是这样的形式:

Y = AX

为了求解 X,我们使用所谓的 pseudoinverse。因此:

X = A^{*} * Y

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

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

x(1) 将包含 A 的系数,而 x(2) 将包含 B 的系数。正如 A. Donda 在他的回答中指出的那样(我尴尬地忘记了这一点),AB 的值是假设相对于您试图拟合的确切曲线的误差是常量方差的正态(高斯)分布。误差也需要是累加的。如果不是这种情况,那么您获得的参数可能并不代表最佳匹配。

有关 least-squares 拟合采用的假设的更多详细信息,请参阅此维基百科页面:

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