gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:13:56 27 4
gpt4 key购买 nike

如何使用此功能 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com