【问题标题】:Octave: make it as much MATLAB-compatible as possibleOctave:使其尽可能与 MATLAB 兼容
【发布时间】:2012-11-02 00:24:55
【问题描述】:

我需要在MATLAB(homework) 中实现几个算法,但是我想改用GNU Octave。但我想关闭任何octave 扩展,基本上把它变成MATLAB 的FOSS 版本。我应该更改哪些设置?执行octave程序时应该提供哪些命令行选项?

PS:我知道--traditional 命令行选项,虽然它似乎没有多大作用。

PPS:欢迎提出任何建议。例如,如果按照您的建议需要从源代码重建 octave,那就顺其自然吧。

【问题讨论】:

  • 我看到你已经为此提供了一个赏金,要求一个 octave/matlab 专家,因为我的回答是好的,你想要更详细的东西。我是 Octave 开发人员和 Octave Forge 的维护者(这是包含所有 octave 包的项目),我认为答案非常完整。你能解释一下你在问什么吗?举个例子吧?
  • 您的回答很棒。我也同意它只是不使用某些语法,但它需要知道要避免什么。所以我仍然想知道为什么没有人实现甚至某种--lint 开关。是因为没有人真正需要它,还是因为困难,还是因为某些政策?
  • 第二件事,我用了一点八度,注意到八度有qp函数,而MATLAB有quadprog。我不是这个领域的专家,但二次规划对我来说似乎是一项基本任务。那么,另一个问题:为什么有不同命名的函数来做类似的事情?还有,为什么没有可以让移植脚本更容易的兼容层?
  • octave 项目似乎将与 MATLAB 的不兼容视为错误,但没有用于移植脚本 MATLABOctave 的最新工具让我有点困惑
  • 我刚刚发现你可以打开不兼容的警告。尝试设置warning ('on', 'Octave:matlab-incompatible')。您可以将此添加到您的 octaverc 文件中。

标签: matlab octave


【解决方案1】:

除了使用--traditional 选项之外,您无能为力。不要使用 Octave 提供的额外语法。毕竟,Matlab 语法是 GNU Octave 语言的一个子集,您只能使用该子集。

编辑:这不是您想要的答案,但有充分的理由说明这是一项不可能完成的任务(不可能,我的意思是非常困难。唯一的选择就是分叉 Octave 并进行更改直到它是一个精确的克隆。你不想这样做,相信我)。想象一下下面的例子。 Octave 具有“行”和“列”功能,但 Matlab 没有。如果您更改了 Octave 以使这些函数不再存在,那么使用它们的所有其他 Octave 函数(我猜很多)也将停止工作。

不过,在您成功说服他们的教授接受使用 Octave 编写的作业之前,请确保您至少尝试编写兼容的代码。

编辑 2:我将尝试通过将这种情况与钢琴进行比较来解释(似乎是一个非常好的比较)。您可以购买 85 或 88 键的钢琴。现在想象 Matlab 是一架 85 键的钢琴,而 Octave 是一架 88 键的钢琴(如果你愿意,也可以想象 Matlab 有 3 个踏板,而 Octave 只有 2 个踏板)。两架钢琴之间的唯一区别是,一架钢琴的音调范围稍大,也就是说,它可以弹奏更多的音调(来自 3 个额外的琴键)。但是当您在 85 键的钢琴上弹奏 C4 和在 88 键的钢琴上弹奏 C4 时,声音是相同的,它们是相同的音符。注释是您可用的功能和关键字。他们是一样的。一架钢琴的音符与另一架钢琴的音符相同。

现在,如果您是作曲家,正在创作音乐,您可能需要考虑到这一点。只是不要写任何需要这些额外键的音乐。两种钢琴的音乐是相同的。如果你有一架 88 键的钢琴,你不会砍掉 3 个额外的键,因为你希望它与 85 键的钢琴兼容。你根本不弹那些键。 88键钢琴兼容85键钢琴,就像Octave兼容Matlab一样。

如果你想要一个指南来提醒你不能使用这些额外的钥匙,我想你可以在上面贴上一些繁文缛节来提醒你不要使用它们。同样,使用 Octave 和文本编辑器对 Octave 和 Matlab 具有不同的语法高亮显示,因此当您使用不属于 Matlab 的语法时,它会错误地高亮显示。除此之外,您无能为力(除非您计算分叉 Octave 项目、请求 Mathworks 在 Matlab 中实现它们或自己实现它们。我并不是说这是粗鲁的讽刺,只是想详尽无遗)。

为了完成,是的,Octave 还没有实现所有的 Matlab 东西,但是随着人们开发它,它正在朝着这个方向发展。这不是一个静态项目(例如,只需查看开发分支的 NEWS 文件),事情会随着需要它们的人开发而实现。有些函数的行为确实不同,但这些是你可以report 的错误(甚至可以修复,因为它毕竟是免费和开源的)。为了惹恼用户,这种不兼容性并不是存在的。它们在那里是因为没有人报告或修复它们。此外,它们中的大多数用于不正确或未记录的 Matlab 功能。

编辑 3: 您还可以打开 matlab 不兼容警告(默认情况下关闭)。运行warning ('on', 'Octave:matlab-incompatible')。您可以将其保留在您的 .octaverc 文件中。要查看更多警告,请查看 warning_ids

【讨论】:

  • 你明白我的意思吗? :) 顺便说一句,叉子真的很难走,尤其是在我认为的这种情况下。此时创建一​​个兼容性库(包含数百个像function R=rows(A), R=size(A,1); end 这样的小东西)会容易得多......或者这样的东西已经存在了吗?
  • @RodyOldenhuis 没有。我没有看到问题,这取决于编写代码的人不使用额外的语法。如果您为 Octave 和 Matlab 使用具有不同语法高亮的文本编辑器(例如 gedit -- 仅从去年年初开始),这很容易做到。 Octave-Forge 中有一个包 oct2mat,它试图从 Matlab 中的 Octave 转换代码,但我自己从未尝试过。但它完全无人维护,很久没有人碰过它。
  • 家庭作业:当然,使用 Octave。最职业生涯:地狱里没有机会。 Matlab 和 Octave 哪个更好学?这完全取决于你近期的职业规划。如果你正在学习 Octave,你还必须为你为什么不学习 Python/SciPy/NumPy/Matplotlib 辩护,因为 AFAIK 的社区规模要大得多。
  • @RodyOldenhuis 我使用 Octave 进行图像分析,使用 perl 进行生物信息学。我使用 Octave 的原因是为它编写了很多代码,但对于您提到的那些代码却没有那么多。是的,其中大部分是为 Matlab 编写的,但幸运的是,它在 Octave 中运行良好。我真的不明白额外的 Octave 语法有什么问题。它是可选的,不会破坏兼容性。这可能不是讨论它的地方。
  • 不,不是。你有聊天吗?
【解决方案2】:

我想最好使用为您执行此操作的 GUI。我个人使用Xoctave 由于它的支持和类似 Matlab 的界面。

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 2020-02-11
    • 2023-03-15
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2014-10-03
    相关资源
    最近更新 更多