【问题标题】:I have a plot and an Y value, need to find the X value [duplicate]我有一个图和一个 Y 值,需要找到 X 值 [重复]
【发布时间】:2019-01-25 03:52:23
【问题描述】:

我有一个任务,我必须找出跑步者在什么时间通过 100m 标记。我做了一个图,但是如何在 y 轴上选择一个点并让程序告诉我 x 轴上的哪个值对应于它?

import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0,7, 71)
dt = t[1] - t[0]
n = len(t)
a = np.zeros(n, float)
x = np.zeros(n, float)
v = np.zeros(n, float)
a[0] = 0.0
x[0] = 0.0
v[0] = 0.0

for i in range(0, n-1):
    a[i] = 5 - (0.34911*v[i]**2)/80
    v[i+1] = v[i] + a[i]*dt
    x[i+1] = x[i] + v[i]*dt

plt.subplot(3,1,1)
plt.plot(t,x)
plt.xlabel('t [s]')
plt.ylabel('x [m]')
plt.subplot(3,1,2)
plt.plot(t,v)
plt.xlabel('t [s]')
plt.ylabel('v [m/s]')
plt.subplot(3,1,3)
plt.plot(t,a)
plt.xlabel('t [s]')
plt.ylabel('a [m/s^2]')

plt.show

【问题讨论】:

    标签: python numpy matplotlib plot


    【解决方案1】:

    如果 x[i-1] = 100m,则时间介于 t[i-1] 秒和 t[i] 秒之间。您可以使用线性插值找到接近的值:

    tt = t[i-1] + (t[i] - t[i-1]) * (100 - x[i-1]) / (x[i] - x[i-1)
    

    如果第一个值(x[0])已经> 100m,那么t[i-1] = x[i-1] = 0

    【讨论】:

      【解决方案2】:

      这是我的解决方案,依赖于您已经完成的工作。

      import numpy as np
      import matplotlib.pyplot as plt
      %matplotlib inline
      
      t = np.linspace(0,7, 71)
      dt = t[1] - t[0]
      n = len(t)
      a = np.zeros(n, float)
      x = np.zeros(n, float)
      v = np.zeros(n, float)
      
      a[0] = 0.0
      x[0] = 0.0
      v[0] = 0.0
      
      # Addition
      z = None
      
      for i in range(0, n-1):
          a[i] = 5 - (0.34911*v[i]**2)/80
          v[i+1] = v[i] + a[i]*dt
          x[i+1] = x[i] + v[i]*dt
      
          # Addition
          if x[i+1] > 100 and z is None:
              z = t[i]
              print(f"Specified distance is reached at time point {z}")
      
      plt.subplot(3,1,1)
      plt.plot(t,x)
      plt.xlabel('t [s]')
      plt.ylabel('x [m]')
      # Addition
      plt.axvline(z, color='red')
      plt.subplot(3,1,2)
      plt.plot(t,v)
      plt.xlabel('t [s]')
      plt.ylabel('v [m/s]')
      plt.subplot(3,1,3)
      plt.plot(t,a)
      plt.xlabel('t [s]')
      plt.ylabel('a [m/s^2]')
      
      plt.show()
      plt.tight_layout()
      

      【讨论】:

        猜你喜欢
        • 2020-10-02
        • 2022-01-08
        • 2011-04-18
        • 1970-01-01
        • 2014-04-19
        • 2014-02-17
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多