background image

MK-7 

 

DRGANIA SWOBODNE LINIOWYCH UKŁADÓW DYSKRETNYCH 

 
 
Wyznaczyć drgania swobodne układu przedstawionego na rysunku 
 

 
 
 

 
 

 

 

•  Określić energię kinetyczną i potencjalną  

 

> with(LinearAlgebra):  with(plots):

 

> n:=5; x0:=0: 

> E:=1/2*add(m*(v||i)^2,i=1..n); 
> U:=1/2*add(k*(x||i-x||(i-1))^2,i=1..n); 
 

•  Wyznaczyć macierz bezwładności M i sztywności K 

 

j

i

ij

j

i

ij

x

x

U

k

v

v

E

m

=

=

2

2

,

 

 

> M:=Matrix(n):K:=Matrix(n): 
> for i to n do 
   for j to n do 

      M[i,j]:=diff(E,v||i,v||j):    
      K[i,j]:=diff(U,x||i,x||j):    

   end do: 
 end do: 

> M,K; 

 

•  Obliczyć wartości własne (w) i wektory własne (W) macierzy A = M

-1

K

 

(kolumny macierzy modalnej  W są wektorami własnymi macierzy A
 

> A:=M^(-1).K; 
> m:=1:k:=1: 

> w,W:=Eigenvectors(A);

 

 

•  Uszeregować rosnąco elementy wektora wartości własnych wykorzystując procedurę sortowanie 

(Procedura wykorzystuje zmienne globalne: w – wektor wartości własnych i W – macierz 
wektorów własnych, sortując równocześnie wektory własne) 

 

> sortowanie(): 
>
 w; 

> W
 
 
 
 

1

x

k

m

m

m

m

m

k

k

k

2

x

3

x

4

x

5

x

k

background image

•  Obliczyć wektor częstości własnych korzystając z zależności 

i

w

i

=

0

ω

 

 
>
 omega:=map(sqrt,w); 

 

•  Wyodrębnić wektory własne z macierzy modalnej 

 

> for i to n do u||i:=W[1..n,i]: ut||i:=Transpose(u||i): end do: 
 

•  Zadać wektor przemieszczeń początkowych odpowiadający kolejnym wektorom własnym 

 
>
 mode:=1; 
 

> x0:=u||mode:v0:=Vector(n): 

 

•  Zapisać rozwiązanie opisujące drgania własne układu na podstawie wzoru  
 

            

( )

( )

=





+

=

n

i

i

i

i

i

T

i

t

t

1

sin

cos

u

v

x

M

u

x

0

0

ω

ω

ω

 

 
> x:=eval(add(ut||i.M.(x0*cos(omega[i]*t)+v0/omega[i]*sin(omega[i]*t)) 
 *u||i,i=1..n)): 
 

•  Przedstawić przemieszczenia wszystkich mas na wspólnym wykresie 

 
> plot([seq(x[i],i=1..n)],t=0..4*Pi/omega[mode]); 

 

•  Dokonać animacji ruchu układu  

 

> animate(pointplot,[[seq([3/2*(i-1)+x[i],0],i=1..n)], 
 symbol=box,symbolsize=50],t=0..2*Pi/omega[mode],frames=100,color=red, 
 axes=none); 

 

•  Zadać warunek początkowy odpowiadający uderzeniu prawej skrajnej masy, sporządzić wykres i 

dokonać animacji ruchu 

 

> v0[n]:=-1:x0:=Vector(n):

 

 
Powtórzyć wszystkie obliczenia przyjmując: n = 8, 10