最大值的Python参数

2024-09-29 23:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

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]是参数。我需要找到这些参数的值是最大值,或者我需要差,两个参数(两个最大值)之间的距离,我尝试了“如果”,但是这些值是近似值,所以它们不一样。你能帮我做这个吗?你知道吗


Tags: import参数asnpplty1solz0
2条回答

Graph

我需要找出这个差异,但每个最大值都有一点不同

你是对的,你需要为最大值的差异定义一个公差。我标出了需要澄清的要点。这里的想法是首先从值的最大值max(sol[:, 0])得到差值。然后可以使用NumPy数组的索引,使用1e-4的公差。[abs(diff) < 1e-4]返回此条件为真的索引。现在你最多得5分。你可以对它们做任何你想做的处理。公差的选择还取决于网格点的数量(本例中为10001)。它需要一些玩耍。也可以编写一些函数来巧妙地检查这一点。你知道吗

diff = sol[:, 0] - max(sol[:, 0])
plt.plot(sol[:, 0], sol[:, 2]) 
plt.plot(sol[:, 0][abs(diff) < 1e-4], sol[:, 2][abs(diff) < 1e-4], 'kx')

enter image description here

相关问题 更多 >

    热门问题