matlab - Matlab 上的对数最小二乘法

标签 matlab logarithm least-squares data-fitting

如何使用此函数y=(a*x)./(b+x)来近似该数据 x = [1.5 4 5 8 12 16 17], y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4] 使用 matlab 进行最小二乘法?

我使用对数并得到log(y)=log(a*x)-log(b+x)。结果不是我需要的 y = a*x + b 形式。 a 它没有与 x 相乘,因为它应该是这样,但它被添加到它,因为 log(y)=log(a)+log(x )-log(b)。所以我不知道下一步该做什么。我知道执行 y=b*x.^ay=b*exp.(x*a) 的代码,但我不知道如何解决这个。

最佳答案

嗯,我想是时候回到代数 1 了。log(b+x) 与 log(b) 不同。您无法使用日志来解决此问题,至少不能像您尝试过的那样。

只要您愿意快速而宽松地处理错误结构(即使您不知道这意味着什么,它仍然很重要),那么假设您颠倒了事情?

1/y = (b+x)/(ax) = b/(ax) + 1/a

变换问题,使得

c = b/a
d = 1/a
u = 1/x
v = 1/y

现在我们有了

v = cu + d

解决这个线性回归问题,然后从 c 和 d 恢复 a 和 b。

在 MATLAB 中,这很简单。

x = [1.5 4 5 8 12 16 17];
y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4];

u = 1./x;
c_d = polyfit(u,1./y,1)
c = c_d(1);
d = c_d(2);

a = 1./d
a =
          3.90554889035516

b = c*a
b =
          2.19394529536478

并绘制拟合结果。

ezplot(@(x) a.*x./(b+x),[1.5 17])
hold on
plot(x,y,'ro')

enter image description here

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

相关文章:

matlab - Matlab中手动排列字符串元胞数组的用户控制功能

python - 如何预处理数据来计算均方根对数误差?

image-processing - 多重二次(或多项式)最小二乘(表面拟合)的代码?

matlab - 为什么我的二值图像膨胀函数不能正常工作?

python - matplotlib 中的金字塔 3D 直方图(如 1976 年有关 SVD 的历史电影)

python - 使用 Matplotlib 的半对数图中的纵横比

c - C中快速高效的最小二乘拟合算法?

用于进行线性或非线性最小二乘近似的 Ruby 库?

matlab - 为什么频率不对?

R ggplot2 : filling the space between 2 lines with varying x values (geom_ribbon) and formatting log axis labels