如何创建一个Mathematica图形来复制sage 中complex_plot的行为?即
...获取一个变量的复杂函数,并在指定的xrange和yrange上绘制函数的输出,如下所示.输出的大小由亮度表示(零为黑色,无穷大为白色),而参数由色调表示(红色为正实,红色增加,黄色,......随着参数增加) .
这是zeta函数的一个例子(从中性漂移的M.Hilton那里偷来的),其覆盖的绝对值轮廓:

在数学文档页面功能复杂的变量,它说,你可以使用可视化复杂的功能ContourPlot和DensityPlot"潜在的阶段着色".但问题在于两种类型的图,ColorFunction只需要一个等于该点的轮廓或密度的变量 - 所以在绘制绝对值时,似乎不可能使相位/参数着色.请注意,这不是传递Plot3D所有3个参数的问题.(x,y,z)ColorFunction
我知道还有其他方法来可视化复杂的功能 - 例如Plot3D文档中的"简洁示例" ,但这不是我想要的.
此外,我确实有一个解决方案(实际上已经用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的功能,我认为应该可以使用像ContourPlot或的高级函数DensityPlot.并不是说这应该阻止你提供你最喜欢的方法,使用较低级别的结构!
编辑: Michael Trott在Mathematica杂志上发表了一些很好的文章:
可视化代数函数的黎曼曲面,IIa,IIb,IIc,IId.
可视化黎曼曲面演示.
黎曼曲面的返回(Mma v6的更新)
当然,Michael Trott编写了Mathematica指南书,其中包含许多漂亮的图形,但似乎已经落后于加速的Mathematica发布时间表!
在最近的SO问题中,提供了三个不同的答案,每个答案使用不同的方法来防止Equal[]表达的评估.他们是
Defer[]Unevaluated[]HoldForm[]有时我仍然无法在这些选项之间进行选择(并且根据前面提到的问题的答案判断,对于其他人来说,选择并不总是清楚的).有人能否就这三种方法的使用写清楚的说明?
还有其他三个包装
Hold[],
HoldPattern[],
HoldComplete[],和各种Attributes的功能
HoldAll,HoldFirst,HoldRest和数字版本,NHold*即也可以讨论,如果你想!
我只是注意到这基本上是旧问题的重复(我已经投了很多,只是忘了...).在1999年Mathematica开发者大会上,这个讲话被接受的答案Defer与之相关,因为它是"6中的新人".Defer与其他评估控制机制相比,它与前端的联系更紧密.它用于创建未评估的输出,如果提供和Input表达式,将对其进行评估.引用文档中心:
Defer [expr]返回一个保持不变的对象,直到它作为Mathematica输入显式提供,并使用Shift + Enter,就地评估等进行评估.
我花了几个小时试图转换一些使用Mathematica 7的旧代码GraphPlot来使用新的Mathematica 8 Graph函数.这似乎是明智的,因为新的图形绘制更好,它有像KirchhoffMatrixAdjacencyMatrix和内置的东西.
问题是我无法弄清楚如何在Mma 8中使用多边的图形.
我用作规范示例的Feynman图是双回路真空图
GraphPlot[{1 -> 2, 1 -> 2, 1 -> 2}, MultiedgeStyle -> .5,
DirectedEdges -> True, VertexCoordinateRules -> {{-1, 0}, {1, 0}}]
Run Code Online (Sandbox Code Playgroud)

试图在Mma 8中制作类似的图表
Graph[{DirectedEdge[1, 2], DirectedEdge[1, 2], DirectedEdge[1, 2]},
VertexCoordinates -> {{-1, 0}, {1, 0}}]
Run Code Online (Sandbox Code Playgroud)
产生错误消息
Graph::supp: Mixed graphs and multigraphs are not supported. >>
Run Code Online (Sandbox Code Playgroud)
如何使用Mathematica 8的Graph[]对象构建(和使用)类似的图形?
编辑: Mathematica 9中仍存在此问题
当鼠标光标位于Wolfram | Alpha中的2D绘图上时,会出现一对灰色线条,帮助您读取x和y轴的坐标. 例如,我将鼠标放在Airy功能的下图中的一个转折点上.

以上也可以在Mathematica中使用
WolframAlpha["Plot Ai(x)", {{"Plot", 1}, "Content"}]
Run Code Online (Sandbox Code Playgroud)

它具有显示坐标的某种定位器的附加优势.
如何在普通的Mathematica图形/绘图中模拟这种行为?
如何将从调用中获得的输出的重新调整版本GraphPlot
(或者TreePlot如果它们产生不同的输出)导出到jpg文件?
目前,我只是Export[file_name, G]
在G调用类似的调用结果GraphPlot.我正在使用Microsoft office图片管理器来查看jpgs,但是由于分辨率较差,重新缩放它们会产生令人不满意的结果(我试图绘制的图表将字符串作为标签,这些标签在重新缩放之后无法制作出来).我希望能够选择渲染的jpg的大小/分辨率.
在Mathematica中,ClearAll的文档指出:
ClearAll[symb1, symb2, ...]
使用符号清除值,定义,属性,消息和默认值.
它还支持类似的格式,它可以清除与输入字符串模式匹配的任何值/定义:
ClearAll["form1", "form2", ...]
Run Code Online (Sandbox Code Playgroud)
但是还有函数Remove,文档说:
Remove[symbol1, ...]
完全删除符号,以便Mathematica不再识别它们的名称.
它还支持相同的基于模式的字符串输入ClearAll.
对我来说,似乎两个功能完全相同.使用其中一个有什么实际区别吗?
我知道,如果我举一个属性的象征,Clear不会删除,但ClearAll和Remove意志.但似乎Remove并且ClearAll正在做同样的事情.
在Mathematica中定义数值常量的最佳方法是什么?
例如,假设我想g成为地球表面引力引起的近似加速度.我给它一个数值(in m/s^2),告诉Mathematica它是数字,正数和常数使用
Unprotect[g];
ClearAll[g]
N[g] = 9.81;
NumericQ[g] ^= True;
Positive[g] ^= True;
SetAttributes[g, Constant];
Protect[g];
Run Code Online (Sandbox Code Playgroud)
然后我可以将它用作符号计算中的符号,当需要数值结果时,它将自动计算到9.81.例如,1.0 g评估为9.81.
这似乎与数学常量中内置的Mathematica无关.例如,Pi > 0将评估True,但g > 0不会.(我可以添加g > 0到全局$Assumptions但是我需要调用才能Simplify使它生效.)此外,Positive[g]返回True,但Positive[g^2]不评估 - 将其与使用的等效语句进行比较Pi.
所以我的问题是,我还应该做些什么来定义数值常数?可以设置哪些其他属性/属性?有没有更简单的方法来解决这个问题?等等...
在线文档说
Hash[expr]
gives an integer hash code for the expression expr.
Hash[expr,"type"]
gives an integer hash code of the specified type for expr.
Run Code Online (Sandbox Code Playgroud)
它还提供" 可能的哈希代码类型":
然而,这些都不对应于返回的默认值Hash[expr].
所以我的问题是:
Hash使用什么方法?这个问题是迈克尔·皮拉特在预防"加号"中重新安排事情所给出的答案.他在那里定义了一个自定义+符号
Format[myPlus[expr__]] := Row[Riffle[{expr}, "+"]]
Run Code Online (Sandbox Code Playgroud)
这个问题是你不能复制和粘贴输出(虽然%或Out []仍然有效).为了解决这个问题,你应该使用Interpretation类型工具,它允许表达式显示为一个东西,但在作为输入提供时被解释为另一个.我对迈克尔答案的修改是
Format[myPlus[expr__]] := Interpretation[Row[{expr}, "+"], myPlus[expr]]
Run Code Online (Sandbox Code Playgroud)
这可以成功复制和粘贴.问题在于修改复制的表达式.您可以将复制的表达式转换回InputForm使用Ctrl-Shift-I然后更改所需的任何内容并使用InputForm任何表达式.但是如果你试图将它改回StandardForm使用,Ctrl-Shift-N那么你输入一个递归,其中Interpretation重复的第二个参数被评估.这是尽管Interpretation具有属性HoldAll(在正常评估期间正常工作).
通常,在定义简单符号时,我使用低级MakeBoxes,例如
myPlus/:MakeBoxes[myPlus[expr__],fmt_]:=With[{r=Riffle[MakeBoxes/@{expr},"+"]},
InterpretationBox[RowBox[r],myPlus[expr]]]
Run Code Online (Sandbox Code Playgroud)
哪个工作完美,所以我之前没有遇到过这个递归问题.
所以我的问题(最后)是:我的Format类型命令出了什么问题,它怎么能修复?或者:你如何使我的MakeBoxes类型命令高级等效?
我想创建一个函数My`Print[args__]来打印我传递它的符号的名称及其值.问题是在传递符号之前,会对My`Print它们进行评估.所以My`Print永远不要看到符号名称.
一个解决方案是围绕每一个我传递给说法My`Print有Unevaluated[],不过这看起来凌乱.有没有一种定义MACRO的方法,当我输入时My`Print[args__],Mathematica内核会看到My`Print[Unevaluated /@ args__]?