/ / Assembler une grande matrice de rigidité à partir de plusieurs petites - matlab, matrix

Assembler une grande matrice de rigidité à partir de plusieurs petites - matlab, matrice

C’est un problème trivial, mais je ne fais que commencer avec matlab et je ne m’étais pas encore habitué à leur façon de penser (et à leur syntaxe).

Ce que je demande sera évident pour quiconque a déjà fait quelque chose avec FEM ou similaire.

Comment mettez-vous ensemble une grande matrice de rigiditéde plusieurs petits. Disons que vous avez pour (élément 1) une matrice de rigidité locale 4x4, identique pour (élément 2) - seule matrice différente, bien sûr, mais toujours 4x4.

Quelle est la manière la plus simple de faire ça:

[|--------| 0  0 ]
[|        | 0  0 ]
[|     |--|-----|]
[|-----|--|     |]
[0  0  |        |]
[0  0  |--------|]

(a33+b11, a34+b12,
(a43+b12, a44+b22, ...)

c'est-à-dire en faire un "gros"?

Réponses:

5 pour la réponse № 1

Je pense que votre question est la suivante:

A = 4x4 B = 4x4

C = matrice finale où A et B se chevauchent et doivent être additionnés en chevauchement.

Faire ceci:

C = zeros(6);
C(1:4,1:4) = A;
C(3:6,3:6) = C(3:6,3:6) + B;

6 pour la réponse № 2

Les matrices de rigidité VEULENT être rares. Désespérément. Le fait est que ces grandes matrices de rigidité vont se retrouver avec un grand nombre d'éléments nuls. Il faut donc construire la matrice en gardant cela à l’esprit. La bonne chose est que les matrices clairsemées sont très bien supportées dans matlab. Mais vous devez travailler correctement avec eux.

L’idée est de construire votre matrice sous forme de liste deles index de ligne et de colonne, plus la valeur à insérer dans la matrice. Construisez cette liste à l'avance. À la toute fin, vous appelez «maigre» pour construire réellement la matrice elle-même. Sparse résumera automatiquement les éléments en cas de chevauchement.

Une fois cette matrice creuse construite, toutes les opérations,Les multiplications de matrice et les barres obliques inverses sont entièrement prises en charge et peuvent être très rapides par rapport aux mêmes opérations sur une matrice complète. Ceci est particulièrement important lorsque votre matrice de rigidité globale peut être 1e5x1e5 ou supérieure.

Dans certains cas, pour les énormes matrices, vous devrez peut-être migrer vers un résolveur itératif lorsque la factorisation de votre matrice devient impossible.


5 pour la réponse № 3

Juste pour le plaisir, voici une solution à une ligne utilisant BLKDIAG:

C = blkdiag(A,zeros(2)) + blkdiag(zeros(2),B);