问题标签 [mathematica-8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
881 浏览

image-processing - ComponentMeasurements[_,"Centroid"] 结果偏移

我需要获得一组具有亚像素精度的二进制图像中组件的心(质心)。

Mathematica 8 有一个很好的补充:

但是当这些结果显示与其他地方进行的其他计算不一致时,我遇到了一些麻烦。

所以我推出了自己的,也许不太好:

在此处输入图像描述

您可以看到这些结果之间存在 0.5 的偏移:

起初我认为问题与图像尺寸是偶数还是奇数有关,但事实并非如此。

我更喜欢使用ComponentMeasurements[ ..,"Centroid"]和纠正结果,但我担心未来的 Mma 版本可能会修改这种行为并破坏结果。

我还可以使用已知图像运行先前的“校准”并计算偏移量,因此它会自动更正,但我想先了解发生了什么。

这是一个错误吗?
关于为什么会发生这种情况的任何想法?

0 投票
3 回答
3861 浏览

c - 安装了 GCC。Mathematica 仍然无法编译为 C

我在 MacOSX 上运行 Mathematica 8,试图将最简单的程序编译为 C。任何与 C 相关的东西在 Mathematica 中都不起作用。我安装了 GCC 4.2;我什至用 XCode 多次重新安装它。这是我正在做的事情以及我得到的错误:

首先,我总是评估命令

如果我将编译目标设置为 C,

我收到一条错误消息:Compile::nogen : A library could not be created from the compiled function。

如果我尝试创建一个库,

我收到一条消息$Failed。Wolfram 说这是因为我没有安装 C 编译器。我觉得这很难相信,因为当我跑步时

它告诉我已经安装了 GCC:{{"Name" -> "GCC", "Compiler" -> CCompilerDriver'GCCCompiler`GCCCompiler, "CompilerInstallation" -> "/usr/bin", "CompilerName" ->自动的}}

更重要的是,终端说我也安装了 GCC!任何帮助,将不胜感激。我真的很想将 Mathematica 编译为 C。

0 投票
4 回答
995 浏览

wolfram-mathematica - 小修改后重新布局图,同时保留原始布局的特征

在 Mathematica 8 中是否有一种简单的方法可以执行以下操作?

  1. 构建一个图形,并使用一些图形布局显示它。
  2. 稍微修改图形(例如添加或删除边或顶点)。
  3. 从原始布局开始重新计算布局,以或多或少保留对象的“形状”。例如,从先前布局的坐标开始重新运行弹簧电动布局算法。

如果图表在两个显示之间没有改变,那么布局也不应该改变(或者只是最小的改变)。使用新的显示器GraphGraphPlot两者都可以接受。

编辑:本质上我需要类似图形的类似布局。我总是通过修改可能已经布置好的现有图表来获得类似的图表,但任何通用解决方案都是可以接受的。

编辑2:这是这种东西有用的例子。转到http://ccl.northwestern.edu/netlogo/models/GiantComponent并单击“在浏览器中运行”(需要 Java)。单击设置,然后单击开始。您可以看到图表的演变。如果我们在 Mathematica 中这样做,那么每个连续的图看起来都会完全不同,并且很难看出它是在进化的同一个图。在一些应用程序中,能够将图形的微小变化可视化是非常有用的。但是如果做了很多连续的改变,那么重新计算布局是必须的,简单地淡化或突出边缘是不够的。再说一次,这只是一个例子:我不是想使用 Mathematica 来为图形制作动画,或者将巨型组件的出现可视化。

0 投票
2 回答
403 浏览

wolfram-mathematica - 使用框架而不是轴时不裁剪条形图

我刚刚发现 aBarChart在使用Frame而不是Axes.

例子:

这是功能还是错误?如果它是一项功能,是否有一种简单的方法可以防止裁剪?

编辑

屏幕截图,根据请求:

在此处输入图像描述

0 投票
4 回答
776 浏览

wolfram-mathematica - 格式化使用消息

如果你看一下Mathematica8中的Combinatorica包,你会发现函数的定义。我有兴趣知道 Mathematica 如何知道如何格式化使用消息。有些东西告诉我,我没有查看正确的文件。无论如何,让我们尝试以下方法:(mathematicapath)/AddOns/LegacyPackages/DiscreteMath/Combinatorica.m

这一行就是上面提到的文件中的682行。现在,如果我们在mathematica notebook 中运行它并使用?Cofactor,我们将看到完全相同的消息。但是如果我们得到包,那么消息就会被格式化。这是一个屏幕截图:

在此处输入图像描述

注意函数中的 m、i 和 j 是如何变化的,并且在消息中添加了一个双箭头。我认为箭头已添加到消息中,因为它存在文档。有人可以解释这种行为吗?


编辑:这是我的笔记本文件的屏幕截图,它自动保存到 m 文件。

在此处输入图像描述

如您所见,LandM是斜体时代的新罗马。现在我将加载包并查看使用情况。

在此处输入图像描述

到现在为止还挺好。现在让我们看看文档中心。我会寻找功能LineDistance

在此处输入图像描述

如您所见,它显示了一条奇怪的消息。在这种情况下,我们只想显示没有任何样式的消息。我仍然无法弄清楚这个Combinatorica包是如何做到的。我按照这个来制作索引,以便文档中心可以显示摘要。摘要本质上是使用情况显示。让我知道是否需要更具体。

0 投票
3 回答
8133 浏览

wolfram-mathematica - 将笔记本集成到 Mathematica 的文档中心

如果您已经使用Mathematica一段时间了,您可能已经对文档中心产生了浓厚的兴趣。在这些页面中总会发现一些新的东西。让它成为一个函数的选项,或者只是一些在某些时候对你没有用的例子。

您可能已经编写了具有您一直使用的专用功能的包。有时您可能会想到一个与您的函数一起使用的简洁示例,但它很可能最终被遗忘在硬盘的某个位置。如果您在想到它的那一刻就将其写入文档,那么您以后可能不会拼命寻找它。

出于这个原因,我想知道如何以编程方式将您自己的函数的文档与Mathematica 的文档中心集成。这个问题在这里探讨如何改编文档。如果您编写了可以帮助您执行此操作的脚本,请与社区分享。

对于这个问题,Wolfram 的 Workbench 不是一个可接受的解决方案。一切都必须通过Mathematica的简单安装来完成。解决方案应涵盖以下几点:

  1. 为函数创建文档(最好是模板)。
  2. 创建指南和教程(如果他们认为有用)。
  3. 将笔记本链接到文档中心。
  4. 创建在不同环境中正确显示的“使用”消息。
    • 在 Mathematica 笔记本中?Symbol
    • 在文档中心Search: Symbol

这是一个非常广泛的话题,我有针对 1、2 和 3 的解决方案。我缺少第 4 点。那么请告诉我们,您如何使用文档中心记录您的功能?


更新

我添加了另一个答案。希望这个答案更能鼓励 Mathematica 的用户使用他们的包编写文档页面。我认为编写文档页面对应用程序编写者和应用程序用户都有好处。如果你下载我写的包,我建议你按照教程进行操作,这样你就可以看到每一步会发生什么。这将为您未来的项目提供宝贵的经验。

Github(2014 年 5 月 24 日)

自从我写了这个包以来,已经有几个人对这个包感兴趣。我已将包上传到 Github:https ://github.com/jmlopez-rod/ApplicationMaker 。如果您想成为存储库的贡献者,请与我联系。

0 投票
1 回答
259 浏览

wolfram-mathematica - 保存 FittedModel 有问题

在 Mathematica 7 和 8 中,我们发现 Mathematica 无法正确保存和获取拟合例程的结果。我希望这里有人知道:此错误的最佳实践解决方法是什么?

我们的任务是使用 NonlinearModelFit 拟合大量数据集,它为每个数据集返回一个 FittedModel。这些拟合需要一段时间,我们尝试使用 Save 和 DumpSave 将结果存储到文件中。随后的分析使用 Get 将 FittedModel(s) 拉回。

Mathematica 在没有警告的情况下执行 Save & Get,但返回的 FittedModel 有问题。我们调用 Get 并从磁盘加载 FittedModel,将结果称为“foo”。尝试 foo[10] 使用输入 10 评估拟合模型。我们看到的错误是 foo["BestFitParameters"] 应该返回一个规则列表,而是将字符串插入到函数中,因为它是像 10 这样的数字。尝试 foo [{"BestFitParameters","BestFitParameters"}] 应该在列表中给出规则两次,但在错误的 foo 中保持未评估。

除此之外,还有一个奇怪且具有误导性的行为,具体取决于我们是删除/清除 foo 还是退出内核:

  • 将 FittedModel 计算为 foo
  • 将 foo 保存或转储到磁盘
  • 删除和/或清除 foo
  • 从磁盘获取 foo
  • foo 工作正常

但是如果我们重新启动内核它会失败

  • 将 FittedModel 计算为 foo
  • 将 foo 保存或转储到磁盘
  • 杀死并重新启动内核
  • 从磁盘获取 foo
  • foo 是越野车

有没有人见过这种行为?

这个错误背后有很好的解释吗?

有没有好的解决方法?

0 投票
4 回答
1335 浏览

wolfram-mathematica - 从 Rule 和 /. 切换有什么好处?大型应用程序中的 OptionsPattern[] 和 OptionValue?

旧习惯很难改掉,我意识到我一直在使用opts___Rule模式匹配和结构,就像thisoption /. {opts} /. Options[myfunction]我目前正在开发的非常大的包中一样。Sal Manango 的“Mathematica Cookbook”提醒我,后版本 6 的做法是opts:OptionsPattern[]OptionValue[thisoption]. 无论如何,该软件包需要版本 8,但多年来我从未改变过编写此类代码的方式。

是否值得从我的 pre-version-6 做事方式中重构所有这些?有性能或其他好处吗?

问候

马鞭草属

编辑:总结

针对这个问题提出了很多好的观点,所以谢谢大家(当然还有一个)。总而言之,是的,我应该重构使用OptionsPatternand OptionValue。(注意:OptionsPattern不像OptionPattern我以前那样!)有很多原因:

  1. 触摸速度更快(@Sasha)
  2. 它更好地处理参数必须在的函数HoldForm(@Leonid)
  3. OptionsPattern自动检查您是否将有效选项传递给该函数(FilterRules如果您传递给不同的函数,仍然需要(@Leonid)
  4. 它处理RuleDelayed:>)更好(@rcollyer)
  5. Flatten它在不使用(@Andrew)的情况下处理嵌套的规则列表
  6. 使用OptionValue /@ list而不是多次调用来分配多个局部变量要容易一些someoptions /. {opts} /. Options[thisfunction](在@rcollyer和我之间的评论中出现)

编辑:7 月 25 日我最初认为,/.如果您故意从另一个函数中提取默认选项,而不是实际调用的那个,那么使用该语法可能仍然有意义。事实证明,这是通过使用其中OptionsPattern[]包含头部列表的形式来处理的,例如:(请参阅文档OptionsPattern[{myLineGraph, DateListPlot, myDateTicks, GraphNotesGrid}]中的“更多信息”部分)。我最近才解决了这个问题。

0 投票
2 回答
1218 浏览

visual-studio - 从mathematica中找到c编译器

C 编译器和数学。

嗨,我想在数学中使用 CUDA 功能。但是,它需要一个工作的 c 编译器。我通常是一个 unix 人,但我有一个mathematica 的 Windows 副本。我尝试安装 Visual Studio Express 和 miniGW(某种 gcc 到 Windows 端口)。但是现在当我启动mathematica并在加载了需要的CCompilerDriver和CUDALink之后执行CCompiler []时,我得到了一个空的编译器列表。我需要设置一些隐藏的东西来让mathematica发现这些编译器。我完全迷失在这个 Windows 环境中。

我在 wolframs 网站上没有提到这一点,在他们的所有示例中,visual studio 都在那里并且已经在工作。

哦,是的,我的mathematica 是第8 版。

0 投票
1 回答
124 浏览

c - 在并行处理中,如何使用mathematica让每个处理器执行一个程序块

我想编写一段 C 代码并将其发送到每个处理器以执行它

这可能使用mathematica吗?

使用网关将 C 与mathematica 或其他任何东西联系起来

谢谢你们 .. :)