小编Sim*_*mon的帖子

在Mathematica中绘制复杂函数

如何创建一个Mathematica图形来复制sage 中complex_plot的行为?即

...获取一个变量的复杂函数,并在指定的xrange和yrange上绘制函数的输出,如下所示.输出的大小由亮度表示(零为黑色,无穷大为白色),而参数由色调表示(红色为正实,红色增加,黄色,......随着参数增加) .

这是zeta函数的一个例子(从中性漂移的M.Hilton那里偷来的),其覆盖的绝对值轮廓:

zeta函数complex_plot

在数学文档页面功能复杂的变量,它说,你可以使用可视化复杂的功能ContourPlotDensityPlot"潜在的阶段着色".但问题在于两种类型的图,ColorFunction只需要一个等于该点的轮廓或密度的变量 - 所以在绘制绝对值时,似乎不可能使相位/参数着色.请注意,这不是传递Plot3D所有3个参数的问题.(x,y,z)ColorFunction

我知道还有其他方法来可视化复杂的功能 - 例如Plot3D文档中的"简洁示例" ,但这不是我想要的.

此外,我确实有一个解决方案(实际上已经用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的功能,我认为应该可以使用像ContourPlot或的高级函数DensityPlot.并不是说这应该阻止你提供你最喜欢的方法,使用较低级别的结构!


编辑: Michael Trott在Mathematica杂志上发表了一些很好的文章:
可视化代数函数的黎曼曲面,IIa,IIb,IIc,IId.
可视化黎曼曲面演示.
黎曼曲面的返回(Mma v6的更新)

当然,Michael Trott编写了Mathematica指南书,其中包含许多漂亮的图形,但似乎已经落后于加速的Mathematica发布时间表!

plot visualization wolfram-mathematica complex-numbers

22
推荐指数
3
解决办法
2万
查看次数

防止评估Mathematica表达式

在最近的SO问题中,提供了三个不同的答案,每个答案使用不同的方法来防止Equal[]表达的评估.他们是

  1. Defer[]
  2. Unevaluated[]
  3. HoldForm[]

有时我仍然无法在这些选项之间进行选择(并且根据前面提到的问题的答案判断,对于其他人来说,选择并不总是清楚的).有人能否就这三种方法的使用写清楚的说明?


还有其他三个包装 Hold[], HoldPattern[], HoldComplete[],和各种Attributes的功能 HoldAll,HoldFirst,HoldRest和数字版本,NHold*即也可以讨论,如果你想!

编辑

我只是注意到这基本上是旧问题的重复(我已经投了很多,只是忘了...).在1999年Mathematica开发者大会上,这个讲话被接受的答案Defer与之相关,因为它是"6中的新人".Defer与其他评估控制机制相比,它与前端的联系更紧密.它用于创建未评估的输出,如果提供和Input表达式,将对其进行评估.引用文档中心:

Defer [expr]返回一个保持不变的对象,直到它作为Mathematica输入显式提供,并使用Shift + Enter,就地评估等进行评估.

wolfram-mathematica

15
推荐指数
2
解决办法
3689
查看次数

Mathematica中的多图8

我花了几个小时试图转换一些使用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-mathematica graph

15
推荐指数
2
解决办法
3489
查看次数

如何在Mathematica中获得Wolfram | Alpha 2D图形的十字线行为?

当鼠标光标位于Wolfram | Alpha中的2D绘图上时,会出现一对灰色线条,帮助您读取x和y轴的坐标. 例如,我将鼠标放在Airy功能的下图中的一个转折点上.

卷筒纸

以上也可以在Mathematica中使用

WolframAlpha["Plot Ai(x)", {{"Plot", 1}, "Content"}]
Run Code Online (Sandbox Code Playgroud)

铌

它具有显示坐标的某种定位器的附加优势.


如何在普通的Mathematica图形/绘图中模拟这种行为?

wolfram-mathematica wolframalpha

15
推荐指数
3
解决办法
1522
查看次数

如何导出Mathematica Graph对象的更高分辨率图像?

如何将从调用中获得的输出的重新调整版本GraphPlot (或者TreePlot如果它们产生不同的输出)导出到jpg文件?
目前,我只是Export[file_name, G]G调用类似的调用结果GraphPlot.我正在使用Microsoft office图片管理器来查看jpgs,但是由于分辨率较差,重新缩放它们会产生令人不满意的结果(我试图绘制的图表将字符串作为标签,这些标签在重新缩放之后无法制作出来).我希望能够选择渲染的jpg的大小/分辨率.

wolfram-mathematica graph

15
推荐指数
3
解决办法
2万
查看次数

Mathematica中Clear和Remove之间的区别

在Mathematica中,ClearAll的文档指出:

ClearAll[symb1, symb2, ...]
使用符号清除值,定义,属性,消息和默认值.

它还支持类似的格式,它可以清除与输入字符串模式匹配的任何值/定义:

ClearAll["form1", "form2", ...]
Run Code Online (Sandbox Code Playgroud)

但是还有函数Remove,文档说:

Remove[symbol1, ...]
完全删除符号,以便Mathematica不再识别它们的名称.

它还支持相同的基于模式的字符串输入ClearAll.

对我来说,似乎两个功能完全相同.使用其中一个有什么实际区别吗?

我知道,如果我举一个属性的象征,Clear不会删除,但ClearAllRemove意志.但似乎Remove并且ClearAll正在做同样的事情.

wolfram-mathematica

13
推荐指数
1
解决办法
2133
查看次数

如何在Mathematica中定义新的数字常量?

在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.

所以我的问题是,我还应该做些什么来定义数值常数?可以设置哪些其他属性/属性?有没有更简单的方法来解决这个问题?等等...

wolfram-mathematica

11
推荐指数
1
解决办法
3054
查看次数

Mathematica使用的默认哈希码是什么?

在线文档说

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)

它还提供" 可能的哈希代码类型":

  • "Adler32"Adler 32位循环冗余校验
  • "CRC32"32位循环冗余校验
  • "MD2"128位MD2代码
  • "MD5"128位MD5代码
  • "SHA"160位SHA-1代码
  • "SHA256"256位SHA代码
  • "SHA384"384位SHA代码
  • "SHA512"512位SHA代码

然而,这些都不对应于返回的默认值Hash[expr].

所以我的问题是:

  • 默认Hash使用什么方法?
  • 是否内置了其他哈希码?

hash wolfram-mathematica

10
推荐指数
2
解决办法
779
查看次数

如何在格式/解释Mathematica构造中停止发生递归?

这个问题是迈克尔·皮拉特在预防"加号"中重新安排事情所给出的答案.他在那里定义了一个自定义+符号

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类型命令高级等效?

wolfram-mathematica

10
推荐指数
1
解决办法
768
查看次数

在Mathematica中打印符号名称和值

我想创建一个函数My`Print[args__]来打印我传递它的符号的名称及其值.问题是在传递符号之前,会对My`Print它们进行评估.所以My`Print永远不要看到符号名称.

一个解决方案是围绕每一个我传递给说法My`PrintUnevaluated[],不过这看起来凌乱.有没有一种定义MACRO的方法,当我输入时My`Print[args__],Mathematica内核会看到My`Print[Unevaluated /@ args__]

macros wolfram-mathematica

10
推荐指数
5
解决办法
2472
查看次数