试图让Mathematica逼近积分

Oct*_*iaQ 5 wolfram-mathematica

我试图让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}]
Run Code Online (Sandbox Code Playgroud)

Mathematica在n 大于2且c大于3 时开始悬挂(通常为两者n并且c稍微高一些).

有没有重写这个表达式的技巧,以便更容易评估它?我已经打了不同的WorkingPrecisionAccuracyGoalPrecisionGoal上外的选项NIntegrate,但没有帮助内积分,这就是问题的所在.事实上,对于更高的nc,我甚至不能让Mathematica扩展内在导数,即

Expand[D[a[4,6,y],y]] 
Run Code Online (Sandbox Code Playgroud)

挂起.

我正在为学生使用Mathematica 8.

如果有人有任何关于我如何让M近似这个的提示,我将不胜感激.

abc*_*bcd 7

由于您只需要数字输出(或者您将获得的数字输出),您可以使用以下方法将符号集成转换为数字输出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]
Run Code Online (Sandbox Code Playgroud)

这比以符号方式执行集成要快得多.这是一个比较:

尤达:

myIntegral[2,2]//Timing
Out[1]= {0.088441, 0.647376595...}

myIntegral[5,2]//Timing
Out[2]= {1.10486, 0.587502888...}
Run Code Online (Sandbox Code Playgroud)

rcollyer:

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 *)
Run Code Online (Sandbox Code Playgroud)

Jand的功能与rcollyer的时间相似.当然,随着你的增加n,你必须增加你的WorkingPrecision方式,正如你在上一个问题中所经历的那样.既然你说你只需要大约5位数的精度,我就明确地设置PrecisionGoal为5.你可以根据你的需要改变它.