我正在使用Mathematica 9學生版,並遇到遞歸限制錯誤的問題。我編寫了一個可以工作並涉及數值積分的程序。如果我自己運行此過程並插入要測試的值,則此過程可以正常工作。該程序打印如下。任何有興趣,它應該是兩個隨機變量,betaone和betazero轉換成其他兩個隨機變量伽馬和Rho,然後數值使用這些新的隨機變量整合的概率密度函數:Mathematica中的遞歸限制錯誤
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語句的問題相同?
謝謝你的幫助!
你已分配betazero /一個然後使用它們作爲模式替代 – agentp
後續,第一遍時代碼運行良好,重新運行時會出現錯誤結果,因爲現在定義了betazero,betaone,並且您將衍生產品用於這些複雜表達式。簡單地取消任務可以修復它(或在頂部清除它們) – agentp
現在有一個專門用於Mathematica的StackExchange站點:http://mathematica.stackexchange.com - 請在那裏問你未來的問題。 –