Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Mathematica中的递归极限错误_Loops_Recursion_Wolfram Mathematica_Runtime Error_Transformation - Fatal编程技术网

Loops Mathematica中的递归极限错误

Loops Mathematica中的递归极限错误,loops,recursion,wolfram-mathematica,runtime-error,transformation,Loops,Recursion,Wolfram Mathematica,Runtime Error,Transformation,我正在使用Mathematica 9学生版,我遇到了递归极限错误的问题。我写了一个有效的程序,包括数值积分。如果我自己运行这个过程并插入我想要测试的值,那么这个过程工作得很好。程序如下所示。对于任何感兴趣的人,应该将两个随机变量betaone和betazero转换为另外两个随机变量gamma和rho,然后使用这些新的随机变量对概率密度函数进行数值积分: xtheta = .4; xx = .1; c = 1/theta /. theta -> xtheta; gamma = (Log[

我正在使用Mathematica 9学生版,我遇到了递归极限错误的问题。我写了一个有效的程序,包括数值积分。如果我自己运行这个过程并插入我想要测试的值,那么这个过程工作得很好。程序如下所示。对于任何感兴趣的人,应该将两个随机变量betaone和betazero转换为另外两个随机变量gamma和rho,然后使用这些新的随机变量对概率密度函数进行数值积分:

xtheta = .4; xx = .1;

c = 1/theta /. theta -> xtheta;

gamma = (Log[theta / (1 - theta)] - betazero - x*betaone) / 
   betaone;  
rho = Exp[ betazero + x*betaone] / (1 + 
    Exp[betazero + x*betaone]); 

JMatrix = {{D[gamma, betazero], 
   D[gamma, betaone]}, {D[rho, betazero], D[rho, betaone]}};

myJacobian = Det[JMatrix] ; gamma =.; rho =.; 

betazero = (1/
    gamma)*((x + gamma)*Log[rho/(1 - rho)] - x*Log[theta/(1 - theta)]);

betaone = (1/gamma)*(Log[theta/(1 - theta)] - Log[rho/(1 - rho)]);

finalPDF = 
  c * myJacobian  /. {betazero -> (1/
        gamma)*((x + gamma)*Log[rho/(1 - rho)] - 
        x*Log[theta/(1 - theta)]), 
    betaone -> (1/gamma)*(Log[theta/(1 - theta)] - 
        Log[rho/(1 - rho)])}; 

theta = xtheta; finalPDF2 = finalPDF /. {x -> xx};

n = NIntegrate[finalPDF2, {rho, 0, xtheta - .001},  {gamma, 0, 1}];
但是,只要我在这个过程之后添加一个Print[n]语句,代码就无法运行,我会得到以下错误“$RecursionLimit::reclim:递归深度超过1024”。有人能解释一下我为什么会犯这个错误,以及我如何补救它吗

此外,我希望在循环中使用这个过程,这样我可以反复运行这个过程,稍微更改其中一个变量,并使用Print语句输出结果。我尝试过使用Do循环和For循环,但我遇到了与以前相同的问题,在这里我得到了一条“$RecursionLimit::reclim:递归深度超过1024”错误消息。有人知道使用一个循环比另一个循环有什么好处吗?循环的问题是否与我的Print语句的问题相同


谢谢你的帮助

为了给您提供答案,这里是您的代码的清理版本。 注意,我们避免将其指定给我们想要用作积分/导数符号的对象

f[xtheta_, xx_] :=
    Module[{theta, gamma, rho, betazero, betaone, x, sub, myJacobian, 
       JMatrix, finalPDF},
   sub = {
      gamma -> (Log[theta/(1 - theta)] - betazero - x*betaone)/betaone,
      rho -> Exp[betazero + x*betaone]/(1 + Exp[betazero + x*betaone])};
  JMatrix = {
    {D[gamma /. sub, betazero], D[gamma /. sub, betaone]},
    {D[rho /. sub, betazero],D[rho /. sub, betaone]}} ;
   myJacobian = Det[JMatrix];
   finalPDF = myJacobian/theta /.
     {theta -> xtheta,
     betazero -> (1/gamma)*((x + gamma)*Log[rho/(1 - rho)] - 
      x*Log[theta/(1 - theta)]), 
     betaone -> (1/gamma)*(Log[theta/(1 - theta)] - 
      Log[rho/(1 - rho)])};
   NIntegrate[finalPDF /. {x -> xx, theta -> xtheta},
      {rho, 0, xtheta - .001},
      {gamma, 0, 1}]];

n = f[.4, .1]
(*0.247738*)

模块结构使循环“安全”,即保证从一次循环到下一次循环不会产生意外的副作用:

Table[f[p, q], {p, {.2, .4, .6}}, {q, {.1, .2}}]

({0.17888,0.17888},{0.247738,0.247738},{0.197697,0.197697})

为了提供答案,这里是您的代码的清理版本。 注意,我们避免将其指定给我们想要用作积分/导数符号的对象

f[xtheta_, xx_] :=
    Module[{theta, gamma, rho, betazero, betaone, x, sub, myJacobian, 
       JMatrix, finalPDF},
   sub = {
      gamma -> (Log[theta/(1 - theta)] - betazero - x*betaone)/betaone,
      rho -> Exp[betazero + x*betaone]/(1 + Exp[betazero + x*betaone])};
  JMatrix = {
    {D[gamma /. sub, betazero], D[gamma /. sub, betaone]},
    {D[rho /. sub, betazero],D[rho /. sub, betaone]}} ;
   myJacobian = Det[JMatrix];
   finalPDF = myJacobian/theta /.
     {theta -> xtheta,
     betazero -> (1/gamma)*((x + gamma)*Log[rho/(1 - rho)] - 
      x*Log[theta/(1 - theta)]), 
     betaone -> (1/gamma)*(Log[theta/(1 - theta)] - 
      Log[rho/(1 - rho)])};
   NIntegrate[finalPDF /. {x -> xx, theta -> xtheta},
      {rho, 0, xtheta - .001},
      {gamma, 0, 1}]];

n = f[.4, .1]
(*0.247738*)

模块结构使循环“安全”,即保证从一次循环到下一次循环不会产生意外的副作用:

Table[f[p, q], {p, {.2, .4, .6}}, {q, {.1, .2}}]

({0.17888,0.17888},{0.247738,0.247738},{0.197697,0.197697})

您已指定betazero/one,然后将其用作模式替换后续,代码在第一次运行时运行良好,重新运行时会出现错误,因为betazero,betaone现在已定义,并且您正在对这些复杂表达式进行求导。只需删除分配即可修复(或在顶部清除它们)Mathematica现在有一个专用的StackExchange站点:--请在那里询问您将来的问题。您已分配了betazero/one,然后将其用作模式替换后续,代码在第一次通过时运行良好,重新运行时会出现错误,如betazero,现在定义了betaone,并对这些复杂的表达式求导。只需删除作业即可修复(或在顶部清除它们)Mathematica现在有一个专用的StackExchange站点:--请在那里询问您将来的问题。谢谢George!你真的想方设法解决了我的问题!我想我现在明白为什么它以前不起作用了。谢谢你澄清,谢谢乔治!你真的想方设法解决了我的问题!我想我现在明白为什么它以前不起作用了。谢谢你澄清这一点。