应用Python编程解决机械工程问题
使用Python编程解决PDV工作问题
在封闭系统(也称为质量不变的系统)中,系统与其周围环境通过热量或功进行相互作用。在本文中,我们将处理非耗散功相互作用,也称为PDV或位移功。我们将使用Python编程来解决这些问题。
但在我们开始之前,应该了解位移功的基本含义。位移功被评估为系统在以下压力-体积图中,在两个端态之间所走路径的积分。
要评估此功,必须完全指定路径,这只有在过程是准静态的情况下才可能。在图中,曲线(1-2)下的面积就是所做的功。数学上,它写成如下:
以下是典型过程1-2的压力-体积图:
实现
现在,正如我们已经提到的,要评估PDV功,必须完全指定路径。因此,要在Python中实现它,需要知道压力和体积之间的关系。此外,还应预先知道关于压力或体积的端点信息。解决问题的步骤如下:
- 必须开发一个函数来指定p和v之间的关系。
- 需要提供输入参数。
- 必须根据输入数据计算右侧的常数。
- 需要提供端点之间要创建的数据点数(n)。
- 计算数据点之间的间距(h)并创建体积数组。
- 将使用数值积分来解决问题。
- 最后,要绘制过程,将使用Pylab(一个用于绘图的python模块)以及NumPy。
数学公式
对于端点a和b之间的函数f(x),可以使用梯形法则简单地执行数值积分,如下所示:
这里,索引i从0开始到n结束。所以,x0=a,xn=b。
过程pv=常数
为了理解这个过程,让我们首先考虑一个压力-体积关系由pv=c给出的问题。我们将分段编写代码并在每个部分之后解释它在做什么。
# importing modules from pylab import * from numpy import *
在本部分代码中,分别调用了‘pylab’和‘numpy’模块用于数据绘图和数组创建。
# defining function for pv relation def p(v,C): return C/v
这里,定义了一个函数,它接受两个参数,即体积和常数C(pv=c的右侧)。可以根据给定的热力学过程和初始条件修改此函数。
# input data #--------------- # Initial and final volume (in m^3) v1 = 0.1 v2 = 0.5 # initial pressure (in kPa) p1 = 100
然后将输入数据提供给程序。在本问题中,我们假设端点的体积以及初始压力是已知的。
# Evaluating C C=p1*v1 # Number of data points between end points n=5000 # Spacing between data points h=(v2-v1)/n # creating array of volume v=linspace(v1, v2,n)
根据输入数据计算常数C。需要提供端点之间的数据点数(因为我们使用了梯形法则,所以数据点数越多,精度越高)。计算数据点之间的间距并创建体积数组。
# Numerical Integration f_a=p(v1,C) f_b=p(v2,C) Sum=0 for i in range(1,n-1): Sum=Sum+p(v[i],C) I=h*((f_a+f_b)/2+Sum) # work done Work = I print(f'Work = {round(Work,3)} kJ')
在此步骤中,使用上一节中提到的公式执行数值积分。然后将积分结果传递给变量‘Work’(为简单起见)并打印结果。为了绘制过程,可以使用以下代码段,该代码段使用 print()函数执行绘图任务。
# Data plotting figure(1,dpi=300) plot(v,p(v,C),'r',linewidth=2) xlabel('v (m^3)') ylabel('P (kPa)') ylim(0,p1+5) xlim(0,v2+0.1) plot([v1,v1],[0,p1],'--k') p2=C/v2 plot([v2,v2],[0,p2],'--k') savefig('work.jpg')
程序输出如下:
Work = 16.091 kJ
过程pv^n=c
假设我们已经计算了pv^n过程中所做的功,其中n对我们已知。这次我们将假设端点的压力以及初始体积是已知的。这次唯一变化的是我们将为p-v关系和输入参数创建的函数。
这里我们假设v1、v2和p1分别为0.1 m3、0.3 m3和200 kPa。另外,假设n=1.4。计算该过程中所做的功以及数据绘图的Python程序如下:
# importing modules from pylab import * from numpy import * # defining function for pv relation def p(v,C,N): return C/v**N # input data #--------------- # Initial and final volume (in m^3) v1 = 0.1 v2 = 0.3 # initial pressure (in kPa) p1 = 200 # Exponent n N=1.4 # Evaluating C C=p1*v1**N # Number of data points between end points n=5000 # Spacing between data points h=(v2-v1)/n # creating array of volume v=linspace(v1, v2,n) # Numerical Integration f_a=p(v1,C,N) f_b=p(v2,C,N) Sum=0 for i in range(1,n-1): Sum=Sum+p(v[i],C,N) I=h*((f_a+f_b)/2+Sum) # work done Work2 = I print(f'Work = {round(Work2,3)} kJ') # Data plotting figure(1,dpi=300) plot(v,p(v,C,N),'r',linewidth=2) xlabel('v (m^3)') ylabel('P (kPa)') ylim(0,p1+5) xlim(0,v2+0.1) plot([v1,v1],[0,p1],'--k') p2=C/v2**N plot([v2,v2],[0,p2],'--k') savefig('work2.jpg')
程序输出如下:
Work = 17.777 kJ
在本文中,您已经观察到如何借助Python评估封闭系统的功。上述程序可以轻松地应用于不同的过程或不同的初始条件,只需稍微更改函数、数组和输入参数即可。