【问题标题】:Using Matlab toolbox "PDToolbox" with Octave: Error messages使用带有 Octave 的 Matlab 工具箱“PDToolbox”:错误消息
【发布时间】:2020-07-03 20:41:47
【问题描述】:

我想在八度音阶下使用 Matlab 中的“PDToolbox”。我正在使用来自https://github.com/carlobar/PDToolbox_matlab 的版本,但我也尝试过发布 v1。我在 ubuntu 18.04 下使用 octave 4.2.2。

安装工具箱后,我首先尝试在测试目录中运行测试。其中一些运行良好(有时在将 ole113 替换为 ole23 之后),但所有具有多个群体的测试都会给出基本相同的错误消息。以 test2.m 为例:

>> test2
Running rd dynamics
error: ode45: INIT must be a numeric vector

我尝试加载软件包 octave-odepkg (0.8.5)。 (这给出了有关隐藏核心 libery 函数的警告。)之后我收到一条略有不同的错误消息:

>> test2
Running rd dynamics
error: Third input argument must be a valid numerical value

我无法访问 matlab,所以我的第一个问题是 matlab 是否会出现相同类型的错误。但我的主要问题当然是,如何克服这些错误。

【问题讨论】:

    标签: matlab octave ode45


    【解决方案1】:

    使用 debug_on_error(1) 强制 octave 在出错时进入调试模式。

    从中您将看到,在 run_game 的第 47 行,它试图将初始状态 G.x0 传递给 ode45,但这是一个 2x2 矩阵。

    Ode45 第 133 行试图确保初始状态是向量的形式,因此会出现错误。

    我尝试将这个初始状态转换为 test2.m 文件本身中的一个向量(例如,我做了x0 = x0(:)),看看是否能解决问题,但随后包抱怨其他东西的形状不一样,这意味着您必须寻找所有重要的地方。

    无论如何,只要您使用向量而不是矩阵作为输入,听起来这个工具箱不一定与八度音程不兼容。但鉴于测试使用矩阵,您可能需要先对其进行一些调整才能确定。

    【讨论】:

    • 谢谢。您的回答帮助解决了我的问题。在调用 run_game.m 中的 ode 求解器之前,我没有将初始状态更改为测试文件中的向量。我使用了x0 = x0'(:)
    • 太棒了。但是,如果您这样做,请确保在 ode 操作之后将输出重新整形为预期的形状,否则您可能会因为传递与预期不同大小的东西而产生无声的副作用!
    猜你喜欢
    • 2023-03-25
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2011-03-26
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多