1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| //Fonction qui calcule le polynôme de matrice P(A) :
function result = polyvalm(P, A)
//Initialiser résultat avec la matrice nulle de même taille que A
n = size(A, 1);
result = zeros(n, n);
// Obtenir les coefficients du polynôme
coeffs = coeff(P);
// Calculer chaque terme du polynôme
for i = 1:length(coeffs)
result = result + coeffs(i) * A^(i-1);
end
endfunction
//Algorithme pour Dunford via Newton
function [D,N] = dunford(A)
//calcule le polynôme caractéristique
chi = poly(A,"x")
chiprime = derivat(chi)
P = chi / gcd([chi,chiprime])
//calcule le polynôme P
P = P('num')
//calcule de P'
Pprime = derivat(P)
//initialisation des variables
k = 0; n = size(A, 1); flag = %T; Ak=A
//calcule des termes de la suite (A_k)
while k < n & flag
PA = polyvalm(P, Ak)
if PA == zeros(n,n) then
flag = %F
else
Ak = Ak - PA*(polyvalm(Pprime, Ak))^(-1)
end
k = k + 1
end
D = Ak; N = A-D
endfunction |
Partager