|
|
1
29
我说过了
this
以前,但我发现最有用的工具是
这允许我按任何条件对列表进行分组,并在过程中对它们进行转换。它的工作方式是(
作为其效用的一个例子,我一直在与 Wannier90 它将空间相关的哈密顿量输出到一个文件中,其中每一行是矩阵中的不同元素,如下所示
为了将该列表转换为一组矩阵,我收集了包含相同坐标的所有子列表,将元素信息转换为规则(即{I,j}->Re[Hij]+I Im[Hij]),然后将收集的规则转换为
老实说,这是我的瑞士军刀,它使复杂的事情变得非常简单。我的大多数其他工具都是特定于领域的,所以我可能不会发布它们。然而,大多数,如果不是全部的话,他们提到
编辑
:它没有完全模仿
例子 :@Yaroslav Bulatov要求一个独立的例子。这是我的研究中的一个被大大简化了的。假设我们在平面上有一组点
我们想通过一组对称运算来减少点数。(出于好奇,我们正在生成 little group 对于这个例子,让我们使用绕Z轴的四倍旋转轴。
使用
它产生3个子列表,包含等价点。(注,
注意,最后一步同样可以通过
但是,使用这个示例和上面不太完整的示例很容易看出使用最少的代码可以实现多么复杂的转换。 |
|
|
2
57
Mathematica笔记本界面的一个优点是它可以计算 任何 语言,不仅仅是数学。作为一个简单的例子,考虑创建一个新的 外壳 输入单元格类型,将包含的表达式传递给操作系统外壳程序进行计算。 首先,定义一个函数,将文本命令的求值委托给外部shell:
第二个论点是必要的,并被忽略,其原因将在稍后变得显而易见。接下来,我们要创建一个名为 外壳 :
使用以下单元格表达式作为 步骤6文本 :
这个表达式的大部分是直接从内置的 程序 风格。主要变化如下:
所有这些就绪后,我们现在可以输入和计算shell表达式:
最好将此定义的样式保存在位于中心位置的样式表中。此外,评估功能包括
使用此功能,可以创建包含任何感兴趣语法的输入表达式的笔记本。评估函数可以用纯Mathematica编写,也可以将评估的任何或所有部分委托给外部机构。请注意,还有其他与单元格计算相关的挂钩,如
一种常见的模式包括将输入表达式文本写入临时文件、用某种语言编译文件、运行程序和捕获输出以最终显示在输出单元格中。在实现这种完整的解决方案时,有很多细节需要处理(比如正确地捕获错误消息),但是必须认识到这样做不仅是可能的,而且是实际可行的。 就个人而言,正是这些特性使得笔记本界面成为我编程领域的中心。 更新 以下助手函数对于创建此类单元格非常有用:
因此:
现在,如果
|
|
|
3
35
Todd Gayley(Wolfram Research)刚刚给我发了一个不错的黑客程序,允许用任意代码“包装”内置函数。我觉得我必须分享这个有用的工具。下面是托德对我的回答
|
|
|
4
25
这不是一个完整的资源,所以我把它放在这里的答案部分,但我发现它在解决速度问题时非常有用(不幸的是,这是Mathematica编程的一个重要部分)。
用法很简单
编辑:Wizard先生提供了一个更简单的版本
|
|
|
5
20
|
|
|
6
19
Mathematica是一个锋利的工具,但它可以用它的一些 untyped behaviour 和 avalanches 神秘的 diagnostic messages . 处理此问题的一种方法是按照此习惯用法定义函数:
这是很多样板,我经常想跳过。尤其是原型设计,在Mathematica中经常发生。所以,我使用一个宏
基本用法
一开始看起来不太像,但有一些隐藏的好处。第一次服务
第二个服务是定义的函数自动“关闭”。我的意思是,如果调用函数时使用的参数列表与以下定义之一不匹配,则该函数将发出消息并中止:
这是
另一个方便的方法是在定义的函数上指定属性。让我们做个函数
除了所有的正常属性,
可以为函数定义多个属性:
不用再费吹灰之力,这里是
所展示的实现既不支持up值也不支持curring,也不支持比简单函数定义更通用的模式。不过,它仍然有用。 |
|
|
7
16
开始时不打开空白笔记本
我被打开一个空白笔记本开始Mathematica而困扰。我可以用脚本关闭这个笔记本,但它仍然会短暂地闪开。我的诀窍是创建一个文件
把这个加到我的
我现在开始数学家
也许有更好的办法,但这对我很有帮助。
定制的
|
|
|
8
14
通用PDF/EMF导出问题及解决方案
1) 这是完全出乎意料的,没有记录,但是
数学软件
使用一组与在屏幕上显示笔记本不同的样式定义,以PDF和EPS格式导出和保存图形。默认情况下,笔记本电脑显示在“工作”样式环境的屏幕上(这是
2) 导出为EMF格式的常见问题是大多数程序(不仅是
数学软件
)生成一个文件,该文件在默认大小下看起来不错,但放大时会变得很难看。是因为
metafiles are sampled at screen resolution fidelity
. 生成的EMF文件的质量可以通过
如果将这些文件插入Microsoft Word并放大,您将看到第一个“a”上有锯齿,而第二个没有(用 数学软件 6) 是的。
另一条路穿过
3) 在
数学软件
我们有三种方法可以将图形转换为元文件:via
|
|
|
9
13
根据大众的需求,生成前十名的代码,所以答案的情节(除了 annotations )使用 SO API .
|
|
|
10
13
缓存表达式我发现这些函数对缓存任何表达式都非常有用。这两个函数的有趣之处在于,与mathematica中众所周知的记忆相比,持有表达式本身被用作哈希表/符号缓存或缓存索引的键,在mathematica中,只有当函数定义为f[x]:=f[x]=。。。所以你可以缓存代码的任何部分,如果一个函数要被多次调用,这很有用,但是代码的某些部分不能被重新计算。 独立于参数缓存表达式。
表达式第二次返回6而不等待。 使用可以依赖于缓存表达式的参数的别名表达式缓存表达式。
如果expr需要一些时间来计算,那么计算{“f”,2}要快得多,例如检索缓存的结果。 为了有一个本地化的缓存(即缓存内存在块构造之外自动释放),这些函数的变体见本文 Avoid repeated calls to Interpolation 删除缓存值在不知道函数定义的数目时删除缓存值。我认为这些定义在它们的论点中有些地方是空白的。
在知道函数定义的数量时删除缓存值(速度稍快)。
这使用了这样一个事实:函数的定义在它们的DownValues列表的末尾,缓存的值在前面。 使用符号存储数据和类对象函数这里还有一些有趣的函数来使用象对象这样的符号。 众所周知,可以将数据存储在符号中,并使用DownValues快速访问它们
您可以使用以下函数访问符号的键(或属性)列表,这些函数基于在本网站的帖子中提交的数据:
我经常使用这个函数来显示符号的DownValues中包含的所有信息:
最后,这里有一个简单的方法来创建一个在面向对象编程中表现得像对象的符号(它只是再现了OOP最基本的行为,但我发现语法很优雅):
属性作为DownValues存储,方法作为延迟的Upvalues存储在由返回的模块创建的符号中。我发现function2的语法是 Tree data structure in Mathematica . 对于每个符号的现有值类型列表,请参阅 http://reference.wolfram.com/mathematica/tutorial/PatternsAndTransformationRules.html 和 http://www.verbeia.com/mathematica/tips/HTMLLinks/Tricks_Misc_4.html . 例如,试试这个
如果要使用此处提供的名为InheritRules的包来模拟对象继承,则可以更进一步 http://library.wolfram.com/infocenter/MathSource/671/ 还可以将函数定义存储在类型符号中,而不是存储在newObject中,因此如果newObject返回类型[newObject]而不是newObject,则可以这样定义函数和函数2 在NewObject的外部(而不是内部),并具有与以前相同的用法。
使用UpValues[type]查看在类型符号中定义的函数和函数2。 关于最后一个语法的进一步想法将在这里介绍 https://mathematica.stackexchange.com/a/999/66 。 SelectEquivalent的改进版本@rcollyer:非常感谢您将selectequivalent带到了表面,这是一个令人惊奇的功能。 下面是上面列出的selectequalifications的改进版本,它具有更多的可能性和使用选项,这使它更易于使用。
以下是如何使用此版本的示例: Using Mathematica Gather/Collect properly How would you do a PivotTable function in Mathematica? Mathematica fast 2D binning algorithm 内部`BagDaniel Lichtblau在这里描述了一个有趣的内部数据结构,用于不断增长的列表。 Implementing a Quadtree in Mathematica 调试函数这两篇文章指出了调试的有用功能: 下面是另一个基于Reap和Sow的函数,用于从程序的不同部分提取表达式并将其存储在符号中。
这里有一个例子
其他资源以下是学习目的的有趣链接列表: |
|
|
11
12
我的实用程序函数(我将这些函数内置到MASH中,这在问题中提到):
|
|
|
12
11
我使用的一个技巧是,允许您模拟大多数内置函数处理错误参数的方式(通过发送消息,然后返回未评估的整个表单),它利用了一种奇怪的方式
如果您有更复杂的需求,那么很容易将参数验证和消息生成作为一个独立的函数来考虑。你可以通过使用
另外,在“元编程”类别中,如果您有Mathematica包(
最后,你可以利用这个事实
现在,您可以以不必要的复杂方式以相反的顺序打印列表元素!
|
|
|
13
11
打印系统符号定义时不带上下文前缀
这个
有规则[]
警告:
此函数不以相同的方式本地化变量
这是
在清理实验期间编写的代码和本地化变量时,我发现这很有用。有时我会以参数列表的形式结束
用法就像
抗锯齿三维图形这是一种非常简单的反别名三维图形技术,即使您的图形硬件不支持它。
下面是一个例子:
注意,对于
笔记本差异功能
笔记本差异功能在
|
|
|
14
9
递归纯函数(
这里发生的事情是,我们首先在每个顶点编号上映射一个虚拟符号,然后设置一种方式,给定一对顶点
它当然比内置的要慢得多,但是对于代码的大小来说,仍然是相当快的。
另一个例子:这里是
例如,
但是,它并不是正确的尾部递归,并且会为更大的列表破坏堆栈(崩溃内核)。下面是尾部递归版本:
例如,
|
|
|
15
8
这是斯坦·瓦格纳的书中的配方…当内置的情节由于缺乏精确性而表现不稳定时使用它
当我需要Mathematica的downvalues中的“字典式”行为时,我经常使用Kristjan Kannike的以下技巧
当评估结果令人困惑时,有时将评估步骤转储到文本文件中会有所帮助
|
|
|
16
8
可以使用未记录的
command-line options
(其中
在 数学软件 v、 >=6 MathKernel有未记录的命令行选项:
它控制MathKernel是否在任务栏上有可见的图标(至少在Windows下)。 前端(至少从v.5版开始)有未记录的命令行选项
它禁用启动屏幕并允许运行 数学软件 前端速度更快 和选择权
哪一个 disables the mechanism which launches the most recent Mathematica version installed 而不是在系统注册表中启动与.nb文件关联的版本。 另一种方法可能是 is :
将最后一个命令行选项与设置全局前端选项结合起来很方便
(以上应在最近的 数学软件 已安装版本。)
使用未记录的键可以获取前端命令行选项的不完整列表
给予:
其他选项包括:
MathKernel和前端还有其他可能有用的命令行选项吗?如果你知道,请分享。 |
|
|
17
7
我最喜欢的技巧是生成宏的小代码,它允许您用一个短命令替换一堆标准样板命令。或者,可以创建用于打开/创建笔记本的命令。 以下是我在日常Mathematica工作流中使用了一段时间的内容。我发现自己经常做以下事情:
一次又一次地做这些是件痛苦的事,所以让我们自动化吧!首先,一些实用程序代码:
现在,让我们创建一个宏,将以下单元格放入笔记本:
下面是宏:
现在当我输入
最酷的是因为
对于额外的样式点,可以使用
|
|
|
18
7
带PageWidth的putpappend->无限大
在
数学软件
使用
所以我们可以
更新
有一个
bug
在版本10中引入(在版本11.3中修复):
解决方法是实现自己版本的
注意,我们也可以通过
|
|
|
19
6
我只是浏览了一下我的一个包,发现了一些我定义的有用的信息:
|
|
|
20
6
对于内置的作用域构造,我感到困扰的一件事是,它们同时计算所有的局部变量定义,所以您不能编写例如
所以不久前我提出了一个宏,叫做WithNest,它允许你这样做。我觉得它很方便,因为它可以让您保持变量绑定的局部性,而不必做类似的事情
最后,我能找到的最好的方法是使用一个特殊的符号,使其更容易在绑定列表上递归,并且我将定义放在它自己的包中,以隐藏这个符号。也许有人对这个问题有更简单的解决办法?
如果您想尝试,请将以下内容放入一个名为
|
|
|
21
5
此代码生成一个调色板,用于将所选内容作为图像上载到堆栈交换。在Windows上,提供了一个额外的按钮,可以更忠实地呈现所选内容。
将代码复制到笔记本单元格中并计算。然后从输出中弹出调色板,并使用
如果你有任何问题,在这里发表评论。下载笔记本版本 here .
|
|
|
22
4
我相信很多人都遇到过这样的情况,他们运行一些东西,意识到它不仅卡住了程序,而且 已经10分钟没存了! 编辑在忍受了一段时间之后,我有一天发现 可以创建自动保存 从内部 数学软件 代码。我认为使用这种自动保存在过去帮助了我很多,我一直觉得 可能性本身 不是很多人都知道他们能做到的。
我使用的原始代码在底部。多亏了我的评论,我发现它是有问题的,而且用另一种方法来做会更好,使用
代码可以在
this answer
从
下面的解决方案是使用
/编辑为了解决这个问题,我在笔记本的开头使用以下代码:
这将节省你每60秒的工作。
我最初在这里发现的: http://en.wikipedia.org/wiki/Talk:Mathematica#Criticisms 请注意,一旦运行这一行,即使关闭并重新打开文件(只要启用动态更新),也会进行保存。 而且,因为在 数学软件 ,请注意不要删除所有内容,因为保存将使其不可逆转(作为预防措施,我将从每个已完成的笔记本中删除此代码) |
|
|
23
4
这篇文章是阿尔贝托·迪·卢洛写的(他似乎没有出现堆栈溢出)。
原帖: http://forums.wolfram.com/mathgroup/archive/2010/Jun/msg00148.html
我发现这个例程对于将大量实数以普通十进制形式复制到剪贴板非常有用。例如。
|
|
|
24
3
记住,Mathematica的书也可以在网上找到 http://reference.wolfram.com/legacy/v5_2/ -尽管它已被 http://reference.wolfram.com |
|
|
25
3
我发现在开发包时将此键盘快捷键添加到
下一个为每个
加载非常有用的 PackageManipulations 利奥尼德写的图书馆。第二个单元格包含
所有这些都做实际的包重新加载。注意前两行只用于
然后,编写和测试包的工作流就变成这样了。
这会导致初始化单元重新加载包,从而使测试变得非常简单。 |
|
|
26
1
跟随功能
裁判: https://codegolf.stackexchange.com/questions/3088/indent-a-string-using-given-parentheses |
|
Stormenet · 如何从dll获取可用的翻译 17 年前 |