给定边界条件时,Mathematica 不求解波动方程
Posted
技术标签:
【中文标题】给定边界条件时,Mathematica 不求解波动方程【英文标题】:Mathematica doesn't solve wave equation when given boundary conditions 【发布时间】:2011-09-21 22:37:33 【问题描述】:还是 Mathematica 语法的新手。当我这样做时:
DSolve[
D[u[x, t], x, 2] == (1/(v*v))*D[u[x, t], t, 2],
u[0, t] == 0,
u[l, 0] == 0
, u, x, t]
它只是返回我输入的内容
DSolve[(u^(2,0))[x,t]==(u^(0,2))[x,t]/v^2,u[0,t]==0,u[l,0]==0,u,x,t]
但是,当我删除边界条件时,我得到了
u->Function[x,t,C[1][t-(Sqrt[v^2] x)/v^2]+C[2][t+(Sqrt[v^2] x)/v^2]]
用 C[1] 和 C[2] 表示边界条件的函数。
有人知道为什么会这样吗?
【问题讨论】:
【参考方案1】:两件事:
您不需要更多的边界和初始条件而不是 2 个吗?您在左侧和右侧有二阶导数,每个都需要 2 个条件。因此总数为 4。请参阅 http://mathworld.wolfram.com/WaveEquation1-Dimensional.html
我认为 DSolve 或 NDSolve 不能解决初值和边值问题?我好像在某个地方读过这个。现在没时间检查。
【讨论】:
啊,你确实是对的。我已经使用变量分离手动解决了它,因为我是为驻波做的,所以我忘记了设置隐含的初始条件。 @Nick:如果你提供初始条件u[x,0]==f[x]
??
不,我做不到。【参考方案2】:
我认为 Mathematica 不知道如何处理 2nd order PDEs 的这些边界条件。您希望如何返回答案?作为一般傅里叶级数?
这是mentioned in the Mathematica Cookbook(可能还有其他地方)...
分解 Mathematica 的问题(使用维度因子 v->1
),您会发现
In[1]:= genSoln = DSolve[D[u[x, t], x, 2] == D[u[x, t], t, 2], u, x, t] // First
Out[1]= u -> Function[x, t, C[1][t - x] + C[2][t + x]]
In[2]:= Solve[u[0, t] == 0 /. genSoln]
Out[2]= C[1][t] -> -C[2][t]
In[3]:= u[l, 0] == 0 /. genSoln /. C[1][x_] :> -C[2][x] // Simplify
Out[3]= C[2][-l] == C[2][l]
解决方案写为f(t-x)-f(t+x)
,其中f
是周期性的[-l,l]
...
如果不对解决方案的平滑度做出假设,您将无法再做任何事情。
您可以检查标准傅里叶级数方法是否可行,例如
In[4]:= f[x_, t_] := Sin[n Pi (t + x)/l] - Sin[n Pi (t - x)/l]
In[5]:= And[D[u[x, t], x, 2] == D[u[x, t], t, 2],
u[0, t] == 0, u[l, 0] == 0] /. u -> f // Reduce[#, n] & // Simplify
Out[5]= C[1] \[Element] Integers && (n == 2 C[1] || n == 1 + 2 C[1])
【讨论】:
以上是关于给定边界条件时,Mathematica 不求解波动方程的主要内容,如果未能解决你的问题,请参考以下文章