【问题标题】:Matlab: using a string as condition for if statementMatlab:使用字符串作为if语句的条件
【发布时间】:2023-03-20 05:11:01
【问题描述】:
cond = 'a==1';
a=1;
if (cond)
b=0;
end

嗨!有没有办法做我上面写的事情? 在文本变量中,我需要编写一个条件(即使是一个复杂的条件,也使用 && 和 ||),然后在 IF 语句中我只需插入变量。 我试过这个例子,但遗憾的是它没有用。你能解决吗?

编辑:为您提供更多信息!
我正在回测一个项目的不同交易策略。
在通用 M 文件中,我为需要测试的每个策略使用了一个函数。每个策略获取有关当前情况的输入数据,然后该函数根据数据(以及根据保证金要求和其他独立于策略的东西)评估交易策略的行为。每个函数中唯一不同的是进入或退出规则。 每个策略都有确定的进场和离场条件(例如,“当……和……时开多头头寸”或“当……或……时平空头头寸”)。
在主 M 文件中,我使用一个循环来模拟经过的时间,但我想实现一个进一步的外部循环,它代表测试策略的数量。 此外,到目前为止,IF 语句中的每个条件都是手工编写的,我想获得一个唯一的函数(现在每个策略不再有 1 个),根据策略的循环索引,将通过进入和退出条件取自字符串矩阵。

我希望可以做到。

【问题讨论】:

  • 我认为您的意思是 cond = 'a==1','a=1' 不是条件,而是分配。
  • 是的,你想启动a==1,那么我猜你需要使用if eval(cond)
  • 如答案中所述 - 这不是一个好主意!如果您最终陷入您认为需要使用 evil eval 的情况,那么您可能需要重新考虑您的问题......
  • eval 有一些合法用途(虽然不多)。这不是其中之一(没有更多关于这个问题的背景)。

标签: string matlab if-statement conditional-statements


【解决方案1】:

我想这就是你想要的:

cond = 'a==1';
a=1;
if eval(cond)
  b=0;
end

但是,eval 是邪恶的。尽量不要使用它:http://blogs.mathworks.com/loren/2005/12/28/evading-eval/

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多