我正在寻找一个匹配一个(可能是空的)列表的模式,该列表由相同的(在Equal []意义上)原子对象组成,但我无法弄明白.任何帮助将不胜感激.
以下所有内容均指音乐/ MIDI(SoundNote对象),而非采样声音.
不幸的是,Mathematica似乎无法导入MIDI.我正在尝试为单个乐器文件(专注于钢琴)制作一个基于MIDI < - > CSV的简单MIDI导入器.
Sound在Mathematica中叠加两个对象的最简单方法是什么?
Show 连接它们,它不会叠加.
一个不太简单的方法是拆卸Sound成SoundNoteS,每次转换SoundNote的时间规范成{Tstart, Tend}格式,并组装这些到一个新的声音.有一个简单的方法吗?
第二个问题:
有没有一种简单的方法来处理Mathematica中的踏板事件,同时仍然使用内部声音表示和MIDI播放器,而不是通过其他方式播放MIDI?
我之前有一个关于将Mathematica与用C++编写的函数集成的问题.
这是一个后续问题:
如果计算时间过长,我希望能够使用评估>中止评估中止它.答案中建议的哪些技术可以实现可中断的基于C的扩展功能?如何在C端实施"可中断性"?
我需要以一种既不会破坏它,也不会损坏Mathematica内核的方式使我的函数可中断(即应该可以在Mathematica被中断后再次调用该函数)
TortoiseSVN(以及其他Tortoise客户端)包括一个用于在Mathematica中区分笔记本文件的脚本.Mathematica的Diff功能在AuthorTools包中实现(也许有更好的东西?)
该脚本目前的工作原理是在临时目录中创建一个小型笔记本文件,并在前端打开它.笔记本有一个大按钮,可以做差异,并有文件名进行硬编码.
缺点是具有diff代码的笔记本将保留在临时目录中,并且不会被清除.每次我们做差异时,似乎没有必要打开辅助笔记本.
是否可以从命令行启动diff功能以避免通过临时笔记本?或者有没有其他强大的方法来改善这个过程并避免使用辅助笔记本乱丢临时文件夹?
欢迎任何改善差异化体验的建议!
请注意,由于TortoiseSVN是一个Windows程序,我主要对基于Windows的解决方案感兴趣.
这是脚本生成的示例笔记本.我意识到它需要清理,但是上次我检查它在版本5中工作了(!),所以我不想不必要地触摸它(没有明显改进的东西).
Notebook[{
Cell[BoxData[ButtonBox["\<\"Compare Notebooks\"\>",
ButtonFrame->"DialogBox", Active->True, ButtonEvaluator->Automatic,
ButtonFunction:>(Needs["AuthorTools`"]; NotebookPut[Symbol["NotebookDiff"]["one.nb", "two.nb"]])
]], NotebookDefault] },
Saveable->False, Editable->False, Selectable->False, WindowToolbars->{},
WindowFrame->ModelessDialog, WindowElements->{},
WindowFrameElements->CloseBox, WindowTitle->"Diff",
ShowCellBracket->False, WindowSize->{Fit,Fit}
]
Run Code Online (Sandbox Code Playgroud) 我们可以为这样的变量创建一个实时监视器:
CreatePalette@Panel@Row[{"x = ", Dynamic[x]}]
Run Code Online (Sandbox Code Playgroud)
(如果x恰好是类似的话,这会更有趣和有用$Assumptions.设置一个值然后忘记它就很容易了.)
不幸的是,如果重新启动内核(Quit[]然后评估一些内容),这将停止工作.调色板不会再显示值的变化x.
有没有办法做到这一点,所以它在内核会话中保持工作?我发现自己经常重启内核.(如果生成的调色板导致内核在完成后自动启动Quit.)
更新: 如评论中所述,事实证明,只有在我们通过评估退出时,调色板才会停止工作Quit[].使用时Evaluation -> Quit Kernel -> Local,它会继续工作.
我试图在Mathematica中对"黑匣子"功能进行数值优化.原理图如下:
NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]
Run Code Online (Sandbox Code Playgroud)
其中comb [x,y,z]的定义与此类似:
comb[x_,y_,z_] := Module[{},
Print[x,y,z];
M = FindMaximum[SkewNormal[a,x,y,z], {a,x}] // First;
val = f[x,y,z,M];
Return[val];
];
Run Code Online (Sandbox Code Playgroud)
但是,我尝试过的所有最小化函数似乎都没有立即为comb [x,y,z]提供数值,并且它最终试图用x,y,z的符号值来计算FindMaximum(这很容易验证)因为Print [x,y,z]也象征性地评估).因此Findmaximum失败(FindMaximum :: nrnum:函数值blah blah不是实数),因此最小化失败.
如何修复评估顺序,以便使用数值评估梳子的子功能?
optimization wolfram-mathematica black-box operator-precedence
有没有办法禁用单元格组/节中的所有输入单元格,以后会轻易撤消?
我的目标是保持笔记本的一部分完好无损,但在前端选择"评估笔记本"时阻止对其进行评估.
有单元格 - >单元格属性 - >可评估,但使用它需要我手动选择每个输入单元格并更改/恢复此属性.这是太多的工作.我将文本/子部分/输出单元格隔行扫描.
使用UI有更好的方法吗?如果没有,是否有简单的编程方式?
编辑:我发现Alt-click,它选择笔记本中的所有输入单元格.这可以仅限于一个部分/细胞群吗?
偶尔我们会研究某些System`函数是如何定义的(当它们用Mathematica编写时).这个问题是关于最好的方法.
要记住的要点:
病程中ReadProtected需要先删除.
Builtins通常需要在加载到内核之前至少使用一次.当它们具有扩展功能(例如通过选项)时,单个简单调用通常是否足够?
Information(??)以难以阅读的格式给出定义(没有缩进,并且所有私有上下文名称都是前置的).什么是摆脱上下文名称,并获得格式化代码的最佳方法?
摆脱某些背景的一个想法是Block[{$ContextPath = Append[$ContextPath, "SomeContext`Private`"], Information[symbol]].代码可以使用Workbench自动格式化.一些问题仍然存在,例如Information不引用字符串,从而阻止代码被复制到Workbench中.
一般来说,我对人们如何做到这一点感兴趣,他们使用什么方法使内置代码尽可能易于阅读.
使用案例:例如,最近我深入研究了RunThrough当我发现它在Windows XP上无法运行时的代码(事实证明,当它们的路径包含空格时,它无法引用临时文件的名称).
更新: 似乎曾经有一个函数用于打印没有上下文的定义Developer`ContextFreeForm,但它在新版本中不再起作用.
MATLAB Engine API允许从C程序访问MATLAB功能.要设置MATLAB Engine会话,可以调用该engOpen函数.默认情况下,这将启动MATLAB的新实例,专门用于Engine应用程序.
我想要的是使用Engine应用程序中已经运行的 MATLAB会话,以便我可以访问它的变量. 我需要在Linux和OS X上执行此操作.
Engine接口在Windows(它使用COM服务器)和Unix上有非常不同的实现.在Unix上,我们必须将MATLAB可执行文件的位置传递给engOpenWindows,而在引擎使用COM服务器的情况下,我们不会.在Windows上是可以使用MATLAB的现有实例Engine应用程序:只要运行enableservice('AutomationServer', true).在Unix系统上有什么解决方案吗?
我希望有一个通用的解决方案 - 可能没有文档 - 因为,基于文档,Python接口似乎允许这样做.我在OS X上测试了这个并且它可以工作.例如,我可以启动交互式MATLAB会话,设置变量a=5,然后启动Python,连接到同一个会话并能够检索此变量. 也可以从Java连接到已经运行的会话.
我需要从C开始,而不是从Python开始,因为它将在MATLink,Mathematica-MATLink接口中使用.Python界面如何实现这一目标?如何使用C重现相同的内容?
如果有一个替代的C API而不是"MATLAB Engine"使这成为可能(可能是Python接口所基于的其他一些文档化或未记录的C API),我可以接受这个作为答案.我想要一个可以利用已经运行的交互式 MATLAB会话的C程序.
更新:
Python界面中的一些讨论显示它使用了一个名为的库libmwengine_api.这与记录的MATLAB Engine C API不同.我们可以查看这个库中的符号.在OS X上,
nm -g libmwengine_api.dylib | c++filt
Run Code Online (Sandbox Code Playgroud)
然后我们可以谷歌搜索这些符号或grep MATLAB安装目录中包含它们的文件.出现了纯文本中没有任何内容.
基于此,我相信Python接口使用的是未记录的C++ Engine API,它与旧的C++引擎API不同.
在 macOS 13.3.1 上,strtod()似乎不尊重使用设置的区域设置uselocale(),并且无法正确处理小数点/逗号。这是 macOS 中的错误吗?有解决方法吗?
这是一个测试程序,它演示了这一点printf()并scanf()尊重小数点设置,但strtod()事实并非如此。
#include <locale.h>
#include <xlocale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main() {
double x;
const char *num = "12.3";
char *end;
// First we set the locale globally to something that uses decimal
// commas instead of decimal points.
const char *locname = setlocale(LC_ALL, "de_DE");
struct lconv *lc = localeconv();
if (strcmp(lc->decimal_point, ",")) {
/* If decimal point is not …Run Code Online (Sandbox Code Playgroud)