2013-08-01 56 views
0

我用NDSolve對Mathematica進行了一些模擬,我需要介紹溫度的影響。我定義了一個隨機數表,然後做一個函數出來的,這樣說:Mathematica「不是一個整數」錯誤

randomtablex = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    randomtabley = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    randomtablez = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    Bterp[t_] := 
     {randomtablex[[IntegerPart[t/deltats] + 1]], 
     randomtabley[[IntegerPart[t/deltats] + 1]], 
     randomtablez[[IntegerPart[t/deltats] + 1]]}; 

哪裏3tspacer是整合和deltats的時間是熱場變化的時間。 模擬運行正常,結果正確,但每次我得到以下錯誤信息:

Part :: pspec:「零件規格1 + IntegerPart [1000000000000 t]既不是整數也不是整數列表。

正如我所說,它不是一個真正的問題,但它讓我感到它一直在出現......有什麼辦法可以知道它來自哪裏,還是應該關掉它?

預先感謝您

回答

1

如果您訪問Bterp[]具有象徵性的說法t

試試這個會出現這種情況:

ClearAll[Bterp] 
Bterp[t_?NumericQ] := .... 

http://support.wolfram.com/kb/3820

除此之外,IntegerPart[x]+1是一樣的Ceiling[x](假設x> 0 ...)

+0

這確實奏效,但現在我得到另一個錯誤: NDSolve :: ndfdmc:計算衍生物沒有維度與初始條件一致。 NDSolve求解一個微分矢量方程,所以我的猜測是它與NDSolve有關,在改變之後不考慮Bterp矢量... – Noel

+0

你需要在更高層次上玩同樣的技巧 - 確保函數直接提供給ndsolve的定義是隻對數值進行求值。 (很常見的問題,你會認爲NDSolve,NIntegrate等甚至不會嘗試象徵性的評估,但它們確實如此) – agentp