2017-05-02 2 views
0

Je suis en train de calculer lim (n> inf) D^n, où D est une matrice diagonale:Matlab: Limite de n à l'infini pour le pouvoir d'une matrice

D = [1.0000 0 0 0; 0 0.6730 0 0; 0 0 0.7600 0; 0 0 0 0.7370] 
n = 1 
L = limit(D^n,n,inf) 

Cela renvoie l'erreur : Fonction 'limite' indéfinie pour les arguments d'entrée de type 'double'.

Je suis sûr que cela devrait aboutir à la plupart des entrées, sauf l'entrée en haut à gauche qui va à zéro, mais je dois être en mesure de présenter cela avec des résultats MATLAB. Y a-t-il autre chose que je dois inclure dans ma fonction limite?

+0

'limit' est une fonction symbolique. Êtes-vous sûr de ne pas vouloir dire «syms n»; L = limite (D^n, 1, inf) ' –

+0

Avez-vous la boîte à outils mathématique symbolique installée? Il est requis pour la fonction ['limit'] (https://fr.mathworks.com/help/symbolic/limit.html?searchHighlight=Limit&s_tid=doc_srchtitle) ... – Wolfie

+0

Avez-vous vraiment besoin de présenter ceci dans MATLAB? Il est tout à fait clair que le résultat sera tout à zéro, sauf pour le coin supérieur gauche. Vous pouvez voir que toutes les diagonales sauf celle en haut à gauche ont une valeur inférieure à 1, et [élever une matrice diagonale à la puissance 'n' prendrait simplement les puissances de chaque diagonale individuellement à la puissance 'n' avec le reste de la matrice définie sur 0] (http://cs.ups.edu/~bryans/Current/Spring_2014/Handout_DiagonalMatrixPowers.pdf). Par conséquent, en élevant ceux-ci à la puissance infinie, vous obtiendriez une matrice nulle comme 'r^n = 0' si' | r | <1' et 'n -> infini'. – rayryeng

Répondre

0

Si votre problème est de calculer la limite inf d'une matrice diagonale, vous feriez mieux de créer votre propre fonction et de gérer manuellement les cas possibles:

function Mlim = get_diag_matrix_inf_limit(M) 
    % get the diagonal 
    M_diag = diag(M); 

    % All possible cases 
    I_nan = M_diag <= -1; 
    I_0 = abs(M_diag) < 1; 
    I_1 = M_diag == 1; 
    I_inf = M_diag > 1; 

    % Update diagonal 
    M_diag(I_nan) = nan; 
    M_diag(I_0) = 0; 
    M_diag(I_1) = 1; 
    M_diag(I_inf) = Inf; 

    % Generate new diagonal matrix 
    Mlim = diag(M_diag); 
end