gtuinsaat / YDC2019

Yapı Dinamiği Çalıştayı 2019 - İZMİR YÜKSEK TEKNOLOJİ ENSTİTÜSÜ
3 stars 3 forks source link

Özdeğer ve özvektörlerin belirlenmesi #2

Open ahmetanildindar opened 5 years ago

ahmetanildindar commented 5 years ago

Merhabalar, Örnek olması için bir kodu sizinle paylaşıyorum.


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 14 16:53:13 2019

@author: ahmetanildindar
"""

#%% GEREKLİ MODÜLLERİN EKLENMESİ =============================================================================
import numpy as np
import matplotlib.pyplot as plt
# =============================================================================

#%% KÜTLE VE RİJİTLİK MATRİSİNİN OLUŞTURULMASI =============================================================================
# serbestlik derecesi atanması
dof = 2
# kütle ve rijitlik tanımlaması
m , k = 1 , 1
# kütle matrisi
M = m * np.diag( [1,1] )
# rijitlik matrisi
K = np.array([[2*k , -k ],
              [-k , k ]])

#%% ÖZDEĞER VE ÖZVEKTÖRLERİN OLUŞTURULMASI=============================================================================
# 
As = np.dot( np.linalg.inv(M) , K)
# Öz değerleri ve özvektörler
D,V = np.linalg.eig(As)

# Sıralayalım
idx = D.argsort()# [::-1]   
D = D[idx]
V = V[:,idx]
# Açısal frekansların hesabı
w = [np.sqrt(item) for item in D]
# Titreşim periyotlarının hesabı
T = [2*np.pi/item for item in w]
# Özvektörleri en üst kata göre normalize edelim
V_norm = np.zeros( V.shape )

for  kolon_no , norm_deger in enumerate(V[dof-1 , :])  :
    V_norm[: , kolon_no] = V[:,kolon_no] / norm_deger

#%% GÖRSELLEŞTİRME =============================================================================
# Görselleştirme için Özvektörlere sıfır satırının eklenmesi
V_norm_fig = np.vstack([ np.zeros(dof) , V_norm ])

fig, axs = plt.subplots(1, dof , sharey=True , figsize=(10,4))
fig.subplots_adjust(hspace=0)
fig.suptitle("Mod Şekilleri", fontsize=18)

for i in range(dof):
    axs[i].plot( np.zeros(dof+1) , np.arange(dof+1) ,"grey" , marker="o")
    axs[i].plot( V_norm_fig[:,i], np.arange(dof+1) , "r",marker = "o",
       MS=10)
    axs[i].set_title(f"w = {round(w[i],3)}Hz & T = {round(T[i],3)}sn")
    axs[i].set_ylim(0)