Vous êtes censé vérifier les dimensions de A
pour vous assurer qu'il est carré. Le simple fait de vérifier ce que vous donne la sortie det(A)
ne vérifie pas si la matrice est carrée. Vous vérifiez ce que le résultat déterminant est ... pas le fait que la matrice est carrée. En fait, la fonction requiert que la matrice soit carrée et que vous obteniez cette erreur .... vos vérifications d'erreur ne fonctionnent pas.
En tant que tel, si vous voulez vérifier si la matrice n'est pas carrée, vérifiez simplement si le nombre de lignes n'est pas égal au nombre de colonnes:
function [flag] = checkSing(A)
flag = size(A,1) ~= size(A,2);
end
Ce retourne un drapeau où c'est vrai si le nombre de lignes n'est pas égal au nombre de colonnes.
Remarque mineure
Je ne pense pas que vous décrivez votre problème correctement .... est appelé le nom de votre fonction checkSing
... que je suppose que vous voulez dire que vous voulez vérifier si la matrice est singulière. Si c'est le cas, alors vérifier pour voir si le déterminant est nul est la définition de la matrice étant singulière. Est-ce que c'est ce que tu veux vraiment? Si c'est le cas, vous devez modifier ce code pour vérifier si la matrice est également carrée.
Quelque chose comme cela fonctionnera:
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