gpt4 book ai didi

wolfram-mathematica - 试图让 Mathematica 逼近积分

转载 作者:行者123 更新时间:2023-12-04 17:39:19 24 4
gpt4 key购买 nike

我试图让 Mathematica 逼近一个积分,该积分是各种参数的函数。我不需要它非常精确——答案将是一个分数,5 位数会很好,但我会满足于 2 位数。
问题是主积分中隐藏了一个符号积分,我不能在它上面使用 NIntegrate,因为它是符号积分。

    F[x_, c_] := (1 - (1 - x)^c)^c;
a[n_, c_, x_] := F[a[n - 1, c, x], c];
a[0, c_, x_] = x;

MyIntegral[n_,c_] :=
NIntegrate[Integrate[(D[a[n,c,y],y]*y)/(1-a[n,c,x]),{y,x,1}],{x,0,1}]

Mathematica 在 n 时开始挂起大于 2 且 c大于 3 左右(通常是因为 nc 都高一点)。

是否有任何技巧可以重写此表达式,以便更轻松地对其进行评估?我玩过不同的 WorkingPrecisionAccuracyGoalPrecisionGoal外部选项 NIntegrate ,但这些都没有帮助内部积分,这就是问题所在。事实上,对于 n 的较高值和 c ,我什至无法让 Mathematica 扩展内导数,即
Expand[D[a[4,6,y],y]] 

挂起。

我正在为学生使用 Mathematica 8。

如果有人对我如何让 M. 接近这一点有任何提示,我将不胜感激。

最佳答案

由于您只想要数字输出(或者这就是您无论如何都会得到的),您可以仅使用 NIntegrate 将符号积分转换为数字积分。如下:

Clear[a,myIntegral]
a[n_Integer?Positive, c_Integer?Positive, x_] :=
a[n, c, x] = (1 - (1 - a[n - 1, c, x])^c)^c;
a[0, c_Integer, x_] = x;

myIntegral[n_, c_] :=
NIntegrate[D[a[n, c, y], y]*y/(1 - a[n, c, x]), {x, 0, 1}, {y, x, 1},
WorkingPrecision -> 200, PrecisionGoal -> 5]
这比以符号方式执行积分要快得多。这是一个比较:
尤达:
myIntegral[2,2]//Timing
Out[1]= {0.088441, 0.647376595...}

myIntegral[5,2]//Timing
Out[2]= {1.10486, 0.587502888...}
合作者:
MyIntegral[2,2]//Timing
Out[3]= {1.0029, 0.647376}

MyIntegral[5,2]//Timing
Out[4]= {27.1697, 0.587503006...}
(* Obtained with WorkingPrecision->500, PrecisionGoal->5, MaxRecursion->20 *)
Jand 的函数具有与 rcollyer 相似的时序。当然,随着你的增加 n ,您将不得不增加您的 WorkingPrecision远高于此,如 you've experienced in your previous question .既然你说你只需要大约 5 位的精度,我已经明确设置了 PrecisionGoal到 5. 您可以根据需要更改此设置。

关于wolfram-mathematica - 试图让 Mathematica 逼近积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com