小编Mr.*_*ard的帖子

Mathematica图中多个函数的检测和样式

这个问题让我开始思考Mathematica如何检测多个绘制的函数.我发现我真的不明白这个过程.

考虑:

Plot[{1, Sequence[2, 3], 4}, {x, 0, 1}, PlotRange -> {0, 5}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我可以理解,Plot最初在列表中找到三个元素,但它如何"知道"样式23相同?就好像存在这两个元素来自哪个起始列表部分的记忆.这是如何运作的?

plot wolfram-mathematica

12
推荐指数
2
解决办法
987
查看次数

左对右链表,替换速度

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

optimization wolfram-mathematica linked-list

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

DeleteDuplicates和Tally中的不稳定性

在准备一个答案来计算列表在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, …

precision wolfram-mathematica duplicates

11
推荐指数
2
解决办法
450
查看次数

mathematica 8.0和psfrag

我最近从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文件中的文本与早期版本相比有何不同?

latex wolfram-mathematica mathematica-8

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

Mathematica Downvalue Lhs

有没有人知道Mathematica中是否有内置函数来获取低值规则的lhs(没有任何持有)?我知道如何编写代码来实现它,但对于内置代码来说它似乎已经基本了

例如:

a[1]=2;
a[2]=3;
Run Code Online (Sandbox Code Playgroud)

BuiltInIDoNotKnowOf[a] 回报 {1,2}

wolfram-mathematica

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

IntegerPartition的变体?

IntegerPartitions[n, {3, 10}, Prime ~Array~ 10]
Run Code Online (Sandbox Code Playgroud)

在Mathematica中,这将列出所有方法,将n作为前十个素数中三到十的总和,允许根据需要重复.

如何有效地找到等于n的总和,允许每个元素只使用一次

使用前十个素数只是一个玩具的例子.我寻求一个对任意参数有效的解决方案.在实际情况下,即使使用多项式系数,生成所有可能的和也会占用太多内存.

我忘了包括我正在使用Mathematica 7.

wolfram-mathematica

10
推荐指数
3
解决办法
826
查看次数

自定义后缀表示法,应用/功能

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

customization wolfram-mathematica notation

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

将代码从Mathematica复制到其他平台的已知问题?

我刚注意到如果你在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时,一般情况下)我们应该注意什么?

是什么导致这种情况,可以在我们这边修好,如果没有,最好的解决办法是什么?

wolfram-mathematica mathematica-frontend

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

用于MapAll(// @)

该功能MapAll被看作是重要的,足以保证短表//@,但我很少使用它,尤其是相对于其他人一样/@,/.@@@我用几乎无处不在.

  • 什么样的应用最好地利用MapAll

  • 它主要用于某些领域或编程风格吗?

  • 与其他运营商相比,它可以多久使用一次?

wolfram-mathematica

10
推荐指数
3
解决办法
600
查看次数

Mathematica中的DropWhile在哪里?

添加了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}

wolfram-mathematica

9
推荐指数
2
解决办法
449
查看次数