这与6月份的早期问题有关:
我有一个自定义混合分布使用第二个自定义分布定义,跟随@Sasha过去一年的许多答案中讨论的行.
定义分布的代码如下:
nDist /: CharacteristicFunction[nDist[a_, b_, m_, s_],
t_] := (a b E^(I m t - (s^2 t^2)/2))/((I a + t) (-I b + t));
nDist /: PDF[nDist[a_, b_, m_, s_], x_] := (1/(2*(a + b)))*a*
b*(E^(a*(m + (a*s^2)/2 - x))* Erfc[(m + a*s^2 - x)/(Sqrt[2]*s)] +
E^(b*(-m + (b*s^2)/2 + x))*
Erfc[(-m + b*s^2 + x)/(Sqrt[2]*s)]);
nDist /: CDF[nDist[a_, b_, m_, s_],
x_] := ((1/(2*(a + b)))*((a + b)*E^(a*x)*
Erfc[(m - x)/(Sqrt[2]*s)] -
b*E^(a*m + …Run Code Online (Sandbox Code Playgroud) 如果您已经使用Mathematica一段时间,您可能已经加入了文档中心.在这些页面中总会找到新的东西.让它成为一个函数的选项,或者只是一些在某些时候似乎对你没用的例子.
您可能已经编写了包含您始终使用的专用函数的软件包.有时您可能会想到一个与您的功能一起使用的简洁示例,但很可能它最终被遗忘在硬盘中的某个地方.如果您在考虑它的那一刻就将其写入文档,那么您可能不会在以后拼命寻找它.
出于这个原因,我想知道如何以编程方式将Mathematica文档中心的文档集成到您自己的函数中.这个问题是为了探索如何调整文档.如果您有编写的脚本可以帮助您执行此操作,请与社区分享.
对于这个问题,Wolfram的Workbench不是一个可接受的解决方案.一切都必须通过Mathematica的简单安装完成.解决方案应涵盖以下几点:
?SymbolSearch: Symbol这是一个非常广泛的主题,我有1,2和3的解决方案.我缺少第4点.那么请告诉我们,您如何使用文档中心记录您的功能?
我添加了另一个答案.希望这个答案对于Mathematica的用户用他们的包编写文档页面更令人鼓舞.我认为编写文档页面对应用程序编写者以及应用程序的用户都是有益的.如果你下载我写的软件包,我建议你按照教程进行操作,这样你就可以看到每一步都会发生什么.这将为您未来的项目提供宝贵的经验.
自从我写这个软件包以来,有几个人对这个软件包很感兴趣.我已将软件包上传到Github:https://github.com/jmlopez-rod/ApplicationMaker.如果您想成为存储库的贡献者,请与我联系.
老习惯很难,我意识到我一直在使用opts___Rule模式匹配和构造,就像thisoption /. {opts} /. Options[myfunction]我正在开发的非常大的包中一样.Sal Manango的"Mathematica Cookbook"让我想起,版本6后的做法是opts:OptionsPattern[]和OptionValue[thisoption].无论如何,该软件包需要版本8,但我从未改变过多年来编写此类代码的方式.
是否值得从我的pre-version-6做事方式重构所有这些?是否有表现或其他好处?
问候
维尔比亚
编辑:摘要
为回答这个问题,我们提出了很多好处,所以谢谢你们(当然还有一个).总结一下,是的,我应该重构使用OptionsPattern和OptionValue.(注意:OptionsPattern不像OptionPattern以前那样!)原因有很多:
HoldForm(@Leonid)OptionsPattern自动检查您是否将有效选项传递给该函数(FilterRules如果要传递给其他函数,仍然需要它(@Leonid)RuleDelayed(:>)更好(@rcollyer)Flatten(@Andrew)OptionValue /@ list而不是多次调用来分配多个局部变量更容易一些someoptions /. {opts} /. Options[thisfunction](在@rcollyer和我之间的评论中提出)编辑:7月25日我最初认为使用/.语法的一次可能仍然有意义,如果你故意从另一个函数中提取默认选项,而不是实际调用的那个.事实证明,这是通过使用其中OptionsPattern[]包含头部列表的形式来处理的,例如:( OptionsPattern[{myLineGraph, DateListPlot, myDateTicks, GraphNotesGrid}]请参阅文档中的"更多信息"部分).我最近才解决这个问题.
对于downvoters:这不是关于数学的问题,而是关于编程语言Mathematica的问题.
Mathematica的主要特征之一是它可以象征性地处理许多事情.但是如果你想一想,许多象征性的特征实际上只是象征性的一半.
以矢量为例.我们可以有像{X,Y,Z}符号载体,做一个矩阵乘法用满符号矩阵,并用象征性的结果结束了,所以我们可能会考虑的是象征性的向量代数.但我们都知道,开箱即用,Mathematica不允许你说符号x是一个向量,并给出一个矩阵A, A.x也是一个向量.这是一个更高级别的抽象,Mathematica(目前)并没有很好地处理.
类似地,Mathematica知道如何找到一个函数的五阶导数,这个函数是用符号来定义的,但是它并不适合于找到r阶导数(参见" 当r在Mathematica中是符号时如何找到函数的导数") ? "问题).
此外,Mathematica具有广泛的布尔代数能力,有些是古老的,但最近很多都是在版本7中获得的.在版本8中,我们得到了概率和朋友(例如条件),它允许我们推断具有给定分布的随机变量的概率.这是一个非常壮观的补充,这有助于我熟悉这个领域,我非常喜欢与它合作.然而,...
我和同事讨论了一些像熟悉的概率逻辑规则

即,给定事件/状态/结果A的事件/状态/结果C的条件概率为真.
具体来说,我们正在考虑这个:

虽然Probability在我意识到我不知道如何使用Mathematica立即解决这个问题之前我已经高度评价了Mathematica.同样,就像抽象向量和矩阵以及符号导数一样,这似乎是一个过高的抽象层次.或者是吗?我的问题是:
您能找到一种方法,使用Mathematica程序在上述和类似的方程中找到真或假吗?
例如,如果我正在定义以下函数
exprod[n_] := Expand[Product[x + i, {i, 1, n}]]
Run Code Online (Sandbox Code Playgroud)
那么为什么变量n之后的下划线是函数定义中必需的?这种风格来自哪里,还是仅限于Mathematica编程语言?
导出到动画gif似乎在Mathematica 8.0.1中已经改变了?
我通常只需编写一个动画的动画GIF:
v=Manipulate[....]
then Export["foo.gif",v];
Run Code Online (Sandbox Code Playgroud)
但现在它不起作用.我只得到一个静态图像.
这是一个例子:
v=Manipulate[
Text[t],
{{t,4,"start"},0,10,1,ControlType->Trigger,AnimationRate->1,AnimationRepetitions->10}
]
Run Code Online (Sandbox Code Playgroud)
现在Export["foo.gif",v]只生成静态图像,因为没有运行.
但是Export["foo.avi",v]有效,它确实会产生一个正在运行的avi电影.
此外,我曾经使用过动画GIF选项,但现在不支持:
Export["foo.gif",v,ConversionOptions->{"AnimationDisplayTime"->0.5,"Loop"->True},ImageSize->{500,500}]
Export::convoptobs: ConversionOptions is obsolete.
Run Code Online (Sandbox Code Playgroud)
当我去帮忙时,我没有看到GIF的选项.如何控制动画延迟等?
我以为有人在这里可能有个主意.
谢谢 - 纳瑟
我想问一下之前是否有人遇到这样的问题.我有版本8.01,在Windows 7,64位.SP1.
我一直试图找到为什么当我向我编写的一些代码添加Tooltip []命令时,我得到Mathematica内核崩溃.
该笔记本具有Wolfram演示样式表(示例样式表,用于进行演示).它是一个Manipulate,都在一个单元格中.
当我将代码复制到具有默认样式表的新笔记本时,崩溃就消失了!我无法重现新笔记本中的崩溃.
根本没有代码更改.只需复制整个单元格并将其粘贴到新笔记本中.唯一的区别是具有演示样式表,一个是默认样式表.当我将新笔记本的stype表更改为Demostration时,我注意到Tooltip不像以前那样工作.当我以这种风格使用Example笔记本时,我开始使用工具提示移动鼠标时,内核崩溃了.
为了确保,我做了几次.结果相同.一旦我添加了Tooltip [],内核就会在样式表演示时立即崩溃.
我的问题:有没有人见过这样的行为?如果可以,我可以将两个笔记本电脑用.
我得到的崩溃是:
Problem signature:
Problem Event Name: BEX64
Application Name: Mathematica.exe
Application Version: 8.0.31.32201
Application Timestamp: 4d65e0e8
Fault Module Name: StackHash_2766
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Offset: 0000000000000001
Exception Code: c0000005
Exception Data: 0000000000000008
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 1033
Additional Information 1: 2766
Additional Information 2: 2766660d255034f6e73a8cd527b6f51e
Additional Information 3: 8ab7
Additional Information 4: 8ab74987ae95fade363a8e7256e3890f
Run Code Online (Sandbox Code Playgroud)
我确实向WRI发送了一份错误报告.
我的问题是:有没有人有这样的问题,样式表更改可以使代码行为不同?为什么样式表更改会导致这样的问题?
更新1:
我能够做出显示部分问题的小例子.我正在制作另一个显示崩溃本身的小例子.但下面的示例显示了问题,即样式表演示时,工具提示不起作用.首先,这里是一个屏幕截图,并排,相同的代码,左边是默认样式表,右边是演示样式
(在图片下方,我粘贴源代码,步骤如何重现问题)

Manipulate[
EventHandler[Dynamic[Graphics[
{
Circle[{0,0},1],
Dynamic@Tooltip[Text[Style["O",Red,16] ,pt],Style[pt]] …Run Code Online (Sandbox Code Playgroud) 圣路易斯联邦储备银行在各种网页上提供了大量数据,例如:
http://research.stlouisfed.org/fred2/series/OILPRICE/downloaddata?cid=32217 http://www.federalreserve.gov/releases/h10/summary/default.htm http://research.stlouisfed.org/ fred2 /系列/ DGS20
数据集会更新,有些甚至每天都会更新.我倾向于对每日数据感兴趣(请参阅URLS上的上述设置)
我想将这些价格或费率数据流(可在上述URL中作为CSV或Excel文件访问)直接导入Mathematica.
我已经查看了有关Importing []的文档,但我找不到关于如何进行此类操作的文档(实际上没有).
看起来我需要导航到页面,发送一些数据来选择特定的文件和格式,触发下载,然后从我自己的机器访问下载的数据.如果我可以直接从站点访问数据,那就更好了.
我曾希望Wolfram Alpha可以轻松做到这一点,但我没有取得任何成功.
FinancialData[]对于这类事情来说似乎很自然,但我还是没有看到这样做.财务数据有很多功能,但我没有看到你得到这种东西的方式.
有没有人有这方面的经验或有人指出我正确的方向?
当我尝试通过评估>并行内核配置在mathematica中配置远程内核时,我转到"远程内核"并添加主机.之后我尝试启动远程内核,其中只有一些启动(它们的数量不同).我得到一个像以下一样的消息.
KernelObject :: rdead:通过远程[nodo2]连接的子内核看似死机.>> LinkConnect :: linkc:无法连接到LinkObject [36154 @ 192.168.1.104,49648 @ 192.168.1.104,38,12].>> General :: stop:在此计算过程中,将禁止LinkConnect :: linkc的进一步输出.>>
任何想法如何让这个工作?
考虑到它有时会加载一些远程内核但从不加载所有远程内核.提前致谢.
这是我的输出 $ConfiguredKernels // InputForm
{SubKernels`LocalKernels`LocalMachine[4],
SubKernels`RemoteKernels`RemoteMachine["nodo2", 2],
SubKernels`RemoteKernels`RemoteMachine["nodo1", 2],
SubKernels`RemoteKernels`RemoteMachine["nodo3", 2],
SubKernels`RemoteKernels`RemoteMachine["nodo4", 2],
SubKernels`RemoteKernels`RemoteMachine["nodo5", 2]}
Run Code Online (Sandbox Code Playgroud)
一旦它加载了所有内核,但通常不加载,只需要一个或两个远程内核.
我正在编写一个基于Ukkonen算法在Mathematica中构造后缀树的算法.
我的问题是,将我的整个树结构(我已经存储在一个列表中)传递给一个要搜索的函数,为我的程序花费了大量的内存和时间,因为我必须多次使用一些函数.算法?
例如,我有一个搜索特定节点的子节点的Select函数,我使用该函数搜索整个树.
getChildren[parentID_] := Select[tree, #[[3]] == parentID &];
Run Code Online (Sandbox Code Playgroud)
但是我需要访问树,所以将整个树结构传递给函数是否合理?因为似乎没有办法让整个笔记本变量全局变量.或者是否有其他方法来解决这个问题?