- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让 Mathematica 7 或 8 进行积分的最佳方法是什么
NIntegrate[Exp[-x]/Sin[Pi x], {x, 0, 50}]
每个整数都有极点 - 我们需要柯西原理值。这个想法是为了获得从 0 到无穷大的积分的良好近似值。
Integrate
有选项 PrincipleValue -> True
。
使用 NIntegrate
我可以给它选项Exclusions -> (Sin[Pi x] == 0)
,或者手动给它极点
NIntegrate[Exp[-x]/Sin[Pi x], Evaluate[{x, 0, Sequence@@Range[50], 50}]]
原始命令和上面的两个 NIntegrate
技巧给出了结果 60980 +/- 10
。但是他们都吐出错误。在 Mathematica 不想给出错误的情况下快速获得该积分的可靠结果的最佳方法是什么?
最佳答案
Simon,有理由相信你的积分是收敛的吗?
In[52]:= f[k_Integer, eps_Real] :=
NIntegrate[Exp[-x]/Sin[Pi x], {x, k + eps, k + 1 - eps}]
In[53]:= Sum[f[k, 1.0*10^-4], {k, 0, 50}]
Out[53]= 2.72613
In[54]:= Sum[f[k, 1.0*10^-5], {k, 0, 50}]
Out[54]= 3.45906
In[55]:= Sum[f[k, 1.0*10^-6], {k, 0, 50}]
Out[55]= 4.19199
看起来问题出在 x==0。对于 k 的整数值,将被积函数 k+eps 拆分为 k+1-eps:
In[65]:= int =
Sum[(-1)^k Exp[-k ], {k, 0, Infinity}] Integrate[
Exp[-x]/Sin[Pi x], {x, eps, 1 - eps}, Assumptions -> 0 < eps < 1/2]
Out[65]= (1/((1 +
E) (I + \[Pi])))E (2 E^(-1 + eps - I eps \[Pi])
Hypergeometric2F1[1, (I + \[Pi])/(2 \[Pi]), 3/2 + I/(2 \[Pi]),
E^(-2 I eps \[Pi])] +
2 E^(I eps (I + \[Pi]))
Hypergeometric2F1[1, (I + \[Pi])/(2 \[Pi]), 3/2 + I/(2 \[Pi]),
E^(2 I eps \[Pi])])
In[73]:= N[int /. eps -> 10^-6, 20]
Out[73]= 4.1919897038160855098 + 0.*10^-20 I
In[74]:= N[int /. eps -> 10^-4, 20]
Out[74]= 2.7261330651934049862 + 0.*10^-20 I
In[75]:= N[int /. eps -> 10^-5, 20]
Out[75]= 3.4590554287709991277 + 0.*10^-20 I
如您所见,存在对数奇点。
In[79]:= ser =
Assuming[0 < eps < 1/32, FullSimplify[Series[int, {eps, 0, 1}]]]
Out[79]= SeriesData[eps, 0, {(I*(-1 + E)*Pi -
2*(1 + E)*HarmonicNumber[-(-I + Pi)/(2*Pi)] +
Log[1/(4*eps^2*Pi^2)] - 2*E*Log[2*eps*Pi])/(2*(1 + E)*Pi),
(-1 + E)/((1 + E)*Pi)}, 0, 2, 1]
In[80]:= Normal[
ser] /. {{eps -> 1.*^-6}, {eps -> 0.00001}, {eps -> 0.0001}}
Out[80]= {4.191989703816426 - 7.603403526913691*^-17*I,
3.459055428805136 -
7.603403526913691*^-17*I,
2.726133068607085 - 7.603403526913691*^-17*I}
编辑上面代码的 Out[79] 给出了 eps->0 的级数展开,如果这两个对数项合并,我们得到
In[7]:= ser = SeriesData[eps, 0,
{(I*(-1 + E)*Pi - 2*(1 + E)*HarmonicNumber[-(-I + Pi)/(2*Pi)] +
Log[1/(4*eps^2*Pi^2)] - 2*E*Log[2*eps*Pi])/(2*(1 + E)*
Pi),
(-1 + E)/((1 + E)*Pi)}, 0, 2, 1];
In[8]:= Collect[Normal[PowerExpand //@ (ser + O[eps])],
Log[eps], FullSimplify]
Out[8]= -(Log[eps]/\[Pi]) + (
I (-1 + E) \[Pi] -
2 (1 + E) (HarmonicNumber[-((-I + \[Pi])/(2 \[Pi]))] +
Log[2 \[Pi]]))/(2 (1 + E) \[Pi])
很明显,-Log[eps]/Pi 来自 x==0 处的极点。因此,如果减去这个,就像主值方法对其他极点执行此操作一样,您最终会得到一个有限值:
In[9]:= % /. Log[eps] -> 0
Out[9]= (I (-1 + E) \[Pi] -
2 (1 + E) (HarmonicNumber[-((-I + \[Pi])/(2 \[Pi]))] +
Log[2 \[Pi]]))/(2 (1 + E) \[Pi])
In[10]:= N[%, 20]
Out[10]= -0.20562403655659928968 + 0.*10^-21 I
当然,这个结果很难用数值来验证,但你可能比我对你的问题了解得更多。
编辑 2
此编辑是为了证明计算原始正则化积分的 In[65] 输入是正确的。我们在计算
Sum[ Integrate[ Exp[-x]/Sin[Pi*x], {x, k+eps, k+1-eps}], {k, 0, Infinity}] ==
Sum[ Integrate[ Exp[-x-k]/Sin[Pi*(k+x)], {x, eps, 1-eps}], {k, 0, Infinity}] ==
Sum[ (-1)^k*Exp[-k]*Integrate[ Exp[-x]/Sin[Pi*x], {x, eps, 1-eps}],
{k, 0, Infinity}] ==
Sum[ (-1)^k*Exp[-k], {k, 0, Infinity}] *
Integrate[ Exp[-x]/Sin[Pi*x], {x, eps, 1-eps}]
在第三行中,使用了整数 k 的 Sin[Pi*(k+x)] == (-1)^k*Sin[Pi*x]。
关于wolfram-mathematica - 具有许多奇点的 Mathematica 积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575946/
我记得 WRI 的某个人在 official newsgroup 中说出于兼容性目的,Mathematica 7 仍然有一个来自 Mathematica 5 的老式 Mathematica 帮助浏览器
除非巫师先生在度假,否则很难击败这种似乎具有无所不在和无所不知的现象。我们如何使用 Mathematica 和 StackOverflow API 超越他? 最佳答案 这是 Sjoerd 解决方案的一
您好,我无法理解以下函数的输出。 ListPointPlot3D[Table[Sin[x^2 + y], {x, 0, 3, 0.15}, {y, 0, 3
我在图形中显示了一组点: alt text http://img69.imageshack.us/img69/874/plc1k1lrqynuyshgrdegvfy.jpg 我想知道是否有任何命令可以
让 S是具有唯一元素的向量,并且 s它的一个子集,也有独特的元素;例如,S={1,2,3,4,5,6}和 s={1,3,4,6} .现在给出另一个向量 c={7,8,9,7} ,如何创建矢量 C=[7
我想知道如果给定多个替换规则,mma 如何确定在发生碰撞时首先应用哪个规则。一个例子是: x^3 + x^2*s + x^3*s^2 + s x /. {x -> 0, x^_?OddQ -> 2}
在mathematica 中(我使用的是 mma 5.0(猜猜很老)),如果我将以下内容作为一行输入: Needs["Graphics`Master`"]; Animate[Plot[Sin[n x]
如果我有一个字母表,假设 sigma = {1,2,3,4,a,b,c,d,e,f,g} 并且想要生成所有长度为 n 的单词,有没有办法做到这一点? 我可以做 Flatten[Outer[Functi
生成参数列表的素数列表的最简单函数是什么?想出这样的函数并不难,比如: foo[n_] := Block[{A = {}, p = 2}, While[p All] 关于wol
在此示例中,将函数定义为“functionB”时,这是一个奇怪的结果。有人可以解释吗?我想绘制functionB[x]和functionB[Sqrt[x]],它们必须不同,但是此代码显示functio
如何在 Mathematica 中对列表进行数值微分而不先将其拟合为数学表达式(即使用 FindFit )? 具体来说,我想在列表中找到最大斜率的点。 我已经考虑使用 Differences并找到最大
我正在寻找 Mathematica 中原子对象的完整列表(其中 AtomQ 产生 True)。 我知道 Symbol String Integer Real Rational Complex Spar
最近发现了一些old post在 MathGroup 上使用未记录的命令行选项 -batchinput和 -batchoutput显示: If test.mma contains the follo
Mathematica 似乎缺少此功能,或者无论如何我都找不到它。 Series function 可以对多个变量进行连续扩展,但它似乎无法进行完整的多元扩展。 有谁知道如何做到这一点? 谢谢 最佳答
我有兴趣运行相同的函数,该函数以并行方式在多核上使用不同的参数值进行一些蒙特卡罗评估。我还想确保整个函数在同一个内核上运行,而函数内的计算不会跨内核分布。例如,假设我有一个函数(故意简化) f[a_,
我怎样才能从 Range[96] 中不重复地获得 48 个随机对的两个不同元素?即 96 个元素只使用一次。 当我尝试将元组/子集与 Select 结合使用时,我觉得必须有一种更直接的方法来实现这一点
我正在评估 Wolfram Mathematica 8 的大学类(class)项目。 我很难定义目标编程模型。 首先是因为我在数学方面真的很匮乏 :) 其次,因为我在 official documen
我开发了一些代码来从 LogNormalDistribution 和 StableDistribution 的乘积生成随机变量: LNStableRV[{\[Alpha]_, \[Beta]_, \[
我有一个想要优化的字符串验证函数。该字符串的长度为 2n,由 0 和 1 组成,例如 str="100001"。我想测试一下: 1) 字符串中奇数索引位置的 1 的数量(必须不少于 1)是否等于偶数索
请考虑: Function[subID, pointSO[subID] = RandomInteger[{1, 4}, {5, 2}]] /@ {"subA", "subB"}; M
我是一名优秀的程序员,十分优秀!