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的值。