Matlab 有什么好方法可以简化以下逻辑操作吗?
我正在执行类似于以下逻辑操作的操作: 例如,测试Matlab 有什么好方法可以简化以下逻辑操作吗?,matlab,Matlab,我正在执行类似于以下逻辑操作的操作: 例如,测试(x,y),x和y只取0或1的值,因此有4种不同的选择:(0,0)、(0,1)、(1,0)和(1,1)。我希望如果(0,0)发生,那么程序执行function00(0,1)表示函数01(1,0)用于功能10,代码>(1,1)用于功能11 当然,我可以使用if-then-else来编写它,但我想它有点长 if x==0 && y==0 'run function00' else if x==0 && y==1
(x,y),x和y
只取0或1的值,因此有4种不同的选择:(0,0)、(0,1)、(1,0)和(1,1)
。我希望如果(0,0)
发生,那么程序执行function00
<代码>(0,1)表示函数01<代码>(1,0)用于功能10,代码>(1,1)用于功能11
当然,我可以使用if-then-else
来编写它,但我想它有点长
if x==0 && y==0
'run function00'
else if x==0 && y==1
'run function01'
else if x==1 && y==0
'run function10'
else if x==1 && y==1
'run function11'
end
end
end
end
这里的重点是使用它,否则代码将无法读取。我尝试使用开关
,使其在某种意义上更具可读性:
switch (x,y)
case (0,0)
'run function00'
case (0,1)
'run function01'
case (1,0)
'run function10'
case (1,1)
'run function11'
end
但是,当我使用
开关时,问题是当我将大小写设置为(0,0)、(0,1)、(1,0)和(1,1)
时出现语法错误。我想知道如何修复它,或者其他我不知道的操作也可以做同样的事情。谁能给点建议吗?这里,假设我已经定义了function00.m
、function01.m
、function10.m
和function11.m
。您可以动态构造字符串“function”+x+y,并使用eval将该字符串作为函数执行。这可能是您案例中最简单的解决方案
eval(sprintf('run function%d%d',x,y))
您可以动态构造字符串“function”+x+y,并使用eval将该字符串作为函数执行。这可能是您案例中最简单的解决方案
eval(sprintf('run function%d%d',x,y))
我建议避免使用eval
,而是使用函数句柄。定义函数句柄的单元格数组
>> fh = cell(2,2);
>> fh{1,1} = @function00; fh{1,2} = @function01; % And so on for all four elements
>> out = fh{x+1,y+1}(); % Where x y are your binary variables
我建议避免使用eval
,而是使用函数句柄。定义函数句柄的单元格数组
>> fh = cell(2,2);
>> fh{1,1} = @function00; fh{1,2} = @function01; % And so on for all four elements
>> out = fh{x+1,y+1}(); % Where x y are your binary variables
谢谢,我还没想过用这个。另外,出于兴趣,是否可以使用“switch”进行写入,从而解决问题?switch只接受一个标量或一个字符串。所以,若你们要使用switch,你们需要用一个量来表示x和y。例如z=sprintf('%d%d',x,y);开关(z);案例“00”:运行函数00。。。但是我建议您坚持使用eval解决方案,因为您的函数名与x和y完全匹配;使用eval没有比这个更好的上下文了。谢谢,我还没有考虑过使用这个。另外,出于兴趣,是否可以使用“switch”进行写入,从而解决问题?switch只接受一个标量或一个字符串。所以,若你们要使用switch,你们需要用一个量来表示x和y。例如z=sprintf('%d%d',x,y);开关(z);案例“00”:运行函数00。。。但是我建议您坚持使用eval解决方案,因为您的函数名与x和y完全匹配;没有比这更好的使用eval的上下文了。每个函数运行通常需要多长时间?请具体点。。。(我这样问是因为也许你的代码可以矢量化;有时只计算所有4个选项并在最后选择正确的选项会更快)我拥有的函数可以根据计算时间进一步分为两种类型:一种类型需要大约30秒,而另一种类型需要大约5分钟才能运行。实际上,在我的程序中,(x,y)对每个x和y取0到2的值。这些函数运行通常需要多长时间?请具体点。。。(我这样问是因为也许你的代码可以矢量化;有时只计算所有4个选项并在最后选择正确的选项会更快)我拥有的函数可以根据计算时间进一步分为两种类型:一种类型需要大约30秒,而另一种类型需要大约5分钟才能运行。实际上,在我的程序中,(x,y)对每个x和y取0到2的值。