DRGANIA SWOBODNE LINIOWYCH UKŁADÓW DYSKRETNYCH
Wyznaczyć drgania swobodne układu przedstawionego na rysunku x
x
x
x
x
1
2
3
4
5
k
k
k
k
k
m
m
m
m
m
• 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
∂2 E
∂ U
2
m =
,
k =
ij
ij
v
∂ v
∂
x
∂ x
∂
i
j
i
j
> 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-1K
(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;
• Obliczyć wektor częstości własnych korzystając z zależności ω = w 0
i
i
> omega:=map(sqrt,w);
• Wyodrębnić wektory własne z macierzy modalnej W
> 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
v
x = ∑ T
u M x cos ω t
0 sin ω t
u
i
0
( i )+
( i )
i
ω
i=1
i
> 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