Wolfram mathematica 一端的压力脉冲,波动方程

Wolfram mathematica 一端的压力脉冲,波动方程,wolfram-mathematica,numerical-methods,wave,pde,numerical-computing,Wolfram Mathematica,Numerical Methods,Wave,Pde,Numerical Computing,我试图用Mathematica用数值方法解决标题下的问题,但没有用。想象一根长度为L的杆,杆中的声速为c。在一端施加宽度与L/c相当的高斯形状的压力脉冲。我想求解杆内的质点位移函数u(t,x)。Mathematica代码如下所示: c = 1.0 (*speed of wave*) L = 1.0 (*length of medium*) Subscript[P, 0] = 0.0 (*pressure of reservoir at one end*) Subscript[t, 0] = 5.

我试图用Mathematica用数值方法解决标题下的问题,但没有用。想象一根长度为L的杆,杆中的声速为c。在一端施加宽度与L/c相当的高斯形状的压力脉冲。我想求解杆内的质点位移函数u(t,x)。Mathematica代码如下所示:

c = 1.0 (*speed of wave*)
L = 1.0 (*length of medium*)
Subscript[P, 0] = 0.0 (*pressure of reservoir at one end*)
Subscript[t, 0] = 5.0*c/L; (*mean time of pressure impulse*)
\[Delta]t = 2.0*c/L; (*Std of pressure impulse*)
K = 1.0; (* proportionality constant, stress-strain *)
Subscript[P, max ] = 1.0; (*max. magnitude of pressure impulse*)
Subscript[P, 1][t_] := 
 Subscript[P, max ]
   PDF[NormalDistribution[Subscript[t, 0], \[Delta]t], t];

PDE = D[func[t, x], t, t] == c^2 D[func[t, x], x, x]
BC1 = -K func[t, 0] == Subscript[P, 1][t]
BC2 = -K func[t, L] == Subscript[P, 0]
IC1 = func[0, 
   x] == (-Subscript[P, 1][0]/K) (x/L) + (-Subscript[P, 0]/K) (1 - x/L)
IC2 = Derivative[1, 0][func][0, x] == 0.0

sol = NDSolve[{PDE, BC1, BC2, IC1, IC2}, 
  func, {t, 0, 2 Subscript[t, 0]}, {x, 0, L}]

问题是程序持续运行了几分钟而没有给出任何输出。考虑到问题的简单性(即存在解析解),我认为应该有一种更快的方法来获得数值解。有人能给我一些建议吗?

按照乔治的建议,方程被解了

问题中给出的BC1和BC2应修改如下

BC1 = -kk Derivative[0, 1][func][t, 0] == p1[t]
BC2 = -kk Derivative[0, 1][func][t, ll] == p0
t0和δt也已修改

t0 = 2.0*c/ll (*mean time of pressure impulse*)
\[Delta]t = 0.5*c/ll (*Std of pressure impulse*)
该问题可在时间间隔0 这是压力的3D图(相对于x和t)

这是施加脉冲的一端压力的曲线图。正如预期的那样,压力是高斯分布的

这是酒吧中间压力的曲线图。注意,尽管施加的压力为高斯分布,且另一端的压力保持在P0=0,但压力在一段时间内变为负值


我强烈建议您不要使用
下标,而是使用
p0
,例如。另外,不要用大写字母开始任何您自己的符号,以避免与内置符号冲突…在进行这些更改后,我立即得到了解决方案,并警告边界条件不一致。我认为你在不列颠哥伦比亚省犯了一些明显的错误,但是你可以通过看看你得到的解决方案来解决。谢谢,乔治。按照你的建议解决了这个问题。