Plot 如何避免数值积分中的奇异性?

Plot 如何避免数值积分中的奇异性?,plot,integration,maple,expansion,Plot,Integration,Maple,Expansion,我想在Maple18中绘制E2(t),但它在t=0左右爆炸。如何应用该积分的渐近估计来避免奇异性并解决该问题 restart: with(plots): with(Student[NumericalAnalysis]): g1:=(x,t)->(-sqrt(t)/(2*sqrt(Pi*r^3)))*(sin((r*(x-1)^(2)/(4*t))+(Pi/4))-sin((r*(x+1)^(2)/(4*t))+(Pi/4))): g2:=(x,t)->int(g1(x,t),r=1

我想在Maple18中绘制E2(t),但它在t=0左右爆炸。如何应用该积分的渐近估计来避免奇异性并解决该问题

restart: with(plots):
with(Student[NumericalAnalysis]):
g1:=(x,t)->(-sqrt(t)/(2*sqrt(Pi*r^3)))*(sin((r*(x-1)^(2)/(4*t))+(Pi/4))-sin((r*(x+1)^(2)/(4*t))+(Pi/4))):

g2:=(x,t)->int(g1(x,t),r=1..infinity);

g3:=(x,t) -> (diff(g2(x,t),t)):


g4:=(x,t) -> (diff(g2(x,t),x,x)):


g5:=(x,t) -> ((1/2)*(g3(x,t)^2+g4(x,t)^2)):


E2:=t->(int(g5(x,t),x=0..100)):

evalf(E2(0));
Error, (in g1) numeric exception: division by zero
evalf(E2(1));
Error, (in g3) invalid input: diff received 1, which is not valid for its 2nd argument
plot(E2(t),t=0..20);

向你问好,

我不知道你说的“避免奇点”是什么意思。你的函数在t=0时是单数的,这是无法改变的。只是不要尝试在0处计算它

您的另一个问题是由于试图区分某个数字引起的。您需要做的是使用创建过程E2。然后,将以象征性的方式进行区分。基本上,这是您的代码。我删除了多余的括号、(x,t)->,以及不必要的包加载

restart:
g1:= -sqrt(t/Pi/r^3)/2 * 
     (sin(r*(x-1)^2/4/t+Pi/4)-sin(r*(x+1)^2/4/t+Pi/4)):
g2:= int(g1, r= 1..infinity):
g3:= diff(g2,t):
g4:= diff(g2,x$2):
g5:= (g3^2+g4^2)/2:
这里是E2的E2

E2:= unapply(Int(g5, x= 0..100, epsilon= 1e-4, digits= 7), t):
注意Int中的大写字母I。这将避免浪费时间尝试符号积分,并在应用evalf时直接进行数值积分。ε数字参数将降低精度并提高速度。对于一个绘图来说,精度仍然足够。plot命令是

plot(E2, 0..20, numpoints= 50, labels= [t, ``]);

这将需要两到三分钟。如果您增加numpoints以获得更精确的绘图,则时间将按比例增加。

我刚才在MaplePrimes上回答了这个问题。当人们同时在不同的论坛上问同一个问题时,这很烦人。卡尔,把你的答案复制粘贴到这里。@Carl谢谢你的回答,对这种情况很抱歉。这对我来说是一个紧急的问题,我想增加得到答案的机会。@2che:你对我关于MaplePrimes的答案没有任何回应真是令人不安。@lolmaus-Andrey Mikhaylov:好的,完成了。