-1

我的目标是让代码在我给它一个不是正方形的矩阵时标记为真,如果它是一个正方形则标记为假。

当我给它一个非方阵时,我的代码可以正常工作。但是,当我给它一个方阵时它会给我一个错误?

我该如何修复我的代码?

function [flag] = checkSing(A) 

if det(A) == 0%if matrix is a square
    flag = 1;
elseif det(A) ~=0
    flag = 0;
end

end

这是我收到的错误消息。

EDU>> A = [1 2; 3 4; 5 6];
EDU>> B = checkSing(A)
Error using det
Matrix must be square.

Error in checkSing (line 12)
if det(A) == 0%if matrix is a square
4

1 回答 1

1

你应该检查尺寸A以确保它是方形的。简单地检查输出det(A)给您的结果并不会检查矩阵是否为正方形。您正在检查行列式输出是什么......而不是矩阵是正方形的事实。事实上,该函数要求矩阵是正方形的,这就是为什么你会得到那个错误......你的错误检查不起作用。

因此,如果要检查矩阵是否不是正方形,只需检查行数是否不等于列数:

function [flag] = checkSing(A) 
    flag = size(A,1) ~= size(A,2);
end

如果行数不等于列数,这将返回一个标志。


小注

我认为您没有正确描述您的问题....您的函数名称被称为checkSing...我假设您的意思是要检查矩阵是否为单数。如果是这种情况,那么检查行列式是否为零是奇异矩阵的定义。那是你真正想要的吗?如果是这样,那么您需要修改此代码,以便它检查矩阵是否也是正方形。

像这样的东西会起作用:

function [flag] = checkSing(A) 
    if size(A,1) == size(A,2) %// If matrix is square...
        flag = det(A) == 0; %// Flag is returned that checks if matrix is singular
    else
        flag = 1; %// Matrix isn't square, so return true anyway
    end
end
于 2015-10-16T19:14:09.210 回答