我有这个密码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def rownanie(Y, t, l, q, a, u):
y1, y2, z1, z2 = Y
dydt = [y2, ((l*q)/a)*(1/y1)*(1-z2*u), z2, (a*y2*u)/y1]
return dydt
l = 100
q = 1
a = 10
u = 0.25
y0 = -1
z0 = 0
y0_prim, z0_prim = 0, 0
t = np.linspace(0, 100, 10001)
sol = odeint(rownanie, [y0, y0_prim, z0, z0_prim], t, args=(l,q,a,u))
print(sol)
plt.plot(sol[:, 0], sol[:, 2])
plt.xlabel('Y')
plt.ylabel('Z')
plt.grid()
所以我有4列数据,比如说[:,0]到[:,0]。我只需要关注两个:[:,0],[:,2]。当我把它画出来的时候,它是一个调和函数。[:,0]是值,[:,2]是参数。我需要找到这些参数的值是最大值,或者我需要差,两个参数(两个最大值)之间的距离,我尝试了“如果”,但是这些值是近似值,所以它们不一样。你能帮我做这个吗?你知道吗
Graph
我需要找出这个差异,但每个最大值都有一点不同
你是对的,你需要为最大值的差异定义一个公差。我标出了需要澄清的要点。这里的想法是首先从值的最大值
max(sol[:, 0])
得到差值。然后可以使用NumPy数组的索引,使用1e-4的公差。[abs(diff) < 1e-4]
返回此条件为真的索引。现在你最多得5分。你可以对它们做任何你想做的处理。公差的选择还取决于网格点的数量(本例中为10001)。它需要一些玩耍。也可以编写一些函数来巧妙地检查这一点。你知道吗相关问题 更多 >
编程相关推荐