Matlab ||和&&运算符的操作数必须能够转换为逻辑标量值(Matlab中的逻辑运算"&&"与"&","||"与"|"的区别)

如果使用matlab的过程中,出现以下错误:

Error:Matlab ||和&&运算符的操作数必须能够转换为逻辑标量值

解决:||和&&为值运算, |与&为向量运算,改为|与&。

比如:

clc;clear all;close all;
% y=zeros(1,200); 
x=-0.1:0.001:0.1
% for 
Es=2*10^5;             %钢筋的弹性模量Es(N/mm2)
fy=375;             %纵筋屈服强度
ey=fy/Es;           %纵筋屈服应变
fu=635.6;           %纵筋峰值强度
ks1=4.0;
ks2=25.0;
ks3=40.0;           
ks4=fu/fy;
%%%---------------钢筋参数---------------------
%钢筋拉伸和压缩应力应变情况一致。
%主要为钢筋的四个阶段:完全弹性阶段——非线性弹性阶段——屈服阶段——破坏
% 
if ((x>-ey)&&(x<=ey))
    y=Es*x;
elseif ((x>ey)&&(x<=ks1*ey))
    y=fy;
elseif ((x>=-ks1*ey)&&(x<=-ey))
    y=-fy;
elseif ((x>ks1*ey)&&(x<=ks3*ey))
    y=Es*(ks4*ey+(1-ks4)*(x-ks2*ey)^2/ey/(ks2-ks1)^2);
elseif ((x>-ks3*ey)&&(x<=-ks1*ey))
    y=-Es*(ks4*ey+(1-ks4)*(x-ks2*ey)^2/ey/(ks2-ks1)^2);
else
    y=0;
end
% end
plot(x,y) ;grid on;

老是显示:运算符的操作数必须能够转换为逻辑标量值,这是为何?

那是因为:
你的x是一个向量啊,x=-0.1:0.001:0.1
你x>ey)&&(x<=ks1*ey这样做判断的话,系统也不知道你要用哪一个x做比较啊。。。

这里先普及一下matlab中&&和&的区别:

逻辑运算符:

&与
|或
~非

“&”和“|”操作符可比较两个标量或两个同阶矩阵.对于矩阵来说必须符合规则,如果A和B都是0-1矩阵,则A&B或A|B也都是0-1矩阵,这个0-1矩阵的元素是A和B对应元素之间逻辑运算的结果,逻辑操作符认定任何非零元素都为真,给出“1”,任何零元素都为假,给出“0”.

 非(或逻辑非)是一元操作符,即~A:当A是非零时结果为“0”;当A为“0”时,结果为“1”.因此下列两种表示:

p | (~p) 结果为1.

p & (~p) 结果为0.

any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”.这些函数在if语句中经常被用到.如:

if all(A<5)

   do something

end

另外,还有"&&“和”||“运算符,Matlab中的逻辑运算”&&“与”&","||“与”|"的区别如下:

&&和||被称为&和|的short circuit形式,

A&B
(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。
(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0])。
A&&B
(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
(2)A和B不能是矩阵,只能是标量。
"|"与“||”同理。

A&&B 首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。另外这也可以防止类似被0除的错误:

flag=denum~=0 && num/denum>10
if flag
%Do Something
end if
上面的表达式就可以防止denum等于0的情况。当然,如果你希望在判断的时候,对A和B表达式都进行计算,就应该使用标准的&或者|。Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。

if flag=denum~=0 && num/denum>10
%Do Something
end if

if flag=denum~=0 & num/denum>10
%Do Something
end if

执行的结果一样

其实吧,意义上与C语言相同,&&只能用于逻辑‘与’,结果真有真假,若要表示运算‘与’,应用&。

更一般的“逻辑与(&&) 逻辑或(||)”

逻辑与操作可以应用到任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;因此,遵循下列规则:

  1. 如果第一个操作数是对象,则返回第二个操作数;
  2. 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true 的情况下才会返回该对象;
  3. 如果两个操作数都是对象,则返回第二个操作数;
  4. 如果有一个操作数是null,则返回null;
  5. 如果有一个操作数是NaN,则返回NaN;
  6. 如果有一个操作数是undefined,则返回undefined;

逻辑与操作属于短路操作,既如果第一个操作数能够决定结果,那么就不会对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是false,则无论第二个操作数是什么值,结果都不可能是true了。来看下面的例子:

var found = true;
var result = (found&&someUndefinedVariable);
console.log(result);

上述代码执行过程中会发生代码错误,因为变量 someUndefinedVariable
没有声明。由于变量found的值是true,所以逻辑与操作符会继续对变量someUndefinedVariable求值。但是someUndefinedVariable 尚未定义,因此就会导致错误。当found = false,时代码就不会出现错误

逻辑与 ||
与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑与也不一定返回布尔值;此时,它遵循下列规则

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数的求值结果是false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null,则返回null
  • 如果两个操作数都是NaN,则返回NaN
  • 如果两个操作数都是undefined,则返回undefined
  • 43
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: || 和 && 运算符操作数必须能够转换逻辑标量的数据类型。这意味着它们必须是布尔型、数型或指针类型。如果操作数不是这些类型,则编译器会发出错误提示。在运行时,如果操作数不能转换逻辑标量,则会出现运行时错误。因此,在使用这些运算符时,需要注意操作数的数据类型。 ### 回答2: || 和是用于逻辑运算的符号,它表示“或者”的含义。在逻辑推理和条件判断,常常需要考虑多种情况下的结果,此时 || 就起到了重要的作用。例如,在程序设计,我们经常使用条件语句 if...else if...else,而其的每个条件判断语句都可以使用 || 和 && 进行多个条件的判断。 在逻辑运算,|| 的使用要注意一些细节。首先,|| 只有在左右两边的条件均为 false 时才会返回 false,否则都会返回 true;其次,如果左侧条件的结果已经为 true,右侧条件的结果不再需要判断,因为不管右侧的条件是 true 还是 false,整个条件表达式的结果都是 true;最后,如果左侧条件的结果已经能够决定整个条件表达式的结果,右侧条件的结果也不再需要判断。 除了在逻辑运算,|| 还可以用于字符串的拼接。例如,在 JavaScript ,使用加号可以将多个字符串拼接成一个字符串,而使用 || 可以实现“短路求”的功能:如果左侧字符串不为空,则返回左侧字符串,否则返回右侧字符串。 总之,|| 在逻辑运算和字符串拼接都有广泛的应用。能够灵活使用它,不仅可以提高我们的编程能力,还能帮助我们更好地理解逻辑思维的本质。 ### 回答3: || 和是数学经常用到的符号,表示两个数的逻辑与运算。这种运算通常用于逻辑判断,例如在程序设计时,可以用&&判断两个条件是否同时成立。 在逻辑运算,如果两个条件都是真,结果是真;如果其一个条件为假,结果是假。因此,使用与运算可以使程序更加严谨和安全,确保条件都满足时才会执行相应的代码。 在实际应用,&&符号也经常用于控制流程,例如if语句的条件判断。使用&&可以简化代码逻辑,使程序更加易读易懂,并且提高程序的效率和可靠性。 除了与运算,数学还有许多其他的逻辑运算符号,例如或运算符号“|”,表示两个条件任意一个成立即为真。除此之外,还有非运算符号“!”,表示取反。 总之,&&符号是一种常用的逻辑运算符号,在程序设计和逻辑判断都有广泛的应用。掌握并正确使用它,可以提高程序的效率和可靠性,也可以让程序代码更加清晰易懂。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值