Octave:尽可能使其与MATLAB兼容

8
我需要在MATLAB上实现几个算法(作业),但我想使用GNU Octave代替。但是,我希望关闭任何Octave扩展,并基本上将其转换为MATLAB的FOSS版本。我应该更改哪些设置?执行octave程序时应提供哪些命令行选项?
PS:我知道--traditional命令行选项,尽管它似乎没什么用。
PPS:欢迎任何建议。如果遵循您的建议需要重建octave源代码,请告诉我。

你的答案很棒。我也同意不使用某些语法是简单的,但需要知道要避免什么。所以我仍然想知道为什么没有人实现任何一种--lint开关。这只是因为没有人真正需要它,还是因为难度大,或者因为某些政策的原因? - Alexander Putilin
第二件事,我稍微使用了一下Octave,并注意到Octave有qp函数,而MATLAB有quadprog。虽然我不是这个领域的专家,但二次规划对我来说似乎是基本任务。所以,另一个问题是:为什么有不同名称的函数来执行类似的任务?还有,为什么没有兼容性层可以使移植脚本更容易? - Alexander Putilin
让我有点困惑的是,Octave项目似乎将与MATLAB不兼容视为错误,但却没有最新的工具来移植脚本MATLAB<->Octave。 - Alexander Putilin
在评论中回答太多问题了(请来freenode的#octave),但基本上:因为Octave在内部使用自己的语法,所以不可能有这样的标志。quadprog不在Matlab中,而是在优化工具箱中。如果您关心它,请报告一个错误并可能提交一个补丁,使其兼容。也许是因为之前没有人需要实现兼容版本。请记住,Octave只有其用户关心实现的功能。此外,有时Octave会在Matlab之前实现一些东西(例如结构体),然后需要“修复”以实现兼容性。对于Matlab,请使用文本编辑器。 - carandraug
2
我刚刚发现你可以为不兼容的警告打开警告。尝试设置 warning ('on', 'Octave:matlab-incompatible')。你可以将其添加到你的 octaverc 文件中。 - carandraug
显示剩余2条评论
2个回答

7
除了使用--traditional选项之外,您无法做任何事情。只需不使用Octave提供的额外语法即可。毕竟,Matlab语法是GNU Octave语言的子集,您可以选择仅使用该子集。
编辑:这不是您想要的答案,但有一个很好的理由,为什么这是一项不可能的任务(不可能是指非常困难。唯一的选择就是分叉Octave并进行更改,直到它成为完全克隆体。相信我,您不想这样做)。想象以下非常例子。Octave具有“行”和“列”函数,但Matlab没有。如果您更改Octave,使这些函数不再存在,则使用它们的所有其他Octave函数(我猜很多)也将停止工作。
其他人在您之前已成功说服他们的教授接受用Octave编写的作业,只需确保您至少尝试编写兼容的代码。
编辑2:我将尝试通过将此情况与钢琴进行比较来解释(似乎是一个非常好的比较)。您可以购买带有85或88个键的钢琴。现在想象一下,Matlab是带有85个键的钢琴,而Octave是带有88个键的钢琴(如果您愿意,还可以想象Matlab有3个踏板,而Octave只有2个踏板)。这两个钢琴之间唯一的区别在于一个具有稍微更大的音域,即它可以演奏更多的音符(来自3个额外键)。但是,当您在带有85个键和带有88个键的钢琴上演奏C4时,声音相同,它们是相同的音符。音符是可用的函数和关键字。它们是相同的。一个钢琴上的音符在另一个钢琴上是相同的。
现在,如果您是写音乐的作曲家,您可能需要考虑这一点。只需不写任何需要那些额外键的音乐片段。两种类型的钢琴播放的音乐将是相同的。如果您有带有88个键的钢琴,您将不会砍掉3个额外的键,因为您希望它与带有85个键的钢琴兼容。您只需不弹奏那些键即可。带有88个键的钢琴与带有85个键的钢琴兼容,就像Octave与Matlab兼容一样。
如果您想要一个提醒您不能使用那些额外键的指南,我猜您可以在它们上面贴上一些红色的胶带,以提醒自己不要使用它们。同样,使用具有Octave和Matlab不同语法高亮的文本编辑器使用Octave,因此当您使用不属于Matlab的语法时,它将突出显示不正确。除此之外,您无法做任何事情(除非您计算分叉Octave项目,请求Mathworks在Matlab中实现它们或自己实现它们。我不是指这种粗鲁的讽刺,只是试图全面)。
为完整起见,是的,Octave尚未实现所有Matlab的功能,但随着人们的开发,它正在朝着这个方向发展。它不是一个静态的项目(只需查看开发分支的NEWS文件),随着需要它们的人员开发它们,事情得到了实现。有些功能确实会表现出不同的行为,但那些是你可以报告的错误(甚至可以修复它们,因为毕竟它是免费和开源的)。这些不兼容性并不是为了让用户感到恼火而存在的。它们存在是因为没有人报告或修复它们。此外,它们中大多数是针对不正确或未记录的Matlab功能。
编辑3:您还可以打开Matlab不兼容警告(默认情况下关闭)。运行warning ('on', 'Octave:matlab-incompatible')。您可以将其留在您的.octaverc文件中。要查看更多警告,请查看warning_ids

你明白我的意思吗? :) 顺便说一句,在这种情况下,启动一个分支真的很难,我想。在这一点上,创建一个兼容性库(包含数百个小东西,如 function R=rows(A), R=size(A,1); end)会更容易一些...或者这样的东西已经存在了吗? - Rody Oldenhuis
@RodyOldenhuis 不,我没有看到问题,编写代码的人不使用那些额外的语法是可以的。如果您使用具有Octave和Matlab不同语法高亮的文本编辑器(例如gedit-自去年初以来),这很容易做到。在Octave-Forge中有一个名为oct2mat的软件包,它尝试将Octave代码转换为Matlab,但我从未尝试过。但它已经完全不维护了,很久没有人碰它了。 - carandraug
1
作业:当然可以使用Octave。职业生涯:不可能。学习哪个更好,Matlab还是Octave?这完全取决于你的即时职业计划。如果你正在学习Octave,你还必须为什么不学习Python/SciPy/NumPy/Matplotlib进行辩护,因为我认为它有一个更大的社区。 - Rody Oldenhuis
@RodyOldenhuis 我用Octave进行图像分析,用perl进行生物信息学。我使用Octave的原因是有很多针对它编写的代码,但对于你提到的那些语言并不是很多。是的,大部分代码都是为Matlab编写的,但幸运的是,在Octave中也可以正常运行。我真的不明白你对额外的Octave语法有什么问题。它是可选的,不会破坏兼容性。而且这可能不是讨论这个问题的地方。 - carandraug
@carandraug,你没有给他想要的答案,而是给了他需要的答案。 - Irwin
显示剩余2条评论

2

我认为最好使用一个可以为你完成任务的图形用户界面(GUI)。个人建议使用Xoctave,因为它具有类似Matlab的界面和支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接