gpt4 book ai didi

wolfram-mathematica - 更改 General::stop 和主循环的行为

转载 作者:行者123 更新时间:2023-12-04 00:40:57 24 4
gpt4 key购买 nike

关于文档 page General::stop我们读:

This message is generated after the indicated message has been generated for the third time in a single evaluation.

Messages are suppressed to prevent redundant or repetitive messages in long calculations.



我的问题是在处理 MathLink 时我把每一点都作为一个单一的评估,所以 General::stop永远不会出现。

例如,如果我定义:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
f[z_?NumericQ] := (Print@LinkRead[link];
LinkWrite[link,
Unevaluated[
EnterExpressionPacket[NIntegrate[Sin[1/x], {x, .001, z}]]]];
While[Head[packet = LinkRead[link]] =!= OutputNamePacket,
Print[packet]]; First@LinkRead[link]);
Plot[f[z], {z, 1, 10}, PlotPoints -> 6, MaxRecursion -> 0]

我得到了很多 Message包尽可能多的评价 f[z] .当然,我希望通过 General::stop 在从属内核中停止消息生成。生成相同的消息 3 次后。有没有办法实现这一目标?

$MessageList 的文档页面上我们读到

With the standard Mathematica main loop, $MessageList is reset to {} when the processing of a particular input line is complete.



并在页面 tutorial/Messages我们读:

In every computation you do, Mathematica maintains a list $MessageList of all the messages that are produced. In a standard Mathematica session, this list is cleared after each line of output is generated.



可能这就是原因 General::stop没有出现?如果是真的,有没有办法控制主循环的这个方面?有没有办法创建这样一个非标准的 Mathematica session ?

编辑:
看来我的猜测是对的。如果我们清除 $MessageList在每条消息之后,然后 General::stop从不出现:
Unprotect[$MessageList]
Do[$MessageList = {}; 1/0, {10}]

所以问题仍然存在:如何禁用自动清算 $MessageList生成输出后?

最佳答案

可能有更好的解决方案,但这里有一个似乎有效的解决方案。据我了解,重要的是您在从属内核中有一些用于累积消息的持久变量。

link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
f[z_?NumericQ] :=
(Print@LinkRead[link];
LinkWrite[link, Unevaluated[EnterExpressionPacket[
If[! ValueQ[oldMessageList], oldMessageList = {}];
Block[{$MessageList = oldMessageList},
Module[{result},
oldMessageList =
Join[oldMessageList, (result =
NIntegrate[Sin[1/x], {x, .001, z}]; $MessageList)];
result
]]]]];
While[Head[packet = LinkRead[link]] =!= OutputNamePacket,
Print[packet]]; First@LinkRead[link]);

Plot[f[z], {z, 1, 10}, PlotPoints -> 6, MaxRecursion -> 0]

HTH

关于wolfram-mathematica - 更改 General::stop 和主循环的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163598/

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