这个问题让我开始思考Mathematica如何检测多个绘制的函数.我发现我真的不明白这个过程.
考虑:
Plot[{1, Sequence[2, 3], 4}, {x, 0, 1}, PlotRange -> {0, 5}]
Run Code Online (Sandbox Code Playgroud)
我可以理解,Plot
最初在列表中找到三个元素,但它如何"知道"样式2
和3
相同?就好像存在这两个元素来自哪个起始列表部分的记忆.这是如何运作的?
在Mathematica中有两种明显的方法来构建链表,"左":
{1, {2, {3, {4, {5, {6, {7, {}}}}}}}}
Run Code Online (Sandbox Code Playgroud)
并且"正确":
{{{{{{{{}, 7}, 6}, 5}, 4}, 3}, 2}, 1}
Run Code Online (Sandbox Code Playgroud)
这些可以用:
toLeftLL = Fold[{#2, #} &, {}, Reverse@#] & ;
toRightLL = Fold[List, {}, Reverse@#] & ;
Run Code Online (Sandbox Code Playgroud)
如果我使用这些,并简单ReplaceRepeated
地浏览链表,我会得到截然不同的Timing
结果:
r = Range[15000];
left = toLeftLL@r;
right = toRightLL@r;
Timing[i = 0; left //. {head_, tail_} :> (i++; tail); i]
Timing[i = 0; right //. {tail_, head_} :> (i++; tail); i]
(* Out[6]= {0.016, 15000} *)
(* Out[7]= {5.437, 15000} …
Run Code Online (Sandbox Code Playgroud) 在准备一个答案来计算列表在Mathematica中有多少不同的值时,我遇到了两个不稳定(缺乏一个更好的术语)DeleteDuplicates
并且Tally
我不明白.
先考虑一下:
a = {2.2000000000000005, 2.2, 2.1999999999999999};
a // InputForm
DeleteDuplicates@a // InputForm
Union@a // InputForm
Tally@a // InputForm
Run Code Online (Sandbox Code Playgroud)
{2.2000000000000006`, 2.2, 2.1999999999999997`}
{2.2000000000000006`, 2.2, 2.1999999999999997`}
{2.1999999999999997`, 2.2, 2.2000000000000006`}
{{2.2000000000000006`, 3}}
这种行为正如我在每种情况下所预期的那样. Tally
补偿微小的数值差异,并将每个元素看作是等价的. Union
并将DeleteDuplicates
所有元素视为唯一.(据Tally
我所知,这种行为没有记录,但我之前已经使用过它.)
现在,考虑一下这个并发症:
a = {11/5, 2.2000000000000005, 2.2, 2.1999999999999997};
a // InputForm
DeleteDuplicates@a // InputForm
Union@a // InputForm
Tally@a // InputForm
Run Code Online (Sandbox Code Playgroud)
{11/5, 2.2000000000000006, 2.2, 2.1999999999999997}
{11/5, 2.2000000000000006, 2.2}
{2.1999999999999997, 2.2, 11/5, 2.2000000000000006}
{{11/5, 1}, {2.2000000000000006, 1}, {2.2, …
我最近从mathematica 7.0更新到8.0,现在遇到使用psfrag包用LaTeX代码替换我的绘图标签的问题.一切都与早期版本和完全相同的图表完美配合,但现在psfrag保持所有标签不变.我在Ubuntu 11.04上使用Kile进行LaTeX编辑.
例如,在Mathematica中:
plot = Plot[x, {x, -0.1, 0.1},
AxesLabel -> {eps, SUM}, BaseStyle -> {FontSize -> 10}]
Export["plot.eps", plot]
Run Code Online (Sandbox Code Playgroud)
然后在LaTeX:
\begin{figure}
\psfrag{eps}{$\epsilon$}
\psfrag{SUM}{$\Sigma$}
\includegraphics{plot.eps}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
现在应该用LaTeX排版替换标签,但没有任何反应.有什么建议如何解决这个问题?有谁知道Mathematica 8如何编码eps文件中的文本与早期版本相比有何不同?
有没有人知道Mathematica中是否有内置函数来获取低值规则的lhs(没有任何持有)?我知道如何编写代码来实现它,但对于内置代码来说它似乎已经基本了
例如:
a[1]=2;
a[2]=3;
Run Code Online (Sandbox Code Playgroud)
BuiltInIDoNotKnowOf[a]
回报 {1,2}
IntegerPartitions[n, {3, 10}, Prime ~Array~ 10]
Run Code Online (Sandbox Code Playgroud)
在Mathematica中,这将列出所有方法,将n作为前十个素数中三到十的总和,允许根据需要重复.
如何有效地找到等于n的总和,允许每个元素只使用一次?
使用前十个素数只是一个玩具的例子.我寻求一个对任意参数有效的解决方案.在实际情况下,即使使用多项式系数,生成所有可能的和也会占用太多内存.
我忘了包括我正在使用Mathematica 7.
我想在Mathematica 7中设置以下自定义表示法.
这种表示法本身并不特别有用,所以请不要提出现有的替代方案,或者指出这只能节省一些按键.
我想知道是否以及如何做到这一点.
目前,人们可以进入
f = #2 + #^2 / #3 & @@ # & ;
f[ {a, b, c} ]
Out[]= b + a^2 / c
Run Code Online (Sandbox Code Playgroud)
其中内部函数#^2 / #3 + #2 &
是Apply
第一个参数.
我想实现语法
f = #2 + #^2 / #3 @@& ;
Run Code Online (Sandbox Code Playgroud)
并使它的行为完全相同.也就是说,@@&
表示一个Function
自动应用于其第一个参数的.
它需要与 符号具有相同的绑定&
.
优选的是,尽管使用更难以通过文本进行通信,但是为了便于设置类似的符号,Notations
这可以在尽可能的程度上而不是手动MakeBoxes
的情况下完成Notations
.
我刚注意到如果你在MMA(8.0.1/win7-64)中有这个:
然后你把它复制到SO(只是ctrl-c ctrl-v),你得到这个:
(maxY - minY)/stepy/(maxX - minX)/stepx
Run Code Online (Sandbox Code Playgroud)
这在数学上是等价的.它应该是这样的:
((maxY - minY)/stepy)/((maxX - minX)/stepx)
Run Code Online (Sandbox Code Playgroud)
或者这个(InputForm
以上):
((maxY - minY)*stepx)/((maxX - minX)*stepy)
Run Code Online (Sandbox Code Playgroud)
它不是由StackOverflow的内部引起的,因为与NotePad的副本相同.
是否有更多这样的问题(特别是在使用SO时,一般情况下)我们应该注意什么?
是什么导致这种情况,可以在我们这边修好,如果没有,最好的解决办法是什么?
该功能MapAll
被看作是重要的,足以保证短表//@
,但我很少使用它,尤其是相对于其他人一样/@
,/.
和@@@
我用几乎无处不在.
什么样的应用最好地利用MapAll
?
它主要用于某些领域或编程风格吗?
与其他运营商相比,它可以多久使用一次?
添加了Mathematica 6 TakeWhile
,其语法如下:
TakeWhile [ list,crit ] 从列表的开头给出元素e i,只要crit [e i ]为True就继续.
但是没有相应的"DropWhile"功能.可以使用LengthWhile
和构建DropWhile Drop
,但似乎不鼓励人们使用DropWhile.为什么是这样?
为了澄清,我不是要求一种方法来实现这个功能.相反:它为什么不存在?在我看来,除了监督之外,必须有理由让它缺席,否则现在就会纠正.DropWhile有什么低效,不合需要或多余的东西吗?
关于DropWhile的功能似乎有些含糊不清,所以这里有一个例子:
DropWhile = Drop[#, LengthWhile[#, #2]] &;
DropWhile[{1,2,3,4,5}, # <= 3 &]
Run Code Online (Sandbox Code Playgroud)
Out= {4, 5}