如何为这个PDE绘制解决方案?

时间:2018-02-14 07:08:40

标签: maple

Maple为此PDE生成一个奇怪的解决方案表单。我很难策划解决方案。

解决方案是无限系列。我将术语数量设置为20,然后设置在t = 2秒时绘制解决方案的时间。然后想要为x=0..1绘制解决方案。但情节空洞。

当我对解决方案进行采样并使用listplot时,我得到了正确的解决方案图。

这是MWE

restart;
pde:=diff(u(x,t),t)=diff(u(x,t),x$2)+x;
bc:=u(0,t)=0,u(1,t)=0;
ic:=u(x,0)=x*(1-x);
sol:=pdsolve({pde,ic,bc},u(x,t)):
sol:=value(sol);

Mathematica graphics

现在将术语数设置为20并设置t=2

sol2:=subs(t=2,sol):
sol2:=subs(infinity=20,sol2);

Mathematica graphics

以上是我想要绘制的内容。

plot(rhs(sol2),x=0..1);

我得到空图

Mathematica graphics

因此必须手动对其进行采样并使用listplot

f:=x->rhs(sol2);
data:=[seq([x,f(x)],x=0..1,.01)]:
plots:-listplot(data);

Mathematica graphics

当我将它与Mathematica的结果进行比较时,解决方案看起来是正确的。但是Mathematica结果更简单,因为它在总和中没有那些积分。

pde=D[u[x,t],t]==D[u[x,t],{x,2}]+x;
bc={u[0,t]==0,u[1,t]==0};
ic=u[x,0]==x(1-x);
DSolve[{pde,ic,bc},u[x,t],x,t];
%/.K[1]->n;
%/.Infinity->20;
%/.t->2;

Mathematica graphics

情节是

Mathematica graphics

问题是:如何在不手动采样的情况下绘制Maple解决方案?

1 个答案:

答案 0 :(得分:1)

简短的回答似乎是它在Maple 2017.3中的回归。

对我来说,您的代码直接在Maple 2017.2和Maple 2016.2中运行(没有任何未评估的积分)。我将提交一份针对回归的错误报告。

[编辑]如果这四种方式中的任何一种适用于您的版本(大概是Maple 2017.3),请告诉我。

restart;
pde:=diff(u(x,t),t)=diff(u(x,t),x$2)+x;
bc:=u(0,t)=0,u(1,t)=0;
ic:=u(x,0)=x*(1-x);
sol:=pdsolve({pde,ic,bc},u(x,t)):
sol:=value(sol);

sol5:=value(combine(subs([sum=Sum,t=2,infinity=20],sol))):
plot(rhs(sol5),x=0..1);

sol4:=combine(subs([sum=Sum,t=2,infinity=20],sol)):
(UseHardwareFloats,oldUHF):=false,UseHardwareFloats:
plot(rhs(sol4),x=0..1);
UseHardwareFloats:=oldUHF: # re-instate

sol2:=subs([sum=Sum,int=Int,t=2],sol):
# Switch integration and summation in second summand of rhs(sol).
sol3:=subsop(2=Sum(int(op([2,1,1],rhs(sol2)),op([2,2],rhs(sol2))),
                   op([2,1,2],rhs(sol2))),rhs(sol2)):
# Rename dummy index and combine summations.
sol3:=Sum(subs(n1=n,op([1,1],sol3))+op([2,1],sol3),
          subs(n1=n,op([1,2],sol3))):
# Curtail to first 20 terms.
sol3:=lhs(sol2)=subs(infinity=20,simplify(sol3));
plot(rhs(sol3),x=0..1);

F:=unapply(subs([Sum='add'],rhs(sol3)),x):
plot(F,0..1);

[编辑]这是另一种方式,在64位Linux上为Maple 2017.3工作。

它可以快速生成情节,并且不涉及缩减20个字词的总和。请注意,它不会执行sol:=value(sol);的早期步骤,因为它在使用int命中任何Int之前激活Sum而不是value。它还使用对应于绘图范围的x假设。

restart;
pde:=diff(u(x,t),t)=diff(u(x,t),x$2)+x:
bc:=u(0,t)=0,u(1,t)=0:
ic:=u(x,0)=x*(1-x):
sol:=pdsolve({pde,ic,bc},u(x,t)):

solA:=subs(sum=Sum,value(eval(eval(sol,t=2),Int=int))) assuming x>0, x<1;

plot(rhs(solA),x=0..1) assuming x>0, x<1;

enter image description here