11

在 Mathematica 7 和 8 中,我们发现 Mathematica 无法正确保存和获取拟合例程的结果。我希望这里有人知道:此错误的最佳实践解决方法是什么?

我们的任务是使用 NonlinearModelFit 拟合大量数据集,它为每个数据集返回一个 FittedModel。这些拟合需要一段时间,我们尝试使用 Save 和 DumpSave 将结果存储到文件中。随后的分析使用 Get 将 FittedModel(s) 拉回。

Mathematica 在没有警告的情况下执行 Save & Get,但返回的 FittedModel 有问题。我们调用 Get 并从磁盘加载 FittedModel,将结果称为“foo”。尝试 foo[10] 使用输入 10 评估拟合模型。我们看到的错误是 foo["BestFitParameters"] 应该返回一个规则列表,而是将字符串插入到函数中,因为它是像 10 这样的数字。尝试 foo [{"BestFitParameters","BestFitParameters"}] 应该在列表中给出规则两次,但在错误的 foo 中保持未评估。

除此之外,还有一个奇怪且具有误导性的行为,具体取决于我们是删除/清除 foo 还是退出内核:

  • 将 FittedModel 计算为 foo
  • 将 foo 保存或转储到磁盘
  • 删除和/或清除 foo
  • 从磁盘获取 foo
  • foo 工作正常

但是如果我们重新启动内核它会失败

  • 将 FittedModel 计算为 foo
  • 将 foo 保存或转储到磁盘
  • 杀死并重新启动内核
  • 从磁盘获取 foo
  • foo 是越野车

有没有人见过这种行为?

这个错误背后有很好的解释吗?

有没有好的解决方法?

4

1 回答 1

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]基本上是强制加载。

于 2011-07-06T15:39:54.737 回答