MATLAB如果函数和,矩阵尺寸必须同意错误
问题描述:
我的代码工作,当我键入MATLAB如果函数和,矩阵尺寸必须同意错误
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
FYI,的k
和尺寸均为1x717
两倍。我检查了它。
所以我想制作一个if
语句,它同时包含两个条件,但是我遇到了一个错误。两个&&
将无法正常工作两个&&
是标量,但我的k
和是向量。
当你比较两个向量的结果也将是一个向量(矢量逻辑)任何帮助将不胜感激
答
,而是一个if
条件接受标逻辑值,所以你可以使用all
功能。
if all(size(k)-size(k1)==0) && all(k-k1==0)
disp('They match');
end
你应该总是在一个循环中使用&&
,“&”仅用于逻辑运算和。
我测试了这一点,它的工作原理:
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
的数字将被视为相等。
答
问题是size(k)
和size(k1)
返回1 * 2个向量(行数和列数),所以size(k)==size(k1)
返回两个值。另一方面,k-k1==0
仅返回与k & 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.
k-k1 == 0不返回一个值,它返回一个大小为'k'的向量。 – NKN
@NKN,是的,我不小心。现在更新了,谢谢 – smttsp
很酷,感谢编辑。 – NKN