gpt4 book ai didi

wolfram-mathematica - 如何在运行代码期间使 Mathematica 打印到控制台警告消息?

转载 作者:行者123 更新时间:2023-12-04 08:13:20 29 4
gpt4 key购买 nike

对我来说最难调试的事情之一是,当 Mathematica 说它检测到问题时,它并没有在控制台打印出一条消息。

像这张图

enter image description here

我调试的方式是通过打印消息。我有不同级别的调试消息,并且可以在出现问题时打开和关闭它们以帮助我找到位置。我所有的调试消息都进入控制台。

由于 Mathematica 不会将这些警告/错误打印到控制台,因此无法找到此消息的来源。如果确实如此,那么我会知道,因为我可以在它之前看到我自己的消息,并且知道这个错误发生的地点和时间。

点击小'+'查看错误是事后的,它并没有告诉消息的位置。

我去了编辑/首选项,并打开了所有内容以打印到我可以看到的控制台:

enter image description here

顺便说一句,这个特殊的“错误”是(当我点击“+”时)

InterpolatingFunction::dmval: Input value {0} lies outside the range 
of data in the interpolating function. Extrapolation will be used. >>

只有当我手动单击“+”时,它才会打印到控制台。我希望它发生时自动完成。

所以,我的问题是,如何让 Mathematica 将上述消息打印到控制台,就在它发生的时候?

附言。我不知道如何使用WB来调试操作代码。

谢谢,

编辑 1

我发现了错误,这是变量名称中的拼写错误。如果有人想看,我把笔记本本身和错误放回去。对不起,我不会尝试在小程序中复制这个,但这个笔记本会说明问题 in this folder如果有人想看的话,有笔记本(.nb)。

错误是我在名为“ solve[]”的模块中写的。 ' 在笔记本的一半以上,在我为此函数设置局部变量的行中,以下
Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1de, 

上面的最后一个变量应该是“x1der”而不是“x1de”,如下所示:
Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1der, 

解决这个问题,导致错误消失。

只需运行笔记本,当它出现时,您会在 UI 单元括号上看到错误,但在控制台上没有错误。 (程序不完整,但可以工作,完成后会在我的网站Mathematica 演示页面上,它是一个三重摆的模拟)。

再次提问,如何让 Mathematica 在检测到此错误时将其打印到控制台。

谢谢。

最佳答案

从屏幕截图看来,您正在使用 Manipulate。 Manipulate(和其他 Dynamic 构造)使用红色括号来隐藏警告和错误的原因是这些消息在交互时可能会多次出现,从而使前端无响应。

要回答您有关调试的问题,这是一种可能的方法。考虑这个简单的 Manipulate,当您将 slider 移动到 x=0 时它会发出警告:

Manipulate[1/x, {{x, 1}, -3, 3, 1}]

要了解该消息,您可以单击右上角带圆圈的加号并选择“粘贴快照”。这将粘贴一段代码,该代码段与带有这些参数设置的 Manipulate 中的代码等效。在这种情况下,我得到:
DynamicModule[{x = 0}, 1/x]

我可以对此进行评估并观察笔记本中的 Power::infy 消息。在这个特定的例子中,它现在是
清楚问题是什么。在更复杂的示例中,您可以使用快照作为起点来计算
找出问题可能是什么。

关于wolfram-mathematica - 如何在运行代码期间使 Mathematica 打印到控制台警告消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461899/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com