如何避免数值积分中的奇点?

时间:2015-07-01 16:22:55

标签: 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..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);

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

我不知道你的意思"避免奇点"。你的函数在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:= unapply(Int(g5, x= 0..100, epsilon= 1e-4, digits= 7), t):

请注意 Int 中的资本 I 。这将避免浪费时间尝试符号集成,并在应用 evalf 时直接进入数字集成。 epsilon 位数参数会降低精度并提高速度。对于绘图来说,精度仍然足够。 plot命令是

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

这需要两到三分钟。如果你为更准确的情节增加 numpoints ,时间会按比例增加。