2 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
你的 while 循環(huán)真的不應(yīng)該使用np.append. 它很慢。
In [119]: t1 = np.array([0])
...: i=0
...: while i < 10:
...: t1 = np.append(t1, t1[i] + .1)
...: i += 1
...:
In [120]: t1
Out[120]: array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
列表追加更快:
In [121]: t1 = [0]
...: i=0
...: for i in range(10):
...: t1.append(t1[-1] + .1) # t1[-1] the last, latest, value
...:
...:
In [122]: t1
Out[122]:
[0,
0.1,
0.2,
0.30000000000000004,
0.4,
0.5,
0.6,
0.7,
0.7999999999999999,
0.8999999999999999,
0.9999999999999999]
In [123]: np.array(_)
Out[123]: array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
更好的是使用arange:
In [124]: np.arange(11)*0.1
Out[124]: array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
In [127]: np.linspace(0,1,11)
Out[127]: array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
在第二個(gè) while 循環(huán)中,您應(yīng)該將其i2用作索引變量。由于在循環(huán)的第一次迭代中,t2[i]是真的t2[50],但當(dāng)時(shí)t2只有一個(gè)元素,所以索引超出了范圍。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
m = float(input("Input the mass of the ball in kilograms: "))
tf = float(input("Input a specified time of fall in seconds: "))
dt = float(input("Input the time step for each calculation in seconds: "))
imaxFloat = tf/dt # The total number of time steps as a floating point number with remainder
imax = int(round(imaxFloat)) # Converts the float to the nearest integer
v0 = 0 # Velocity at t = 0
g = 9.8 # Accleration due to gravity
i = 0 # Initial counter value
i2 = 0 # Initial counter value 2
c = (m*g)/100 # Constant in drag equation
t1 = np.array([0])
v1 = np.array([v0])
t2 = np.array([0])
v2 = np.array([v0])
drag_a = ((m*g)-(c*v1*v1))/m # Acceleration of ball with drag
while i < imax:
t1 = np.append(t1, t1[i] + dt)
v1 = np.append(v1, v1[i] - g * dt )
i = i + 1
while i2 < imax:
t2 = np.append(t2, t2[i2] + dt)
v2 = np.append(v2, v2[i2] - drag_a * dt)
i2 = i2 + 1
plt.plot(t1, v1, label = "Neglecting air resistance")
plt.plot(t2, v2, label = "With air resistance")
添加回答
舉報(bào)