我试图使用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}]
问题是程序在没有任何输出的情况下保持运行几分钟。鉴于问题的简单性(即存在分析解决方案),我认为应该有更快的方法来得出数值解。有人请给我一些建议吗?
答案 0 :(得分:1)
根据乔治的建议,方程式得以解决。
问题中给出的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 <0的精度要求内得到解决。 t&lt; 2 t0。我解决了问题的时间间隔为0&lt; t&lt; 4 t0为了寻找有趣的东西。
这是压力的3D图(相对于x和t)
的图
这是应用脉冲的杆一端的压力图。正如预期的那样,压力是高斯压力。
这是条形图中间的压力图。请注意,虽然施加的压力是高斯压力,而另一端的压力保持在P0 = 0,但压力在某个时间tc变为负值。