应用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评估封闭系统的功。上述程序可以轻松地应用于不同的过程或不同的初始条件,只需稍微更改函数、数组和输入参数即可。


更新于:2024年8月16日

238 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告