【发布时间】:2018-03-24 11:11:59
【问题描述】:
我求解一根金属棒的热方程,因为一端保持在 100 °C,另一端保持在 0 °C,因为
import numpy as np
import matplotlib.pyplot as plt
dt = 0.0005
dy = 0.0005
k = 10**(-4)
y_max = 0.04
t_max = 1
T0 = 100
def FTCS(dt,dy,t_max,y_max,k,T0):
s = k*dt/dy**2
y = np.arange(0,y_max+dy,dy)
t = np.arange(0,t_max+dt,dt)
r = len(t)
c = len(y)
T = np.zeros([r,c])
T[:,0] = T0
for n in range(0,r-1):
for j in range(1,c-1):
T[n+1,j] = T[n,j] + s*(T[n,j-1] - 2*T[n,j] + T[n,j+1])
return y,T,r,s
y,T,r,s = FTCS(dt,dy,t_max,y_max,k,T0)
plot_times = np.arange(0.01,1.0,0.01)
for t in plot_times:
plt.plot(y,T[t/dt,:])
如果将 Neumann 边界条件更改为一端是绝缘的(不是通量),
那么,如何计算项
T[n+1,j] = T[n,j] + s*(T[n,j-1] - 2*T[n,j] + T[n,j+1])
应该修改吗?
【问题讨论】:
-
这是一个编程站点,而不是物理站点,因此您需要为您显示的代码和您想要的代码提供相关方程。我们中的许多人不明白“一端是绝缘的(不是助焊剂)”是什么意思。
-
你的热量方程不正确。 LHS 是∂u/∂t,而不是∂u/∂x。否则你的热量根本不会随时间变化,也没有通量。
-
关键字为“诺依曼边界条件”。
-
由于您使用的是有限差分近似,请参阅this。您所要做的就是弄清楚有限差分逼近中的边界条件是什么,然后当有限差分逼近达到这些条件时将表达式替换为
0。这不是真正的python或实现问题,因为在尝试编码之前您还没有弄清楚 FD 离散化(或者至少没有在问题中显示更改后的 BC 的离散化) . -
看看the example in the
scipy.integratetutorial。它显示了具有 Neumann(“无通量”)边界条件的 PDE 系统的空间离散化。 (时间演化使用scipy.integrate.odeint解决;教程是“线的方法”的一个例子。)
标签: python numpy numerical-methods