Operands to the logical and (&&) and or (||) operators must be convertible to logical scalar values.

我在学习MATLAB的使用中有一次在使用if语句的时候遇到了这个报错,当时一直没有弄明白原因,现在解决了之后希望能和大家分享一下。

报错指令的解释

根据剑桥词典:

operand代表数据运算中的运算对象,convertible意为替换,scalar values指标量。那么整个句子的意思就可以理解为:参与逻辑与和逻辑或的运算对象必须转化为标量形式。现在这个问题的原因其实已经很明确了,我想对于大多数朋友来说问题都是一样的,那么就是运算对象选择为了向量(矩阵),我之前的报错代码为一个函数:

function f = fun2(x)
    if x>=0
        x = mod(x,11);          
        if x>=0 && x<=2
            f = 1; 
        elseif x>=9 && x<=10         
            f = 1;
        else
            f = 0;
        end
    else
        x = mod(-x,11);
        if x>=0 && x<=2
            f = 1; 
        elseif x>=9 && x<=10           
            f = 1;
        else
            f = 0;
        end
    end
end

不出意外报错出现,因为我的函数变量x为一个向量。

解决方法

在这里需要注明的是,以下解决方法受到了MATLAB Answer上一个回答的启发,有兴趣的朋友可以移步:MATLAB Answer上的回答

简单来说就是在数据运算的时候想办法指定到每一个元素,我们可以先创建一个大小与原向量相同的向量:

temp = ones(1,numel(x));

然后使用for循环挨个读取并操作:

temp = ones(1,numel(x));
for k = 1:numel(x)
%输入具体的temp(k)与x(k)之间的关系
f = temp;%向量f即为所求
end

我的修改代码如下:

n = -40:1:40;
f_n = fun1(n);
stem(n, f_n);
function f = fun1(x)
temp = ones(1,numel(x));
for k = 1:numel(x)
a = x(k);
    if a>=0
        a = mod(a,11);          
        if a>=0 && a<=2
            temp(k) = 1; 
        elseif a>=9 && a<=10         
            temp(k) = 1;
        else
            temp(k) = 0;
        end
    else
        a = mod(-a,11);
        if a>=0 && a<=2
            temp(k) = 1; 
        elseif a>=9 && a<=10           
            temp(k) = 1;
        else
            temp(k) = 0;
        end
    end
f = temp;
end
end

运行成功

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值