当我输入
时,我的代码可以正常工作if size(k)==size(k1)
disp('They match');
end
或
if k-k1==0
disp('They match');
end
但如果我同时输入两个条件,
if size(k)==size(k1) & k-k1==0
disp('They match');
end
我收到错误说
矩阵尺寸必须达成一致。
练习错误(第32行)如果尺寸(k)==尺寸(k1)& K-K1 == 0
仅供参考,k
和k1
的维度均为1x717
加倍。我查了一下。
所以我想制作一个同时包含两个条件的if
语句,但我遇到了错误。两个&&
将无效,因为两个&&
用于标量,但我的k
和k1
是向量。
任何帮助将不胜感激
答案 0 :(得分:1)
比较两个向量时,结果也是向量(逻辑向量),但if
条件接受标量逻辑值,因此可以使用all
函数。
if all(size(k)-size(k1)==0) && all(k-k1==0)
disp('They match');
end
您应始终在循环中使用&&
,'&'仅用于逻辑运算AND。
我测试了这个并且它有效:
k = rand(1,10);
k1 = k;
if all(size(k)-size(k1)==0) && all(k-k1==0)
disp('They match');
end
因为当你这样做时:
>> k-k1==0
ans =
1×10 logical array
1 1 1 1 1 1 1 1 1 1
因此if
不知道要引用哪个值。但是当你做的时候
>> all(k-k1==0)
ans =
logical
1
它为矢量的所有元素提供了唯一的答案。
重要提示:
由于Floating Point Error problem,比较数字对于循环决策并不是一个好主意。
更好的战争来处理它
如果您阅读有关浮点错误的问题,您会看到有时,
2.000 == 2.000
结果为false
。为了解决这个问题,您可以执行以下操作:
tolerance = 0.0001;
if all(size(k)-size(k1)==0) && all(abs(k-k1)<=tolerance)
disp('They match');
end
首先根据您尝试解决的问题的性质定义可接受的容差值,然后将抽象的绝对值与容差进行比较,而不是将减法值与零进行比较。因此,23.0001
和23.000
等数字将被视为相等。
答案 1 :(得分:0)
问题是size(k)
,size(k1)
返回1 * 2个向量(行数和列数),因此size(k)==size(k1)
返回两个值。另一方面,k-k1==0
仅返回与k&amp;具有相同维度的逻辑矩阵。 K1。
例如,如果k == k1
,您会期望两者相等。
size(k)==size(k1) % returns 1 1
k == k1 % returns 1
if [1 1] && 1 % gives erros
或者,使用isequal
即使尺寸不匹配也不会出错。
isequal(k,k1) % returns 1 if equal, 0 otherwise.