在微积分问题中,有没有一种代码更简洁的方法可以更容易地实现以下逐段函数的作图?在我的方法中,我使用matplotlib并将这些图组合成两个主图来显示不连续性。你知道吗
import matplotlib.pyplot as plt
def v(time_range):
velocity_val = []
for i in time_range:
if i < .2:
velocity_val.append(20)
elif i > .2:
velocity_val.append(0)
return velocity_val
def f(time_range):
distance_val = []
for i in time_range:
if i <= .2:
distance_val.append(20*i)
if i >= .2:
distance_val.append(4)
return distance_val
def time_vals(time_range):
decimal = 100
time_val = []
for i in time_range:
num = i / decimal
time_val.append(num)
return time_val
#convert time into decimal
time_range_1 = range(1,20,1)
time_range_2 = range(21,40,1)
t_1 = time_vals(time_range_1)
t_2 = time_vals(time_range_2)
#get x, y for plot
v_1 = v(t_1)
v_2 = v(t_2)
f_1 = f(t_1)
f_2 = f(t_2)
#plot values into two graphs.
plt.subplot(2, 1, 1)
plt.plot(t_1, v_1)
plt.plot(t_2, v_2)
plt.title(' Problem 9')
plt.ylabel('Velocity')
plt.subplot(2, 1, 2)
plt.plot(t_1, f_1)
plt.plot(t_2, f_2)
plt.xlabel('time (t)')
plt.ylabel('Velocity');
可以使用
numpy
对代码进行矢量化可能是这样的:
构建
v
和f
的另一种方法是使用np.piecewise
:我认为
np.piecewise
的可读性不强,但它确实节省了一些代码行您可以使用
np.where
来根据条件分配v(t)
和f(t)
。你不需要任何for循环。矢量化方法使您的代码更加简洁。在np.where
中,首先检查条件,然后将条件后的第一个值赋给条件所在的索引True
,将第二个值赋给条件所在的索引False
。你知道吗下面是一个例子:
相关问题 更多 >
编程相关推荐