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

Solving single non-linear equation involving sum of numpy array with fsolve

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

这个非线性方程来自对“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,它让你选择解决方法。

如果您有一些信息,例如如果 Xoo > Xs 对所有 k 则将 y < 0y > 0 一分为二,并且它至多有一个根。在这种情况下,您可以使用更可预测的方法作为 bisection method, or some of its improved versions Brent's method or Ridder's method