一、驱动力-行驶阻力图
以汽车理论第六版第一章1.3题为例,用python matplotlib 画处驱动力行驶阻力图并求解最大车速。
MATLAB 做如图
在python 中作图,以下图像并没有补充行驶阻力由0开始到最低速度对应的图像,感兴趣需要自行补充。
import numpy as np # 加载数学库用于函数描述
import matplotlib
import matplotlib.pyplot as plt # 加载 matplotlib 库 主要调用plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False # 解决图像中的'-'负号的乱码问题
n = np.linspace(600, 4000, 5000) # 600到4000分割为5000份依次带入其他公式计算其值
n1 = 600 # 最低转速
n2 = 4000 # 最高转速 r/min
mx = 2000 # 装载质量
my = 1800 # 整车整备质量
M = 3880 # 总质量
r = 0.367 # 车轮半径
ut = 0.85 # 传动系机械效率
f = 0.013 # 滚动阻力系数
Cda = 2.77 # 空气阻力系数
i0 = 5.83 # 主减速器传动比
If = 0.218 # 飞轮转动惯量
Ig = [5.56, 2.769, 1.644, 1.00, 0.793] # 变速器传动比
Tq = -19.313 + 295.27 * (n / 1000) - 165.44 * (n / 1000) ** 2 + 40.874 * (n / 1000) ** 3 - 3.8445 * (n / 1000) ** 4
# Tq-n 公式
x = 1
for i in Ig: # Ig为列表,依次读取传动比
Ft = (Tq * i0 * i * ut) / r # Ft 计算公式
ua = (0.377 * r * n) / (i * i0) # Ua 计算公式
Fw = Cda * ua ** 2 / 21.15
y = Fw + M * 9.8 * f
plt.plot(ua, Ft, label=f'Ft$_{x}$') # 绘出不同传动比关系图
if x < 5: # 绘出前四条.或len(Ig)
plt.plot(ua, y, color="mediumturquoise")
else: # 在最后一条加标签求解
plt.plot(ua, y, label='Fw+Ff', color="mediumturquoise")
ua5 = np.array([(0.377 * r * n) / (Ig[4] * i0)]) # 求解五档车速创建array(有序的数据机集)
y = np.array([Fw + M * 9.8 * f]) # 求 Fw+Ff 阻力 此时Fw为5档值
k = np.where(abs(Ft - y) <= 1.5) # 求解Ft和Fw、Ft满足条件值
# k 为 求解Ft和Fw、Ft满足条件值 因转速区间为5000.若取=0可能没有解,取满足此条件最大值
Umax = ua5[k] # 求解Ft和Fw、Ft满足条件值
list1 = Umax.tolist() # 转为列表
plt.text(100, 1200, '%.2f' % max(list1)) # 将最大值标上 %max(list1)是最大车速
x += 1 # 下标变换
plt.text(15, 12500, 'Ft1')
plt.text(25, 7000, 'Ft2')
plt.text(50, 4000, 'Ft3')
plt.text(80, 2500, 'Ft4')
plt.text(60, 1800, 'Ft5')
plt.text(70, 500, 'Fw+Ff')
plt.title('驱动力图') # 图标题
plt.xlabel('U$_{a}$/(km/h)') # $_{a}$ 为下标表达式
plt.ylabel('F$_{t}$/KN') # ylabel为 Y 轴标题
plt.legend() # 确保运行正常显示
plt.show()
Python 加载 matplotlib库后作如图 程序运行效果图
二、加速度曲线
import numpy as np # 加载数学库用于函数描述
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False # 解决图像中的'-'负号的乱码问题
n = np.linspace(600, 4000, 50)
n1 = 600 # 最低转速
n2 = 4000 # 最高转速 r/min
mx = 2000 # 装载质量
my = 1800 # 整车整备质量
M = 3880 # 总质量
r = 0.367 # 车轮半径
ut = 0.85 # 传动系机械效率
f = 0.013 # 滚动阻力系数
Cda = 2.77 # 空气阻力系数
i0 = 5.83 # 主减速器传动比
If = 0.218 # 飞轮转动惯量
Iw1 = 1.798
Iw2 = 3.598
Ig = [5.56, 2.769, 1.644, 1.00, 0.793] # 变速器传动比
L = 3.2 # 轴距
a = 1.947
hg = 0.9
Tq = -19.313 + 295.27 * (n / 1000) - 165.44 * (n / 1000) ** 2 + 40.874 * (n / 1000) ** 3 - 3.8445 * (n / 1000) ** 4
x = 1
for i in Ig: # Ig为列表,依次读取传动比
Ft = (Tq * i0 * i * ut) / r # Ft 计算公式
ua = (0.377 * r * n) / (i * i0) # Ua 计算公式
p = 1 + ((2*Iw1 + 2*Iw2) / (M * r * r)) + (If * i0 * i0 * i * i*ut)/(M*r*r)
# p 为旋转质量换算系数
Fw = Cda * ua ** 2 / 21.15
Ff = M * 9.8 * f
at = (Ft-(Ff+Fw))/(p*M)
plt.plot(ua, at, label=f'{x}档')
x += 1 # 下标变换
plt.text(20, 2.3, 'I')
plt.text(23, 1.5, 'II')
plt.text(40, 0.8, 'III')
plt.text(70, 0.4, 'IV')
plt.text(100, 0.1, 'V')
plt.title('Ua-a图') # 图标题
plt.xlabel('U$_{a}$/(km/h)') # $_{a}$ 为下标表达式
plt.ylabel('a/(m/$s^2$)') # ylabel为 Y 轴标题
plt.legend() # 确保右上角标签运行正常显示
plt.show()
三、加速度倒数曲线
在python 画图中可能会出现一些区间变化过大导致图像难以看懂例如:
在求加速度曲线时由于(Ft - (Fw + Ff))越来越小变化越来越快。图像会出现下图情况。
改善方法
1.重新改写5档速度转速区间,即最大车速对应的转速区间。
2.通过显示窗口只显示部分图像。
plt.axis([0, 100, 0, 10])
Python中的matplotlib库中的axis(轴)是指图形的坐标轴,包括x轴和y轴。在绘制图形时,可以通过设置axis的属性来调整轴的范围、刻度、标签等。
import numpy as np # 加载数学库用于函数描述
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False # 解决图像中的'-'负号的乱码问题
n = np.linspace(600, 4000, 50)
n1 = 600 # 最低转速
n2 = 4000 # 最高转速 r/min
mx = 2000 # 装载质量
my = 1800 # 整车整备质量
M = 3880 # 总质量
r = 0.367 # 车轮半径
ut = 0.85 # 传动系机械效率
f = 0.013 # 滚动阻力系数
Cda = 2.77 # 空气阻力系数
i0 = 5.83 # 主减速器传动比
If = 0.218 # 飞轮转动惯量
Iw1 = 1.798
Iw2 = 3.598
Ig = [5.56, 2.769, 1.644, 1.00, 0.793] # 变速器传动比
L = 3.2 # 轴距
a = 1.947
hg = 0.9
Tq = -19.313 + 295.27 * (n / 1000) - 165.44 * (n / 1000) ** 2 + 40.874 * (n / 1000) ** 3 - 3.8445 * (n / 1000) ** 4
x = 1
for i in Ig: # Ig为列表,依次读取传动比
Ft = (Tq * i0 * i * ut) / r # Ft 计算公式
ua = (0.377 * r * n) / (i * i0) # Ua 计算公式
p = 1 + ((2 * Iw1 + 2 * Iw2) / (M * r * r)) + (If * i0 * i0 * i * i * ut) / (M * r * r)
# p 为旋转质量换算系数
Fw = Cda * ua ** 2 / 21.15
Ff = M * 9.8 * f
F = Fw + Ff
at = (Ft - F) / (p * M)
plt.plot(ua, 1 / at, label=f'{x}档')
x += 1 # 下标变换
plt.axis([0, 100, 0, 10])
plt.title('Ua-1/a图') # 图标题
plt.xlabel('U$_{a}$/(km/h)') # $_{a}$ 为下标表达式
plt.ylabel('1/a/(m/$s^2$)') # ylabel为 Y 轴标题
plt.legend() # 确保上角标签运行正常显示
plt.show()