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.000123.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. 
+1

k-k1 == 0不返回一个值,它返回一个大小为'k'的向量。 – NKN

+0

@NKN,是的,我不小心。现在更新了,谢谢 – smttsp

+0

很酷,感谢编辑。 – NKN