我对MathKernel的这些命令行选项的使用一无所知
-lmverbose
-run cmd
-password "pw"
-pwfile "file"
Run Code Online (Sandbox Code Playgroud)
他们是如何工作的以及他们需要什么?
MathKernel和FrontEnd还有其他可能有用的命令行选项吗?
PS 相关答案.
resources wolfram-mathematica command-line-arguments mathematica-frontend
我记得WRI的某个人在官方新闻组中表示,Mathematica 7仍然有Mathematica 5 的老式Mathematica帮助浏览器用于兼容性目的.但我找不到给出调用代码的帖子.
如何在新版本的Mathematica中调用和使用此旧版帮助浏览器?
我希望暂时重命名内置符号并使用不同的名称,同时阻止此符号的主名称.例如,我希望以下代码只打印"2"而不是"1"和"3":
Block[{print = Print, Print}, Print[1]; print[2]; Print[3];]
Run Code Online (Sandbox Code Playgroud)
实际上上面的代码什么都没打印.
是否有可能print在完全阻止符号的同时在这些代码中工作Print?
解决方案如
With[{Print = f, print = Print}, Print[1]; print[2]; Print[3];]
Run Code Online (Sandbox Code Playgroud)
不适合,因为Print在这样的代码中没有真正阻止.
在考虑禁用Message内部跟踪的方法时出现了这个问题.
如何获得与其他符号由相关的符号的所有定义TagSet,TagSetDelayed,UpSet或UpSetDelayed?
例如,如果已定义
area[square] ^= s^2
area[cube] ^= 6*s^2
Run Code Online (Sandbox Code Playgroud)
如何获取这些定义,不知道名称square,cube但只知道名称area?
我发现,UpValues不返回定义MakeBoxes和N因为它们被存储在FormatValues与NValues相应:
In[1]:= rotate /: MakeBoxes[expr_rotate, "StandardForm"] := x
UpValues[rotate]
FormatValues[rotate]
Out[2]= {}
Out[3]= {HoldPattern[MakeBoxes[expr_rotate, "StandardForm"]] :> x}
In[4]:= pi /: N[pi] = 3.14
UpValues[pi]
NValues[pi]
Out[4]= 3.14
Out[5]= {}
Out[6]= {HoldPattern[N[pi, {MachinePrecision, MachinePrecision}]] :>
3.14}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,而不是UpValues我们应该使用的组合UpValues,FormatValues和NValues.
当试图输出列表FormatValues一个能面对的问题 …
我刚刚注意到Mathematica中*Set*函数内部工作的一个未记录的特性.
考虑:
In[1]:= a := (Print["!"]; a =.; 5);
a[b] = 2;
DownValues[a]
During evaluation of In[1]:= !
Out[3]= {HoldPattern[a[b]] :> 2}
Run Code Online (Sandbox Code Playgroud)
但
In[4]:= a := (Print["!"]; a =.; 5);
a[1] = 2;
DownValues[a]
During evaluation of In[4]:= !
During evaluation of In[4]:= Set::write: Tag Integer in 5[1] is Protected. >>
Out[6]= {HoldPattern[a[b]] :> 2}
Run Code Online (Sandbox Code Playgroud)
造成这种差异的原因是什么?为什么a评估虽然Set有属性HoldFirst?为什么这种行为是有用的?
并注意这种情况:
In[7]:= a := (Print["!"]; a =.; 5)
a[b] ^= 2
UpValues[b]
a[b]
During …Run Code Online (Sandbox Code Playgroud) 美好的一天,
我之前想过,Mathematica在$Context将输入字符串(分配给InString)转换为输入表达式(分配给In)的阶段在当前创建新符号.但是一个简单的例子打破了这个解释:
In[1]:= ?f
During evaluation of In[1]:= Information::notfound: Symbol f not found. >>
In[2]:= Names["`*"]
Out[2]= {}
In[3]:= DownValues[In]//First
InString[1]
Names["`*"]
Out[3]= HoldPattern[In[1]]:>Information[f,LongForm->False]
Out[4]= \(? f\)
Out[5]= {}
Run Code Online (Sandbox Code Playgroud)
您可以看到虽然已经在内部定义中使用了符号f,$ContextPath但它没有符号In[1].
这个例子表明Mathematica原则上可以用$ContextPath不创建它们的符号来定义.这可能是使用Symbol以下方法避免符号创建的有趣替代方法:
In[9]:= ff := Symbol["f"]
Names["`*"]
Out[10]= {"ff"}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释Mathematica在哪些条件和评估过程的哪个阶段创建新符号?
至于萨沙已经注意到这个问题的评论,在我真的被欺骗的默认ShowStringCharacters->False设置为默认的样式表Core.nb输出单元,错过了FullForm输出的DownValues[In]//First.在真正的符号f中没有使用定义,In[1]因为我们也可以看到使用InputForm:
In[1]:= ?f
DownValues[In]//First//InputForm
During evaluation …Run Code Online (Sandbox Code Playgroud) 默认情况下,在评估中按Alt+ .或调用Abort[]会导致当前评估输入的中止.但是当在FrontEnd中工作时,我们通常会向内核发送一系列输入.例如,如果我们在一个单独的行中键入以下三个表达式Cell,然后按Shift+ Enter我们得到无限评估:
f := CheckAbort[Pause[.1], Abort[]]
While[True, f]
While[True, f]
While[True, f]
Run Code Online (Sandbox Code Playgroud)
要停止这种无限评估,我们必须按Alt+ .三次.
如何f在上面的例子中定义函数,按下Alt+ . 一次将中止对输入的完整序列的评估而不退出内核?
编辑
我认为如果FrontEnd为MathKernel创建一个输入队列,它可能也会取消这个队列.
我经常希望看到Mathematica的图形对象的内部表示不在其中,FullForm但更具可读性InputForm,能够通过双击选择部分代码并轻松地将此代码复制到新输入Cell.但默认情况下InputForm不允许这样做,因为InputForm默认显示为a String,而不是Mathematica的代码.有没有办法InputForm显示为Mathematica的代码?
我还经常希望看到这样的缩短版本,InputForm其中所有长坐标列表都显示为第一个坐标后跟包裹的跳过坐标值的数量Skeleton,所有空的都Lists被移除,所有数字也缩短以显示不超过6个数字.最好仅将6位数用于坐标,但对于颜色指令,例如Hue仅显示2位有效数字.例如,
Plot[{Sin[x], .5 Sin[2 x]}, {x, 0, 2 \[Pi]},
Filling -> {1 -> {2}}] // ShortInputForm
Run Code Online (Sandbox Code Playgroud)
应该给:
Graphics[GraphicsComplex[{{1.28228`*^-7, 1.28228*^-7}, <<1133>>},
{{{EdgeForm[], Directive[{Opacity[0.2], Hue[0.67, 0.6, 0.6]}],
GraphicsGroup[{Polygon[{{1133, <<578>>}}]}]},
{EdgeForm[], Directive[{Opacity[0.2], Hue[0.67, 0.6, 0.6]}],
GraphicsGroup[{Polygon[{{432, <<556>>}}]}]}}, {{Hue[0.67, 0.6,
0.6], Line[{1, <<431>>}]}, {Hue[0.91, 0.6, 0.6],
Line[{432, <<701>>}]}}}], {AspectRatio -> GoldenRatio^(-1),
Axes -> True, AxesOrigin …Run Code Online (Sandbox Code Playgroud) 如何为第一列(不包括该列中的第一行)、第一行(不包括该行中的第一个元素)以及 中的所有其他元素指定单独的对齐方式Grid?最好仅通过保留严格控制Alignment的选项来执行此操作,该选项由用于更严格目的的选项提供。GridItem[]Alignment
PS 这个问题来自上一个问题,但我希望在这里单独控制水平和垂直表格标题的对齐方式。
当试图重新创建一个InterpolationFunction由NDSolve我面临非常奇怪的问题与InterpolationOrder选项Interpolation.请考虑以下内容InterpolationFunction(文档中的示例函数):
ifun = First[
x /. NDSolve[{x'[t] == Exp[x[t]] - x[t], x[0] == 1}, x, {t, 0, 10}]]
Run Code Online (Sandbox Code Playgroud)
现在让我们尝试重建它.这是数据:
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"]
data = Transpose@{InterpolatingFunctionGrid[ifun],
InterpolatingFunctionValuesOnGrid[ifun]};
Run Code Online (Sandbox Code Playgroud)
这是InterpolationOrder:
interpolationOrder = InterpolatingFunctionInterpolationOrder[ifun]
(*=> {3}*)
Run Code Online (Sandbox Code Playgroud)
现在我们尝试构建InterpolatingFunction:
Interpolation[data, InterpolationOrder -> interpolationOrder];
Run Code Online (Sandbox Code Playgroud)
并得到错误Message:
Interpolation :: inord:选项的值InterpolationOrder - > {3}应该是一个非负的机器大小的整数或一个长度等于维数的整数列表,1.>>
但如果我们InterpolationOrder用手指定,那就没关系:
Interpolation[data, InterpolationOrder -> {3}]
(*=> InterpolatingFunction[{{0.,0.516019}},<>]*)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么InterpolationOrder -> interpolationOrder在工作时不起作用InterpolationOrder -> {3}虽然interpolationOrder必须用 …
如何创建一个Button只有当某个全局FrontEnd设置的值是,False并且Column在按下它后将整个行自我毁坏并将其设置为True?
我需要这样的东西:
Column[{"Item 1", "Item 2",
Dynamic[If[
Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False,
Button["Press me!",
SetOptions[$FrontEnd, "VersionedPreferences" -> True]],
Sequence @@ {}]]}]
Run Code Online (Sandbox Code Playgroud)
但是使用此代码Button后,按下它后不会消失.是否有可能使其具有自我毁灭性?
基于belisarius和mikuszefski的想法的最终解决方案:
PreemptProtect[SetOptions[$FrontEnd, "VersionedPreferences" -> False];
b = True];
Dynamic[Column[
Join[{"Item 1", "Item 2"},
If[Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False &&
b == True, {Button[
Pane[Style[
"This FrontEnd uses shared preferences file. Press this \
button to set FrontEnd to use versioned preferences file (all the \
FrontEnd …Run Code Online (Sandbox Code Playgroud) 这个问题的灵感来自于Mathematica中由于中间计算结果的内部缓存而导致的内存泄漏问题.所有这些都没有记录,但对于运行内存密集型计算的任何人来说都很重要.
当试图理解内部缓存机制的逻辑时,我发现了一些有趣的东西.考虑以下:
$HistoryLength = 0;
(*dummy command for loading of the Root package*)
Root[# &, 1];
d = 13;
f[z_, i_] := Sum[(2 Mod[Floor[(i - 1)/2^k], 2] - 1) z^(d - k), {k, 0, d}];
(memLog = Flatten[
Table[Root[f[z, i], j]; {SessionTime[], MemoryInUse[]/1024.^2}, {j, 1,
d}, {i, 1, 2^d}], 1];) // Timing
pl1 = ListLinePlot[memLog,
FrameLabel -> {"SessionTime, sec", "MemoryInUse, Mb"}, PlotRange -> All,
Frame -> True, Axes -> False]
pl2 = ListLinePlot[memLog[[All, 2]],
FrameLabel -> …Run Code Online (Sandbox Code Playgroud) resources ×1