我们都知道Mathematica很棒,但它也经常缺乏关键功能.您在Mathematica中使用哪种外部包/工具/资源?
我将编辑(并邀请任何其他人也这样做)这个主要帖子包括专注于科学研究的一般适用性的资源,并且尽可能多的人会觉得有用.随意贡献任何东西,甚至是小代码片段(正如我在下面做的时间例程).
此外,在Mathematica 7及其他您发现自己,或从一些纸张/网站挖出的无证和有用的功能是非常受欢迎的.
请提供简短描述或评论为什么有什么好东西或它提供的实用程序.如果您使用会员链接链接到亚马逊上的书籍,请提及它,例如,在链接后面加上您的姓名.
包:
LevelScheme
是一个大大扩展Mathematica生产美观图的能力的软件包.我使用它,如果没有其他任何东西,那么对框架/轴刻度的大大改进控制.它的最新版本称为SciDraw,它将在今年的某个时候发布.Presentation Package
(50美元 - 免费更新)grassmannOps
软件包提供了使用Grassmann变量和具有非平凡换向关系的算子进行代数和微积分的资源.GrassmannAlgebra
与格拉斯曼(Grassmann)和克利福德代数(Clifford algebras)合作的包和书.工具:
MASH
是Daniel Reeves出色的Perl脚本,主要为Mathematica v7提供脚本支持.(现在-script
可以选择使用Mathematica 8制作.)alternate Mathematica shell
与GNU的readline输入(使用python,*nix中只)资源:
MathSource
对于各种应用程序,Wolfram自己的存储库有很多有用的缩小笔记本.另请参阅其他部分,例如
Current Documentation
, Courseware
讲座, Demos
为了演示.在数学维基教科书.
图书:
我正在研究预订引擎Android应用程序,如航空公司预订系统.要获取特定于乘客搜索的所有可用航空公司的内容,然后将其显示在移动设备的屏幕上.
考虑到屏幕加载时间,系统内存消耗和其他功能,哪一个,表格布局或网格布局会有效?
有人可以告诉我如何更改表cellpadding和cellspacing,就像你可以在html中使用:
<table cellspacing="0" cellpadding="0">
Run Code Online (Sandbox Code Playgroud)
但是如何用css完成?
每当我创建一个大型的Mathematica项目时,我都遇到了这个问题:防止Mathematica中的运行时错误雪崩,即Mathematica的错误信息是不透明的,过时的和军团.
然后,我们的想法是禁用所有Mathematica自己的错误消息,并在每个功能和模块中实现您自己的类型检查和错误消息.然而,我还没有找到一种简单而有效的方法来完成这项工作并最终得到,例如,某些函数生成错误20函数调用深度,然后获得整个级联的错误消息一直回到主例程.
您将如何为此设置一个简单的机制,只在遇到错误的函数和函数调用链的简单列表中生成一条错误消息?
编辑:因为它提出了几个答案; 我特意在寻找关于它产生的输出的轻量级(否则我可以坚持使用Mathematica的错误消息),并且显然在计算开销方面也是轻量级的.因此,虽然Stack
与Trace
上开销肯定是轻,他们在复杂项目输出不快速分析和需要做一些工作简化它.
最近的一个问题*让我想知道是否有文本编辑器可以让你看到文件的每个字符,即使它们是不可见的?具体来说,我不是在寻找十六进制编辑功能,我对一个文本编辑器很感兴趣,它会向我显示所有不可见的字符(不仅仅是常见的空格/换行符).的BOM标记仅仅是一个例子,其它的是例如数学无形或可能不支持的字符.
我不是在寻找一种文本编辑器,它只支持编码之间的各种文本编码/翻译.我遇到的所有文本编辑器都正确对待不可见的字符,即让它们不可见(或者只是在BOM标记的情况下在翻译中删除).
我问这主要是出于学术兴趣,所以我并不特别关注任何特定的操作系统.我可以轻松地测试Linux和OSX解决方案,但是如果你推荐一个Windows编辑器,如果你包含编辑器如何处理除空白/换行之外的隐形,我将不胜感激.
编辑:我开始确保我想要的行为可以通过自定义突出显示或通过乱搞字体本身在emacs/vim中实现.这种解决方案也是可以接受的.
编辑2:看了几个选项后,我发现TextMate至少显示一个空白区域,文件中有一个不可见的UTF-8字符.对SO回答我的问题的能力略感失望.Bounty去了VIM,因为这是解决方案最有可能的方向.
*引发我这个问题的事件:我使用TextWrangler编写了一个perl脚本,并设法将编码更改为UTF8 BOM,它在文件的开头插入BOM标记.Perl(或者更确切地说是操作系统)迅速错过了#!随之而来的是混乱.然后,由于大多数文本编辑器都没有显示BOM标记,即使打开了各种"show invisibles"选项,它也花了我一个下午的大部分时间来解决这个问题.现在我已经吸取了教训并less
立即使用:-).
如何让Mathematica导出/保存/写入具有适当Fortan77格式的文本文件,即72列和第六列的延续标记?
我正在使用Mathematica生成大而复杂的分析表达式,然后我需要将其插入到预先存在的Fortran77代码中.我把一切都在数学的前端与正常工作FortranForm[]
和
SetOptions[$Output, PageWidth -> 72]
但是,我无法弄清楚如何让Mathematica正确输出到文本文件.我想要这样的东西:
MM11 = mH1**2 + (g2**2*v1**2)/2. -
- (g2**2*(v1**2/2. -
- ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))*
- (v2*Cos(phi2) + (0,1)*v2*Sin(phi2)))/2.))/2.
...
Run Code Online (Sandbox Code Playgroud)
但得到这个:
MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ...
Run Code Online (Sandbox Code Playgroud)
或这个:
MM11 = mH1**2 + (g2**2*v1**2)/2. - (g2**2*
(v1**2/2. - ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))*
...
Run Code Online (Sandbox Code Playgroud) 我生成了一般形式的非常长且复杂的分析表达式:
(...something not so complex...)(...ditto...)(...ditto...)...lots...
Run Code Online (Sandbox Code Playgroud)
当我尝试使用时Simplify
,Mathematica陷入停顿,我假设它是因为它试图扩展括号和/或简化不同的括号.包含长表达式的括号很容易由Mathematica自行简化.有什么方法可以一次限制Simplify
一个支架的范围吗?
编辑:一些额外的信息和进展.
因此,根据你们的建议,我现在开始使用一些东西了
In[1]:= trouble = Log[(x + I y) (x - I y) + Sqrt[(a + I b) (a - I b)]];
In[2]:= Replace[trouble, form_ /; (Head[form] == Times) :> Simplify[form],{3}]
Out[2]= Log[Sqrt[a^2 + b^2] + (x - I y) (x + I y)]
Run Code Online (Sandbox Code Playgroud)
改变Times
到适当的头部Plus
或Power
使得可以非常准确地瞄准简化.但是,仍然存在以下问题/问题:仍然Simplify
会比指定的级别深入下降Replace
,例如
In[3]:= Replace[trouble, form_ /; (Head[form] == Plus) :> Simplify[form], {1}]
Out[3]= Log[Sqrt[a^2 + b^2] …
Run Code Online (Sandbox Code Playgroud) 这是关于数字格式的这个问题的延续,并且与我之前关于获得非常具体的Mathematica输出到文本文件的问题有关.
我经常不得不在Mathematica中使用高精度来生成数据,但只需要相对较低的精度来实现可视化.我还希望存储数据以供以后使用,所有符号名称和数组结构都保持不变.为此,我一直在使用Save[]
,但有两个相关的问题.
高精度"污染"我的结果与多余的数字很难摆脱:
In[1] := b = SetPrecision[7, 50]; a = Pi/b
Out[1] := 0.44879895051282760549466334046850041202816705705358654585356351318683091518373`50.
In[2] := InputForm @ N[a, 6]
Out[2] := 0.44879895051282760549466334046850041203`6.
Run Code Online (Sandbox Code Playgroud)
我真的只需要0.448799.
4.72642364528438598726943'5.9999999999999999999999
我通常不需要精度4.72642
就足够了.这两者都会给文件大小带来很大的开销,虽然硬盘存储很便宜,但是后来将文件加载回Mathematica时,文件大小会产生巨大的差异.
因此,从例如aa
包含不规则数组中的50位任意精度数字开始,是否有一种内置方式可以让我获得一个文本文件来读取这样的内容
aa = {{2.0437`4, 4.7276`4, ...}, ...}
Run Code Online (Sandbox Code Playgroud)
编辑:为了澄清,我没有显示数字或跟踪数字的精确度或更改数字的精度问题.我遇到的问题是控制如何将数字写入文件.
使用N
,NumberForm
,OutputForm
,InputForm
,*Form
,等,都不能正常工作与Save
.并且Save
是我能找到的唯一导出符号和数组结构的导出选项.Export
并且Put*
可以用于更好地控制格式,但它们不包括符号(并且在Export
数组结构的情况下也丢失).
我需要使用不同但大量的空格来填充一行文本.我可以找出一种方法来做一个循环并向$ foo添加空格,然后将其拼接到文本中,但它不是一个优雅的解决方案.
与这个问题切线相关,这里的数字格式究竟发生了什么?
In[1] := InputForm @ 3.12987*10^-270
Out[1] := 3.12987`*^-270
In[2] := InputForm @ 3.12987*10^-271
Out[2] := 3.1298700000000003`*^-271
Run Code Online (Sandbox Code Playgroud)
如果你*10.^
用作乘数,过渡就是你天真地期望的过渡:
In[3] := InputForm @ 3.12987*10.^-16
Out[3] := 3.12987`*^-16
In[4] := InputForm @ 3.12987*10.^-17
Out[4] := 3.1298700000000004`*^-17
Run Code Online (Sandbox Code Playgroud)
然后*^
进一步转换,虽然它是机器精度开始剥落:
In[5] := InputForm @ 3.12987*^-308
Out[5] := 3.12987`*^-308
In[6] := InputForm @ 3.12987*10.^-309
Out[6] := 3.12987`15.954589770191008*^-309
Run Code Online (Sandbox Code Playgroud)
基地很晚才开始分手
In[7] := InputForm @ 3.12987*^-595
Out[7] := 3.12987`15.954589770191005*^-595
In[8] := InputForm @ 3.12987*^-596
Out[8] := 3.1298699999999999999999999999999999999999`15.954589770191005*^-596
Run Code Online (Sandbox Code Playgroud)
我假设这些转换与Mathematica内部保存数字的格式有关,但是有人知道,或者关心有害的教育猜测,如何?
考虑到我之前关于在大型Mathematica项目中切换数值和分析"模式"的问题的解决方案,我想到了使用Context
作为范围构造的想法.
基本思想是在自己的上下文中进行所有数值赋值,例如
Begin["Global`Numerical`"]
par1 = 1;
par2 = 2;
...
End[]
Run Code Online (Sandbox Code Playgroud)
并且在全局背景下具有所有复杂的分析函数,矩阵等.
理想情况下,我可以在全局上下文中工作,并通过简单Begin[Global'Numeric']
切换回数字的所有内容End[]
.
不幸的是这不是DOEN工作,因为如f[par1_,par2_,...] := foo
在全球范围内定义不会用par1
,par2
等已经在全球的背景下子被定义.
有没有办法让子上下文从父上下文继承定义?是否有其他方法可以使用上下文来创建简单的可切换范围?
这里发生了什么(Mathematica版本8.x):
NIntegrate[Log[1/2 + Sqrt[1/4 - 1/(4 x^2)]]/x, {x, 1, Infinity}]
--> -0.171007
Integrate[Log[1/2 + Sqrt[1/4 - 1/(4 x^2)]]/x, {x, 1, Infinity}] // N
--> 0.171007
Run Code Online (Sandbox Code Playgroud)
该NIntegrate[]
值是正确的.我PrincipalValue
之前遇到了选择问题,但是a)已经在mma8中修复了这些问题,并且b)这个积分在积分区域中没有,或者至少不应该具有极点.
编辑:感谢人们建议解决这个问题,一般的解决方案是,例如,专门使用NIntegrate
.但是,我有兴趣找出具体发生这种情况的原因,以及这个错误是否可以预测.
android ×1
css ×1
formatting ×1
fortran77 ×1
grid-layout ×1
html ×1
insert ×1
integrate ×1
perl ×1
precision ×1
resources ×1
scoping ×1
string ×1
tablelayout ×1
text-editor ×1
whitespace ×1