gpt4 book ai didi

matlab - 以编程方式获取有效的开关/案例值

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:50 28 4
gpt4 key购买 nike

当 MATLAB 扫描 switch/case block 中的 case 时,它​​会记住它跳过的值吗?是否可以访问该列表?我有几个带有长 switch\case block 的函数,如果它们返回 otherwise,我想让它们返回一个有效 case 值的列表。例如,我有一个函数可以返回一组 Material 的光学常数。它目前有大约 20 种不同的 Material ,而且随着我考虑使用新 Material ,它还在不断增加。

我意识到我可以对其进行暴力破解,然后将所有有效案例重新键入到 otherwise 下的元胞数组中,然后让函数抛出错误并返回有效响应列表,但是保持两个列表没有错误或随着时间的推移逐渐出现懒惰是一项挑战。

最佳答案

澄清一下,听起来您要执行的操作类似于以下内容:

value = 'z';
output = [];
switch value
case 'a'
output = 1.234;
case 'b'
output = 2.345;
case 'c'
output = 3.456;
otherwise
output = [];
disp('Please use one the the following values: a, b, c')
%It would be nice to auto-populate that string wouldn't it?
end

这在 Matlab(或我所知道的任何语言)中是不可能直接实现的。


但是,如果您从 switch/case 语句转移到更加以数据为中心的代码设计,就会变得容易。例如,上面的代码可以重写为:

%Setup (this can be preloaded and stored as persistent if too time consuming)
count = 1;
allvalues(count).name = 'a'; allvalues(count).value = 1.234; count = count+1;
allvalues(count).name = 'b'; allvalues(count).value = 2.345; count = count+1;
allvalues(count).name = 'c'; allvalues(count).value = 3.456; count = count+1;

%Lookup
value = 'z'; %Also try value = 'a'

maskMatch = strcmp({allvalues.name},value);
if any(maskMatch)
output = allvalues(maskMatch).value;
else
disp('Please use one of the following values:');
disp({allvalues.name});
end

这是使用结构数组存储数据的示例。有很多方法可以使用 Matlab 数据结构来存储这种数据,例如 map 或元胞数组。有关比较全面的列表,请参阅此问题的答案:MATLAB Changing the name of a matrix with each iteration

关于matlab - 以编程方式获取有效的开关/案例值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com