2015-10-16 1 views
-1

Mon but est d'avoir un code qui soit vrai si je lui donne une matrice qui n'est pas un carré et des drapeaux faux si c'est un carré.Comment marquer vrai si det (A) n'est pas un carré? MATLAB

Mon code fonctionne correctement lorsque je lui donne une matrice non carrée. Cependant cela me donne une erreur quand je lui donne une matrice carrée?

Comment réparer mon code?

function [flag] = checkSing(A) 

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

end 

Ceci est le message d'erreur que j'ai reçu.

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 

Répondre

1

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