2016-07-18 10 views
-2

Lorsque j'exécute cette extension de Laplace dans Matlab pour determinant, j'obtiens la fonction "Undefined ou variable" A "". Je serai heureux si quelqu'un peut m'aider à le corriger et le rendre réalisable.Matlab: expansion de Laplace

function value = Laplace 
    A=input('matrix A ='); 
    [rows, columns] = size(A); 
if rows == 2 
    for i = 1:rows 
    value = A(1,1)*A(2,2) - A(1,2)*A(2,1); 
    end 
else 
    if rows==3:size(A); 
    for i = 1:rows 
    columnIndices = [1:i-1 i+1:rows]; 
value = value + (-1)^(i+1)*A(1,i)*...*Laplace(A(2:rows, columnIndices)); 
    end 
end 

Merci

+1

Veuillez fournir un message d'erreur [mcve] et le message d'erreur * full *. – excaza

+0

@excaza J'ai fourni le message d'erreur. Tous les codes Matlab pour l'expansion de Laplace que j'ai obtenus en ligne ne fonctionnent pas. Je peux créer un code réalisable pour la commande 2,3 et 4 mais je ne pourrais pas le généraliser pour la dimension plus élevée. Merci – babs

+0

@beaker merci je ne ferai pas encore – babs

Répondre

0

Voici une façon de rendre votre code pratique:

function value = Laplace(A) 
if nargin < 1 
    n = input('Matrix dimention = '); 
    A = rand(n); 
end 
[rows, ~] = size(A); 
value = 0; 
if rows == 2 
    for i = 1:rows 
     value = A(1,1)*A(2,2) - A(1,2)*A(2,1); 
    end 
else 
    if rows >= 3 
     for i = 1:rows 
      columnIndices = [1:i-1 i+1:rows]; 
      value = value + (-1)^(i+1)*A(1,i)*Laplace(A(2:rows, columnIndices)); 
     end 
    end 
end 
end 

Cela ne signifie pas qu'il fait ce qu'il faut, je ne fixe toutes les erreurs qui l'empêchent de travailler, deviner quelle était l'intention originale.

+0

merci. Je dois le comparer avec la méthode de Bariess et la condensation de Dodgson et de montrer qu'il ne convient pas à la dimension supérieure – babs

+0

S'il vous plaît, que signifie «si nargin <1». J'ai d'abord pensé que vous aviez fait une erreur pour "marge", puis j'ai découvert que si je le change en marge, je vais obtenir un graphique pour le diagramme de Bode. Vous écrivez aussi que cela ne signifie pas qu'il fait ce qu'il devrait. Je regarde comment je vais le réparer pour travailler pour une dimension supérieure à deux. Il semble que la valeur après d'autres n'est pas correcte. – babs

+0

@babs 1. J'ai changé le code afin qu'il fonctionne pour size> 3 => 'if rows> = 3'. Pourtant, je ne connais pas toutes ces méthodes dont vous avez parlé, vous devez vérifier si elle fait ce qu'elle devrait faire. 2. 'nargin' est une variable qui contient le nombre d'entrées à la fonction quand elle a été appelée, donc si vous l'appelez sans aucune entrée, comme' Laplace' elle vous demandera la dimension de la matrice, mais quand vous l'appelez depuis l'intérieur de la fonction (récursivement) 'Laplace (A (2: rows, columnIndices))' alors il saute la première partie. – EBH