首页 > 解决方案 > Sympy 一直在试图求解这个涉及 sigmoid 函数的方程

问题描述

我的 Jupiter notebook 正在运行。它没有给我答案。我不知道原因。您能为我做的任何事情都将不胜感激。

import sympy as sp

X, T = sp.symbols('X, T')
K = 100000*sp.exp(-33.78*(T-298)/T)
eq1 = sp.Eq(X, K/(1+K))
eq2 = sp.Eq(X**2, 0.0025*(T-300))
R = sp.solve((eq1,eq2), (X, T))
print(R)

标签: pythonsympy

解决方案


这是处理方程的一种可能方法。首先,绘制两条曲线。如果我们考虑到负面结果也适用,第二条曲线可以写成平方根。

Matplotlib 和 numpy 可以处理这个问题。对于较小的 T 值,参数exp变得太高并导致第一个等式溢出。但是第二个方程显然需要 T 是以≥ 300避免负数的根。所以,曲线可以从 开始T == 300

from matplotlib import pyplot as plt
import numpy as np

T = np.linspace(300, 1000, 1000)
K = 100000 * np.exp(-33.78 * (T - 298) / T)
plt.plot(T, K / (1 + K), label='$K/(1+K)$')
plt.plot(T, np.sqrt(0.0025 * (T - 300)), label='$\\sqrt{0.0025(T-300)}$')
plt.legend()
plt.show()

哪些情节:

结果图

橙色曲线从 0 开始T == 300并持续增长。蓝色曲线类似于 sigmoid,从 1 附近开始,在 400 到 500 之间大致为 T 转弯,然后保持在 0 附近。

这表明 周围的相等T == 440,可以插入 sympy 的数值求解器nsolve

import sympy as sp

X, T = sp.symbols('X, T')
K = 100000 * sp.exp(-33.78 * (T - 298) / T)

sp.nsolve(sp.Eq(K / (1 + K), sp.sqrt(0.0025 * (T - 300))), T, 440)

结果:443.993681772465


推荐阅读