matlab - 最小二乘法拟合参数

标签 matlab least-squares non-linear-regression

要求我用最小二乘法来拟合参数 αβy = α*exp(-β*x) ,

给出要点:

x = [1 2 3 4 5 6 7]
y = [9 6 4 2 4 6 9]

我无法确定我的矩阵应该是什么样子。我知道我应该取函数两边的自然对数以消除指数,并获得 y 值的自然对数,即:

ln_y = [2.19 1.79 1.39 0.69 1.39 1.79 2.19]

但是我的矩阵应该是什么样子,因为我剩下的是 ln(y) = ln(α) - β*x

所以列由 1 和 x 组成专栏将是我的x值,但是 α 应该是什么?列包含?

这是我认为我应该得到的:

A = [1 1 1 1 1 1 1; 1 2 3 4 5 6 7]

我的想法正确吗?

最佳答案

我们能做的第一件事就是在等式两边取自然对数ln(Matlab中的log)):

y = α * e^(-β * x)

变成:

ln(y) = ln(α * e^(-β * x))
// Law of logarithms
ln(x * y) = ln(x) + ln(y) 

// thus:
ln(y) = ln(α) + ln(e^(-β * x))
Simplifying:
ln(y) = -β * x + ln(α)

现在我们将 ln(y) 作为 x 的线性函数,问题简化为寻找最小二乘意义上的线性回归。让我们定义lny = log(y)A = ln(α),我们可以将问题重写为

lny = -β * x + A

哪里

x = [1 2 3 4 5 6 7]
lny = [2.19 1.79 1.39 0.69 1.39 1.79 2.19]

对于 x 中的每个 x_i,我们可以按如下方式评估 lny(以 x 的升幂重写):

lny(x1) = A - β * x1
lny(x2) = A - β * x2
...
lny(xn) = A - β * xn

矩阵形式

LNY = X * [A β]'
Or,
X * [A β]' = LNY
// let Coefs = [A β]'
Coefs = X^-1 * LNY

在Matlab中

x = [1 2 3 4 5 6 7];
y = [9 6 4 2 4 6 9];
lny = log(y);
X = [ones(length(y), 1), -x']; % design matrix
coefs = X\lny'
% A = coefs(1) and β = coefs(2)
% ln(α) = A thus α = exp(A)
alpha = exp(coefs(1));
beta = coefs(2)

关于matlab - 最小二乘法拟合参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53639059/

相关文章:

matlab - Matlab 中的等高线图 - 需要永远

algorithm - 线性回归 - 使用什么算法来解决最小二乘法 - 逆或 LU 或......?

python - numpy.linalg.lstsq 的广播问题

python - scipy非线性曲线拟合中的过度拟合

R 错误 : parameters without starting value

matlab - 从另一个静态方法中调用 matlab 静态方法

matlab 将绘图导出为矢量格式

c++ - Eigen :如果我只能计算 Aty 和 Ax,是否有可能创建类似 LeastSquareDiagonalPreconditioner 的调节器?

带有转换因变量的 ggplot2 线性回归的 R 图

matlab - FFT 和改变频率以及矢量化 FOR 循环