gpt4 book ai didi

Matlab nlinfit 正在发散

转载 作者:行者123 更新时间:2023-12-02 04:56:16 25 4
gpt4 key购买 nike

我有一个已知模型,我正在尝试将其拟合到真实数据。

fun = @(b,x) b(1)*x(:,1)./(x(:,2).^b(2));
beta0 = [70 1.1]; % expected range is 40-130, and 1.0-1.3
[beta,r]=nlinfit(X,tmp_y,fun,beta0);

当我使用 nlinfit 时,它告诉我我的函数正在返回 Inf 值。我深入研究代码,发现在拟合的第二次迭代中,它过度补偿了第二个 beta 项,将其降至 -80。对于非常大的 x(:,2) 值,这会导致 x 的所有值都被零除。

我可以设置哪些选项来防止这种情况发生?我已阅读文档,但我不太了解所有选项的实际作用。

最佳答案

让我们假设您的代码中唯一的问题是由于出现了一些零值或负值而导致值不同。如果是这种情况,有一个简单的技巧可以解决这个问题。不是直接估计 b(i),而是定义 c(i)=ln(b(i)),这意味着 b(i)=exp(c(i))。因此,在您的等式中用 exp(c(i)) 替换 b(i)。

fun = @(c,x) exp(c(1))*x(:,1)./(x(:,2).^exp(c(2)));

在估计c(i) 之后评估b(i)=exp(c(i))。请注意,在这种情况下,您允许 c(i) 具有零值和负值,但 b(i) 始终为正值。

关于Matlab nlinfit 正在发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911939/

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