图和勒夏特列原理

Graphs and Le Chatelier’s Principle

我正在尝试使用 scipymatplotlib 制作图表,我的想法是变量 k 和浓度用于平衡化学的交互式图形。也许我的等式有错误,下面没有制作图形类型示例,只有一个示例图形结局

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# To reaction A + B <=> C + D
k1=0.05
k2=0.05
tf= 200
dt=0.2
t =  np.arange(0,tf+0.01, dt)
n = len(t)
Ca= np.ones(n)
Ca= np.ones(n)
Cb= np.ones(n)
Cc= np.zeros(n)
Cd= np.zeros(n)

def dC(C,tm):
        Ca,Cb,Cc,Cd =C
        r1 =k1*Ca
        r2 =-k2*Ca
        d1 = -r1
        d2 = -r1 -r2
        d3= r1-r2
        d4= r2
        return [d1,d2,d3,d4]
        
C =odeint(dC,[1,1,0,0], t)
Ca= C[:,0]
Cb= C[:,1]
Cc= C[:,0]
Cd= C[:,1]

plt.plot(t,Ca, 'r--', linewidth=2.0)
plt.plot(t,Cb, 'k--', linewidth=2.0)
plt.plot(t,Cc, 'b--', linewidth=2.0)
plt.plot(t,Cd, 'm--', linewidth=2.0)
plt.show()

我刚找到一个可以帮助你的例子。

我认为问题出在您的“绘图”函数中。尝试这样的事情:

from scipy.integrate import odeint
import numpy as np

def myode(C, t):   

    k1 = 1   # 1/min;
    k_1 = 0.5   # 1/min;

    Ca = C[0]
    Cb = C[1]

    ra = -k1 * Ca
    rb = -k_1 * Cb

    dCadt =  ra - rb
    dCbdt = -ra + rb

    dCdt = [dCadt, dCbdt]
    return dCdt


tspan = np.linspace(0, 5)

init = [1, 0]  
C = odeint(myode, init, tspan)

Ca = C[:,0]
Cb = C[:,1]

import matplotlib.pyplot as plt
plt.plot(tspan, Ca, tspan, Cb)