Bonsoir à tous,

étant donné que j'utilise Matlab et son algorithme de calcul de valeurs propres, je poste mon message ici.

Le calcul de valeurs propres étant un problème très complexe, je vais essayer d'être aussi clair que possible.

Pour commencer, j'ai besoin de calculer les valeurs propres et vecteurs propres d'une matrice de taille relativement moyenne. En effet, mon problème est un calcul de valeurs et vecteurs propres de la matrice de raideur (au sens de la résistance des matériaux) d'une structure faite de poutres. Cette structure contenant une petite dizaine de noeuds en moyenne et en considérant qu'à chaque noeud on associe 3 degrés de liberté, cela donne une taille de matrice aux alentours de la trentaine.

Les vecteurs propres contiennent les déplacements de chacun des noeuds et donc un mode de déformation de la structure. Les valeurs propres représentent l'énergie de déformation (à un facteur près) du mode correspondant. Le calcul donnera donc logiquement 3 valeurs propres nulles correspondant à des modes rigides de la structure. Les autres valeurs propres auront une valeur croissante et positive.

Au départ, j'utilisais la fonction eig mais cette dernière contient peu de possibilités de paramétrage. La fonction eigs me permet notamment d'éliminer les vecteurs propres à "hautes" valeurs propres et donc éliminer des modes de déformation peu intéressant puisqu'à énergie de déformation élevée (fixer K).

En fixant SIGMA à une valeur proche de zéro, j'obtiens les valeurs et vecteurs propres qui m'intéressent.

Les options OPTS me permettent de régler les paramètres de convergence (la tolérance, le nombre maximum d'itérations,...) car je soupçonne un problème de convergence...

Lorsque je lance le calcul des valeurs propres, il apparait un message de ce type dans la console :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Iteration 1: a few Ritz values of the 20-by-20 matrix:
     0
     0
     0
     0
     0
Cela voudrait donc dire qu'il a suffit au calcul d'une seule itération ?
Si je modifie OPTS.tol ou OPTS.maxint, cela ne chage rien au calcul...

J'ai fait le test de lancer un exemple de l'help de Matlab :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
A = delsq(numgrid('C',15));  
d1 = eigs(A,5,'sm');
Et voilà ce qu'il me donne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Iteration 1: a few Ritz values of the 20-by-20 matrix:
     0
     0
     0
     0
     0
 
Iteration 2: a few Ritz values of the 20-by-20 matrix:
    1.8117
    2.0889
    2.8827
    3.7374
    7.4954
 
Iteration 3: a few Ritz values of the 20-by-20 matrix:
    1.8117
    2.0889
    2.8827
    3.7374
    7.4954
Alors pourquoi plusieurs itérations pour l'exemple et une seule pour moi pour mon calcul ? A quoi correspond les valeurs de Ritz ? En gros, pouvez-vous m'expliquer le principe de la fonction EIGS ?

Et pour terminer (je sais que c'est peut être pas l'endroit pour poser cette question), pensez-vous que l'algorithme de Matlab est suffisant pour un calcul de valeurs propres dont certaines sont proches les unes des autres ?

Merci pour votre aide.

Michael.