用mathematica解一个简单的二阶偏微分方程

eqn=D[p[x,t],t]-(1/(2*a))*D[p[x,t],x,x]==0;sol=DSolve[eqn,p,{x,t}]初始条件:p(0,0)=1p(-1,a... eqn = D[p[x, t], t] - (1/(2*a))*D[p[x, t], x, x] == 0;
sol = DSolve[eqn, p, {x, t}]

初始条件:p(0,0)=1
p(-1,a)=p(1,a)=1/2
我的破电脑解不出来,或者是我输入的不对。第一次用这个软件,求帮忙。
展开
 我来答
xzcyr
推荐于2016-12-02 · TA获得超过3396个赞
知道大有可为答主
回答量:1399
采纳率:100%
帮助的人:774万
展开全部
1 你的代码里混了中文标点。
2 你的方程是热传导方程,它的解析解一般是级数解。Mathematica截止目前,是不用级数来表示方程的解的。(软件的这种处理方法可能和级数的收敛判定困难有关——Mathematica是个非常严谨的数学软件。)所以DSolve无法求解你的方程。
3 退一步讲,即使你想补上a的具体数值,使用NDSolve来求解这个方程的数值解,在你所给的条件下,这也是做不到的。如果你学习过偏微分方程的相关知识,或者你手头有《数学物理方程》之类的课本,你就会知道,你所给的限制条件,不属于教科书里通常会给出的限制条件的任何一种。如果你具备更深入的有限差分方面的知识,你就会知道,仅仅给出三个孤立的点上的函数值,也是根本无法求得这个方程的定解的。你的限制条件是你随手给的?还是你只是单纯地写错了条件?总之你再检查检查吧。
----
知道允许编辑已采纳答案了,那就把评论区的东西弄上来吧:
结合题主在追问中的补充来看,他所想求解的很可能是一个初始条件为DiracDelta函数的热传导方程初值问题,这个问题的正确设法是:
DSolve[{D[p[x, t], t] - (1/(2*a))*D[p[x, t], x, x] == 0, p[x, 0] == DiracDelta[x]}, p[x, t], {x, t}]
v10.3以上的Mathematica应该都是可以直接求解此问题的。至于早于 v10.3 的Mathematica,也可以使用FourierTransform+DSolve进行求解,不过 FourierTransform 不能直接用于方程,需要给它写个“壳儿”——现在普遍都是新版大概也没什么人想知道具体做法,真感兴趣的请上Stackexchange搜索《Workarounds for a possible bug in the linearity of FourierTransform》(问题编号56237),链接就不直接贴了,怕被吞。
追问
多谢你详细的解答。我问了其他人,确实是我的初始条件有问题。如果把初始条件近似成
p(x,0) = \delta(x) 方程就有了一个通解,是一个高斯函数,指数为something*x^2/t . 我之前参考国内数学物理方法分离变量法解的话,那个常数不好确定,有人通过对那个常数积分也能得到同样的高斯函数,可是意义不明确。对x进行傅立叶变换的话,求解方程变的相对容易很多。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式