【问题标题】:How to implement for-loops in Matlab Function block in Simulink如何在 Simulink 的 Matlab 功能块中实现 for 循环
【发布时间】:2019-07-16 21:01:29
【问题描述】:

我有一段从命令行运行时运行良好的代码,但是当它在我的 Simulink 仿真中的 Matlab 功能块内运行时,我得到一个矩阵尺寸标注错误。

使用调试器,我发现 for 循环的行为与我的预期不同,我不确定如何在不对其他人的代码进行重大重写的情况下修复它。

这是导致问题的代码的 sn-p。

for k=input
        idx=4+2*(i-1)+1;
        yhat=yhat+th(idx)*cos(k.*(2.*pi.*60.*t+th(1).*t))+th(idx+1)*sin(k*(2*pi*60*t+th(1)*t));
end

通常,k 将采用从 2 到 13 的每个值,这将像人们期望的那样运行 for 循环。出于某种原因,当我在yhat 行上设置断点时,我发现k 是向量[2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13],这是我期望input 的转置。有谁知道发生了什么会导致此代码在 Matlab 函数块中以不同方式运行或如何修复它?

【问题讨论】:

  • 你在哪里定义输入变量?

标签: matlab for-loop simulink


【解决方案1】:

facepalm,我在发布问题后立即想通了。显然 Simulink Constant 块即使提供了行向量也会输出列向量。

For 循环遍历提供的向量的列,所以

for ii = [1 2; 3 4]
    ii
end

例如输出[1;3] [2;4]。因为常量块将我的输入作为列向量提供,这导致 for 循环遍历 1 列。转置向量解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多