matplotlib 在Python中绘制sympy结果

hfyxw5xn  于 2023-10-24  发布在  Python
关注(0)|答案(2)|浏览(151)

我使用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个点。

qlzsbp2j

qlzsbp2j1#

使用最新版本的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))

输出数字:

inkz8wg9

inkz8wg92#

据说Sympy有自己的绘图功能,但我不能让它从他们的手册工作。我不是sympy的活跃用户。
但这里有一个关于如何使用numpymatplotlib的版本

  • 定义你的函数,使它可以作用于一个np.数组
  • 在某个范围“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()

你应该得到这样的东西:

相关问题