巧妙利用try,catch语句解决Operands to the || and && operators must be convertible to logical scalar values

84db646273f34a1fb126e8640a429d16.png

如图所示,在用if语句做逻辑“与 ”和逻辑“或”运算时,会出现“Operands to the || and && operators must be convertible to logical scalar values”的报错,报错的文字意思是用逻辑运算与和或时,参与运算的数据类型必须是逻辑型的,但是我用logical函数强制转换还是会同样的报错,如下图所示5ca9d3c80bc74f518096908a93b2204f.png

所以这个应该是一个bug,或者是我水平浅理解不到位。但是我们是利用Matlab解决问题的,我们用if和逻辑运算与和或,无非是把目标分成两类,那我们有没有办法在使用逻辑运算与和或的前提下还能满足 分类要求?

        答案是有的。通过分析,我们知道这个代码是判断“2003-g”在不在字符串x里,如果在,输出“111yes”,如果不在,输出“111no”,本人发现如果查找在字符串里的字符,就不会报错,可以输出“111yes”。查找字符串不在的时候才会报错。那么我们就可以利用try-catch语句,把报错的时候需要执行的功能放到catch上,不报错需要执行的功能放到try上,就可以完美的实现分类。这个是我在处理数据的时候碰到问题拿出来单独做的功能试验,大家如果碰到类似问题(仅限类似问题),欢迎评论区留言(注释:Matlab版本是Matlab12,别问我为什么版本那么低,懂的都懂😂😂)

### MATLAB 中逻辑运算符 `&&` 和 `||` 的操作数必须可转换为标量逻辑值 在 MATLAB 中,当遇到错误提示 “Operands to the && and || operators must be convertible to logical scalar values”,这表明参与逻辑与 (`&&`) 和逻辑或 (`||`) 运算的对象不是标量逻辑值。通常情况下,这种错误发生在尝试对数组或矩阵执行这些逻辑运算时。 为了避免该错误并实现预期的功能,可以使用 `all()` 或 `any()` 函数来处理非标量条件表达式: - 使用 `all()` 来检查所有元素是否满足某个条件。 - 使用 `any()` 来确认至少有一个元素符合条件。 以下是修正后的代码片段示例[^1]: ```matlab function f = fun2(x) if isscalar(x) % Check if input is a scalar value if x >= 0 x = mod(x, 11); if (x >= 0 && x <= 2) || (x >= 9 && x <= 10) f = 1; else f = 0; end else x = mod(-x, 11); if (x >= 0 && x <= 2) || (x >= 9 && x <= 10) f = 1; else f = 0; end end else error('Input should be a scalar.'); end end ``` 如果希望支持向量输入,则可以通过循环遍历每个元素或将逻辑测试应用于整个数组,并利用 `all()` 或 `any()` 处理结果。例如,对于查找特定范围内的索引问题,应该改写成这样[^4]: ```matlab % 正确的方式 k = find((A >= 10) & (A <= 25)); ``` 这里需要注意的是,在比较两个相同大小的数组时应使用单个 `&` 而不是双 `&&`;同样地,对于按位或则应用单个 `|` 而非双 `||`。这是因为后者只适用于标量之间的短路求值,而前者能够逐元素地作用于数组上的布尔运算。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值