我可以相信Matlab提供的这个数值三重积分吗?


15

计算科学的人:

最初将此问题发布在Math Stack Exchange上,有人评论说我的答案可能会“好得多”:

我是数值方法和Matlab的新手。我正在尝试评估以下两个三重积分之和(显然可以将其写得更简单,但是您仍然不能象征性地对其进行评估(?))。我在拿L时遇到麻烦在这里工作,所以我很不情愿地将它分解成碎片:我想找到大号一种ŤËX

21个/0.3-1个21个1个/0.31个[R1个0[R1个-[R0F1个[R0[R1个Ť经验值-0.32Ť24dŤd[R0d[R1个

21个/0.3-1个21个1个/0.31个[R1个[R1个-[R0[R1个+[R0F2[R0[R1个Ť经验值-0.32Ť24dŤd[R0d[R1个

哪里

F1个[R0[R1个Ť=Ť2[R030.332[R1个3π

F2[R0[R1个Ť=0.33π3/2[R0+[R1个-Ť4Ť2+2Ť[R0+[R1个-3[R1个-[R02228843π[R0343π[R1个3

编辑(2013年3月2日):有人回应说他们让Mathematica象征性地进行积分。我只是尝试这样做(使用简化的积分形式),而Mathematica只能做第一个的外部两个,而停在第二个。我将不胜感激。这是我所做的:

我试图评估

通过

121r20r2r1r13t2exp(t2)r23dtdr1dr2

积分[r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp(-t ^ 2),{t,0,r2-r1},{r1,1,r2},{r2,1,2}]

和Mathematica回报(我在在这里,因为结果很长。我将其分为两个方程式。如果有人知道显示此内容的好方法,请告诉我):LATEX

12164r22e1r22(2e2r2(25+r2(19+2r2(1+r2)))

Ë1个+[R2232[R22+[R22+π11+4[R229+[R22埃尔夫[1个-[R2]d[R2。

然后我尝试评估

1个21个[R2[R2-[R1个[R2+[R1个

经验值-Ť2[R1个+[R2-Ť4Ť2+2Ť[R1个+[R2-3[R2-[R1个22[R1个3[R23dŤd[Rd[R2

使用

积分[(r1 + r2-t)^ 4 *(t ^ 2 + 2 * t *(r1 + r2)-3 *(r2-r1)^ 2)^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3,{r2,1,2},{r1,1,r2},{t,r2-r1,r2 + r1}]

刚才,Mathematica大约半小时后仍未返回答案(但是我现在遇到计算机网络问题,可能是原因)。

[3月2日编辑结束]

我使用了Matlab的“ triplequad”命令,没有其他选择。我通过重功能处理了积分的可变限制,因为我不知道其他方法。Matlab给我0.007164820144202

我知道Matlab是好的软件,但是我听说很难精确地计算数值三重积分,并且数学家应该对此表示怀疑,因此我想采用某种方法来验证此答案的准确性。积分给出了某个实验的期望值(如果有人愿意,我可以编辑此问题以描述实验):我在Matlab中使用适当随机生成的数百万次实施该实验,并对结果取平均值。我重复了此过程四次。结果如下(如果我不正确地使用了“试用”一词,我深表歉意):

试用1:0.007133292603256

试用2:0.007120455071989

试用3:0.007062595022049

试用4:0.007154940168452

试用5:0.007215000289130

尽管每个试验使用了一百万个样本,但是模拟值仅在前一个有效数字中一致。它们彼此之间距离不够近,无法确定数值三重积分是否准确。

因此,谁能告诉我在这里我是否可以信任“ triplequad”的结果,并且在什么情况下人们通常可以信任它?

我在Math Stack Exchange上获得的一个建议是尝试使用其他软件,例如Mathematica,Octave,Maple和SciPy。这是个好建议吗?人们实际上在Mathematica和Maple中从事数值工作吗?Octave是Matlab克隆的一种,因此我可以假定它使用相同的集成算法吗?我什至从未听说过SciPy,并且希望对此有任何意见。


0.007163085468

另外,我也很感谢有关在输入长的多行表达式的建议大号一种ŤËX


2
0.00713726-1.110.00716308537

@whuber谢谢。我可以发誓在Maple中尝试过象征性的尝试,而Maple无法做到。我将在Maple中重试,如果不起作用,我将在Mathematica中尝试。顺便说一句,我在Maple中做了类似的积分,并且得到了巨大的象征性答案。它似乎是非常大的数字的总和与差,其总数很小。我怀疑四舍五入的错误很可能是最终答案。在这样的问题中,您应该使用符号答案还是仅对数字进行积分?
Stefan Smith

符号答案的优点是可以(通常)有效地计算出任意精度的功能组合。通常,当参数变化时,符号解决方案也适用于快速重新计算。由于这些原因,通常值得寻求一种象征性的解决方案。
whuber

@whuber:我尝试在Mathematica中做一些本质上等效的积分(更改一些常量并删除一些乘法常量),而Mathematica只能对第一个积分进行外部两个积分,似乎停滞在第二个积分上。我在上面发布了我的代码和结果。
Stefan Smith

1
关于3月2日的修改:通过将三重积分符号化为单个积分(在积分的前半部分),您已经取得了很多成就。被积物的表现非常好,可以在不到一秒的时间内将其数值积分到极高的精度。
13年

Answers:


9

首先,决定问题解决方案质量的不是软件(或者至少不应该是软件),而是所应用算法的质量和适当性。您应该检查Matlab中的三元组正在使用哪种算法(我想它使用嵌套的自适应高斯正交)。并且您应该检查要求的公差(要求的绝对公差和相对公差)。可能是,默认情况下,它仅要求10-8 相对精度。

来自Maple的答案可能是由Computer Algebra完成的,也许它可以找到一个封闭的解决方案,然后使用双精度浮点进行评估。这样做的好处是,您不必通过有限的求和来逼近积分(因此会引入逼近误差),但是计算机代数系统会找到该积分的表达式,然后可以对其进行求值。当然,在评估此表达式时(四舍五入)必须小心。

如果要使用SciPy进行此操作,则还需要使用基础的Quadpack(Piessens等)例程求助于嵌套的自适应高斯正交。在Octave中,您将具有相同的方法。而且我也不会太惊讶,如果Matlab的还采用Quadpack为正交引擎(因为它是参考)。


@GretVdE:感谢您提供信息。我尝试首先以符号方式评估积分,而Maple无法做到(因此使用标准函数可能无法实现),因此我要求Maple以数字方式进行。我不知道它使用了什么算法。
Stefan Smith

@StefanSmith:您可以通过在Maple中设置信息级别来查找: infolevel[`evalf/int`] := 4。您确定Mape找不到封闭的解决方案吗?积分似乎并不复杂。您可以在某个地方公开您的枫木表吗?
GertVdE

@StefanSmith:我将在上面的问题中发布Maple代码。
GertVdE

我现在无法让Maple在我的系统上工作,但是我尝试在Mathematica中使用等效积分,而Mathematica仅执行第一个三重积分的内部两个,而停在了第二个三重积分上。请参阅编辑后的问题。
Stefan Smith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.