PDE采用解析方法求解后,通常解的形式都是傅里叶级数形式表示的,计算各个采样点的值需要完成级数的求和计算。
$$ u(z,t) = \frac{4 u_0}{\pi} \sum_{n=1}^{\infty} \frac{1}{2n-1} \sin(\frac{2n-1}{2H} \pi z) \exp(- \frac{((2n-1)\pi}{2H})^2 C_v t) $$
一维空间中的非稳态问题,场函数必定是一个二元函数,自变量有$x$和$t$,级数的计算还需要考虑$n$的取值,需要计算每一个$n$对应下的结果,因此,需要不断地更新$n$生成新的函数,然后求和就可以得到$z,t$对你应下的结果。
利用sympy实现计算,其中summation函数能够实现级数的计算,因此,只需要每一次更新$z,t$的值即可。
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
n = sp.symbols('n')
H = 1.0
zv = np.linspace(0, H, 11)
t = 1e5
tv = np.linspace(0, t, 50)
cv = 1e-5
u0 = 1000
# 初始化结果矩阵,时间为竖向,空间值按照列进行放置
sol = np.zeros([tv.shape[0], tv.shape[0]])
for row in range(tv.shape[0]):
for col in range(zv.shape[0]):
f = 1 / (2 * n - 1) * sp.sin((2 * n - 1)/ (2 * H) * sp.pi * zv[col]) * sp.exp(-1 * ((2*n-1)*sp.pi/ (2*H))**2 * 1e-5 * tv[row])
sol[row, col] = 4 * u0 / np.pi * sp.sumation(f, (n, 1, 50)).evalf()
evalf()方法,能够将计算结果转换为浮点数进行表示,sympy中类似的还有sympify和lambdify,都能实现将结果以数值的形式表示出来。
本站文章如非特别说明,均为原创。未经本人同意,请勿转载!转载请务必注明出处!
现在看来只是字符