【问题标题】:MATLAB how to write a for loop with 2 conditions, one is "==", the other is "~="?MATLAB如何写一个for循环有2个条件,一个是“==”,另一个是“~=”?
【发布时间】:2019-11-21 02:38:58
【问题描述】:

我正在尝试在 Simulink 中编写一个 S-Function,输入“t”代表时间,“LIBs”代表进入系统的材料量。有2个输出。这个想法在 Simulink 中是这样的。 Simulink model concept

我想要做的是,在某个时间迭代中,输入“LIBs”转到不同的输出。但在迭代过程中,有一些特殊点我不希望输入转到任何输出。

代码是这样的:

MATLAB

function [Batts_Spent, Batts_N_Spent] = BattsL6Y(t, LIBs)
for t = 2011:6:2035 
    if t ~= 2005:10:2035
        Batts_Spent = LIBs;
    end
end
for t = 2015:10:2035 
    if t ~= 2005:6:2035
        Batts_N_Spent = LIBs;
    end
end
for t = 2011:6:2035 
    if t == 2015:10:2035
        Batts_Spent = LIBs;
    end
end
end

我确定这段代码不正确,但我不知道如何正确编写。

而且,即使我有多个输入和输出端口,Simulink 项目中的 S-Function 模块仍然只有一个输入和输出端口。我应该将其更改为 MATLAB Function 块吗?

【问题讨论】:

  • 不清楚预期的输出是什么。你能设计一组简单的输入 los 和相应的输出来演示吗?现在你的代码毫无意义,因为你在循环中一遍又一遍地覆盖同一个变量。
  • 我添加了一个图形来展示这个 Simulink 模型的概念。很抱歉我只能添加链接。

标签: matlab simulink


【解决方案1】:

在您的情况下,t 是一个输入参数,这使得它看起来像为每个 t 值调用函数。然后你有一个循环遍历t 的所有值。考虑到您的形象,您根本不需要循环。您可以将ifmod 结合使用。例如:

function [Batts_Spent, Batts_N_Spent] = BattsL6Y(t, LIBs)
if mod(t-2005,6)==0 && t>=2005
  Batts_Spent = LIBs;
end
end

这只是“每 6 次将 LIB 的值分配给第一个输出”。这不是一个完整的解决方案,但应该足以让您入门。如果其他输出是这样,您需要一秒钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多