我不太擅长python,我需要你的帮助。 首先,我将告诉你我已经做了什么以及它是如何工作的,然后我会问我的问题。
以下代码正在运行,我试图解释我在做什么:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from scipy import integrate
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
#======================================================
def eq(par,initial_cond,start_t,end_t,incr):
# time-grid-----------------------------------
t = np.linspace(start_t, end_t,incr)
# differential-eq-system----------------------
def funct(y,t):
A=y[0]
k_1A=par
# the model equations
dgl_A = -k_1A * A
dgl_B = k_1A * A
return [dgl_A, dgl_B]
#integrate------------------------------------
ds = integrate.odeint(funct,initial_cond,t)
return (ds[:,0],ds[:,1],t)
#=======================================================
# rates
k_1A = 50
rates=(k_1A)
# initial conditions at t=0
A0 = 0.034
B0 = 0.074
y0 = [A0, B0] # initial condition vector
F7,F1,T=eq(rates,y0,0,1.,100)
#saving F1 into F20
F20=F1
############################################################################
def gaussian(Y, mu, sig,N0):
return N0*np.exp(-np.power(Y - mu, 2.) / (2 * np.power(sig, 2.)))
n=100
laser1 = np.arange(n) #array for frequency
laser3=np.arange(n,dtype=np.float) #array for gaussian
for i in laser1:
k_1A = 50*gaussian(i,50,10,1)
rates=(k_1A)
F7,F1,T=eq(rates,y0,0,1.,100)
laser3[i]=F1[1]
############ plotting #############################
f = plt.figure()
plt.plot(laser1,laser3,'-r', linewidth=2.0)
f = plt.figure()
plt.plot(T,F20)
plt.show()
我有2个DGL(反应A - > B,速率为k_1A),并且我在第一部分解决它们。之后我可以绘制F20 = F1(这是状态B中的数字)与时间T的关系。在for循环中,iam计算新的速率k_1A(取决于高斯)并因此计算B中的新数字,即F1,并在一定时间将它们保存到laser3(laser3 [i] = F1 [1。])。然后我绘制激光3与激光1并绘制高斯。
现在,我需要什么? 我想将其绘制成3D图形,因此在x轴上是时间,在y轴上是频率(laser1),在z轴上是B的数量(F20 / F1)。 我是针对分析案例做的,如下图所示:enter image description here
所以我想在一个轴上高斯与频率以及另一个B(F20 = F1)对时间的数量。我希望你们明白我的意思和想要做的事情。我希望你能帮助我。 非常感谢。