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);
现在将术语数设置为20并设置t=2
sol2:=subs(t=2,sol):
sol2:=subs(infinity=20,sol2);
以上是我想要绘制的内容。
plot(rhs(sol2),x=0..1);
我得到空图
因此必须手动对其进行采样并使用listplot
f:=x->rhs(sol2);
data:=[seq([x,f(x)],x=0..1,.01)]:
plots:-listplot(data);
当我将它与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;
情节是
问题是:如何在不手动采样的情况下绘制Maple解决方案?
答案 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;