绘制 sympy 结果 python

plotting sympy results in python

我正在使用 sympy 求解 b1 和 b2:

y=x/[x+exp(b1-b2*x)]
x1 = 90; y1 = 0.05 and x2=99;y2=0.95


import sympy
b1,b2 = symbols('b1 b2')
solve([Eq(90*0.05+90*exp(b1-(b2*90))-90, 0.0), Eq(99*0.95+99*exp(b1-(b2*99))-99, 0.0)], [b1, b2])

>>> {b1:29.3930964972769,b2:0.327159886574049}

如何使用这些结果绘制受这些值约束的 S 形曲线。 Y 轴的范围从 0 到 1。x1,y1 和 x2,y2 是该曲线上的 2 个点。

据称 Sympy 有自己的绘图功能,但我无法从他们的手册中使用它。我不是 sympy 的活跃用户。

但是这里有一个关于如何使用 numpymatplotlib

的版本
  • 定义您的函数,使其作用于 np.array
  • 在一定范围内均匀分布点数"x"
  • 用你的函数对这些点进行操作 "y"
  • 绘制一组均匀间隔的点 "x" 与这些点中的函数值 "y"

    import numpy as np
    import matplotlib.pyplot as plt
    
    def f(a):
       c1 = 0.327159886574049
       c2 = 29.3930964972769
       return a/(a+np.exp(c1-c2*a))
    
    x = np.linspace(0, 1, 500)
    y = f(x)
    plt.plot(x,y)
    plt.show()
    

你应该得到这样的东西:

使用最新版本的 sympy 和 ipython

In [1]: from sympy import *

In [2]: x, b1, b2 = symbols("x b1 b2")

In [3]: f = x/(x+exp(b1-b2*x))

In [4]: res = {b1:29.3930964972769,b2:0.327159886574049}

In [5]: plot(f.subs(res), (x, 0, 100))

输出图: