微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 fsolve 求解涉及 numpy 数组和的单个非线性方程

如何解决使用 fsolve 求解涉及 numpy 数组和的单个非线性方程

我正在尝试解决以下等式:

enter image description here

这个非线性方程来自于“k”个其他方程的求和。除了 m_dot_ev^(T) 之外,这里的每个变量都是已知的,所以这就是我想要找到的。我将每个学期都发送到 LHS,以便在 RHS 中获得“0”,目前正在通过以下方式解决


def non_linear_function(y):
   return sum(X_k_infty_array + (X_k_infty_array - X_k_s_array)/(np.exp(-y/(4*np.pi*rho*R_0*D_k_array))-1)) - 1

m_dot = fsolve(non_linear_function,suitable_RHS_guess)


注意我们想要的变量在函数内部变成了“y”。我已经有了一个合适的 RHS_guess(本质上,发表这个方程的论文提出了一个更简化的版本,并表明简化版本产生的结果类似于这个复杂版本。或者,因为我以迭代方式计算这个结果,我总是可以使用作为猜测从 fsolve 获得的收敛 m_dot 为前一次迭代时间)。

我的问题是:有没有更好的方法将这个方程输入到 fsolve 中? fsolve 是解决这个问题的最佳工具吗?我上面描述的方法适用于我的大部分模拟,但我目前面临 RuntimeWarning 说在没有发生任何关键事件的时候 fsolve 的迭代没有取得任何进展,所以我想知道是否有更好的这样做的方法。非常感谢您抽出宝贵时间。

解决方法

我认为您的方法适合使用 fsolve。但是 fsolve 更复杂,用于多变量函数。

你可以用root_scalar试试,它让你选择解决方法。

如果您提供一些信息,例如if Xoo > Xs for all k 那么 y < 0y > 0 被一分为二,它最多有一个根。在这种情况下,您可以使用更可预测的方法作为 bisection method,或其一些改进版本 Brent's methodRidder's method

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。