Author Topic: [Software] Creiamo un programma per fare l'analisi modale  (Read 16520 times)

0 Members and 1 Guest are viewing this topic.

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
[Software] Creiamo un programma per fare l'analisi modale
« on: 19 May , 2009, 22:30:44 PM »
 
   
            Analisi modale express          



 
L' analisi modale in virtù delle nuove disposizione normative (vedi ord. 3274) è diventata un' analisi di routine per il calcolo delle nostre strutture. Forse non tutti sanno quanto possa essere semplice sviluppare in casa propria e con mezzi del tutto artigianali un programma in grado di effettuare tale analisi. Il presente articolo si propone di sviluppare seduta stante un piccolo programmino in grado di effettuare l'analisi modale. I listati qui proposti potranno essere implementati all'interno di software più complessi previa opportuna ed eventuale modifica. L'esposizione mira solo a determinare modi e frequenze naturali di un sistema strutturale, mi propongo, in seguito, di pubblicare un altro articolo che mostri come utilizzare i modi di vibrare qui determinati per effettuale una analisi spettrale completa.
L' analisi modale consiste nel determinare le frequenze e modi propri di vibrare di un sistema a più gradi di libertà. Sianoerispettivamente le matrici di rigidezza e di massa della struttura da analizzare. Se si indica con  rispettivamente frequenze e modi propri di vibrare, si può scrivere la relazione che ci fornisce la dinamica delle strutture che lega le grandezze appena citate:
Chiaramente  esono termini noti in quanto ricavati a priori dalle caratteristiche del sistema strutturale, sono incognite. La precedente espressione può essere riscritta nel seguente modo:
questo rappresenta un problema agli autovalori e autovettori generalizzato e può essere ricondotto nella forma standard semplicemente premoltiplicando per la matrice inversa di
La forma standard del problema è: 
L'analisi modale, quindi, consiste nella risoluzione di un semplice problema di autovalori e autovettori. Attualmente esistono parecchi strumenti scaricabili dalla rete in grado di affrontare tale problema. Io vi propongo due semplici soluzioni, sceglierete voi quella che preferite.
1a soluzione
Posso appoggiarmi ad un software sviluppato per applicazioni matematiche. Lo svantaggio di questi software è che sono spesso molto costosi e dotati di interfacce utente poco flessibili. Il vantaggio è che sono estremamente semplici e intuitivi da usare. C'è da osservare che in un studio di ingegneria è raro trovare del software specialistico per la matematica, e, volendo dare un risvolto pratico a quello che sto scrivendo preferisco orientarmi verso del software non commerciale. Quanto segue è sviluppato per un programma che si chiama Octave (www.octave.org). Sono convinto che anche gli amanti di altri programmi commerciali o non apprezzeranno i listati sviluppati per Octave e non avranno problemi ad adattarli al software a loro più congeniale.
Octave è in grado di risolvere un problema di autovettori. la sintassi è:
[autovalori,autovettori]=eig(matrice_quadrata)
è una funzione che restituisce sia gli autovalori sia gli autovettori. Altre funzioni utili sono: inv() per calcolare l'inversa di una matrice e diag() che restituisce la diagonale principale si una matrice.
Se supponiamo di avere un sistema a 2 gradi di libertà del quale conosciamo matrice di rigidezza e di massa, con Octave possiamo fare l'analisi modale usando il seguente programma:
function modal
%Esempio di analisi modale pubblicato su
%http://www.strutturisti.it

k=6/7*[8,-3;-3,2];
m=[3,0;0,1];
A=inv(m)*k;
[autovett,autoval]=eig(A);
freq=diag(autoval^.5)
autovett
Questo deve essere salvato in un file chiamato modal.m e registrato nella directori di lavoro di Octave. Dal prompt dei comandi di Octave basta lanciare il comando modal per avere il seguente output:
freq =

  1.8740
  0.6987


autovett =

   0.5729 0.4304
  -0.8196 0.9026


octave:3>
Facile no?
Nell'esercizio si è supposto:
         
                  
      
         
                  
      
Si sono ottenuti i seguenti risultati:
         
                  
      
         
                  
      
2a soluzione Come facevo osservare la 1a soluzione è molto rigida e può essere usata solo dentro un grande contenitore che è il nostro software dedicato al calcolo matematico. I più hanno necessità di effettuare l'analisi modale magari in un contesto molto generale. L'idea è di sviluppare un programma che alla fine abbia il classico aspetto a finestre a cui proprio non vogliamo far a meno. Per chi ha queste esigenze il mio consiglio è di sviluppare il tutto in Python (www.python.org). Python è veloce, potente, multipiattaforma, orientato a oggetti e sopratutto facile da imparare. Di Python esistono versioni precompilate per i più comuni sistemi operativi. Nell'esempio che segue si danno esclusivamente le indicazioni per chi usa Windows.
Per cominciare occore installare l'interprete di Pyhon; per far ciò io ho eseguito il programma Python-2.3.2-1.exe scaricato dal sito ufficiale di Python, se nel frattempo è uscita una versione più aggiornata della 2.3.2 orientatevi per quella. Poi occorre installare una delle tante librerie di matematica disponibili per Python. Nel caso specifico io ho utilizzato numarray. Si installa eseguendo il programma numarray-0.8.win32-py2.3.exe o successivi, anch'esso scaricato dal sito ufficiale di python.
Vediamo adesso come si riscrive il programma visto per Octave in Python.
Aprite l'editor dedicato incluso nella vostra versione di Python, ma va bene anche un qualunque editor di testo (blocconote è più che sufficiente) e iniziate a programmare.
La prima cosa da fare è importare le librerie di numaray e le funzioni per i calcoli di algebra lineare (anch'esse presenti in numarray):
from numarray import *
import numarray.linear_algebra as la
La funzione principale del programma è quella nella quale si chiede di fare l'analisi modale:
def moana(k,m):
    A=dot(la.inverse(m),k)
    (avet,aaut)=la.eigenvectors(A)
    return [power(avet,0.5),aaut]
La prima riga (def moana(k,m):) definisce la funzione MOdal ANAlysis ... in breve moana
La seconda calcola il prodotto matriciale (dot) tra l'inversa di m (la.inverse(m)) e k
Quindi si risolve un problema di autovalori e autovettori (la.eigenvectors())
Infine si restituisce la radice quadrata (power(,0.5)) degli autovalori, ovvero le frequenze proprie, e gli autovettori.
Per far funzionare il tutto occorre un programma principale che richiami la funzione appena creata e poi stampi i risultati ottenuti. Complessivamente il listato è il seguente:
from numarray import *
import numarray.linear_algebra as la

def moana(k,m):
    A=dot(la.inverse(m),k)
    (avet,aaut)=la.eigenvectors(A)
    return [power(avet,0.5),aaut]

#*************** Programma Principale*****************
m=array([[3,0],[0,1]])          # matrice di massa
k= 6./7*array([[8,-3],[-3,2]])  # matrice di rigidezza

[freq,modi]=moana(k,m)
print "Frequenze"
print freq
print
print "Modi"
print modi
Salvate il vostro file con estensione *.py per esempio modal.py. Quando lo lancerete l'output sarà il seguente:
Frequenze
[ 1.87399517  0.69867167]

Modi
[[ 0.57294288 -0.8195953 ]
 [ 0.43040674  0.90263505]]
La sequenza dei modi questa volta è per righe e non per colonne, come era in Octave, ma il risultato è comunque corretto.   
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24