2011-07-06 45 views
11

使用Mathematica 7和8,我們發現Mathematica未能正確保存並獲取擬合例程的結果。我希望這裏有人知道:這個bug的最佳實踐解決方法是什麼?保存FittedModel是buggy

我們的任務是我們正在使用NonlinearModelFit來適應大量數據集,這將爲每個數據集返回一個FittedModel。這些適合需要一段時間,我們嘗試使用Save和DumpSave將結果記憶到文件中。後續分析使用Get將FittedModel拉回。

Mathematica執行保存&獲取沒有警告,但返回的FittedModel是越野車。我們調用Get並從磁盤加載FittedModel,調用結果「foo」。 Trying foo [10]用輸入10評估擬合模型。我們看到的錯誤是,foo [「BestFitParameters」]應該返回一個列表作爲規則,而是將該字符串插入函數中,因爲它是一個像10這樣的數字。嘗試foo [{「BestFitParameters」,「BestFitParameters」}]應該在列表中給出兩次規則,但是對於buggy foo而言,這些規則不會被評估。

有在此之上一個奇怪的和誤導性的行爲,這取決於我們是否刪除/清除FOO或退出內核:磁盤

  • 計算FittedModel爲Foo
  • 保存或DumpSave FOO
  • 刪除和/或清除FOO從磁盤
  • 獲取富
  • 富工作正常

但是,如果我們重新啓動內核失敗

  • 計算FittedModel爲Foo
  • 保存或DumpSave富磁盤
  • 殺死並重新啓動內核
  • 從磁盤獲取富
  • foo是越野車

有沒有人見過這種行爲?

這個bug背後有一個很好的解釋嗎?

有沒有很好的解決方法?

+3

您可以添加短代碼樣本嗎? –

回答

10

這是一個已知的錯誤,幸運的是有一個簡單的解決方法。在評估Get以讀取保存的FittedModel之前,評估一個虛擬擬合的模型代碼。

In[1]:= NonlinearModelFit[Range[5], a x, x, a]; 

In[2]:= Get[FileNameJoin[{$HomeDirectory, "Desktop", "bignlm.mx"}]]; 

In[3]:= AbsoluteTiming[nlm["BestFitParameters"]] 

Out[3]= {17.6010000, {a -> 1.45015, b -> 2.33999}} 

如果這一初步評估被跳過,擬合模型似乎並沒有正常工作的報道稱,由於未能自動加載全部實現功能的相關代碼。 In[1]的評估基本上強制加載。

+0

我們將在早上(英國時間)首先嚐試一下! –