background image

 

 

 
 

MODELOWANIE I SYMULACJA 

 

Wyprowadzanie równań różniczkowych ruchu prostych układów mechanicznych

 

 
Zadanie 1. 

 

Wyprowadzić równanie różniczkowe opisujące ruch oscylatora harmonicznego wiedząc, że energia 
kinetyczna i potencjalna określone są wzorami  

 

2

2

1

1

,

2

2

E

mv

U

kx

 

gdzie m i k oznaczają odpowiednio masę oscylatora i współczynnik sprężystości.  
Rozwiązać otrzymane równanie dla dowolnych warunków początkowych. 

Zadanie 2. 

 

Wyprowadzić równanie różniczkowe opisujące ruch wahadła matematycznego wiedząc, że energia 
kinetyczna i potencjalna określone są wzorami  

 

2

2

1

,

cos( )

2

E

ml

U

mgl

 

 

gdzie m oznacza masę, l – długość wahadła, g – przyspieszenie ziemskie. 
Rozwiązać otrzymane równanie dla dowolnych warunków początkowych. 

Zadanie 3. 

 

Wyprowadzić równania różniczkowe opisujące ruch wahadła matematycznego zawieszonego na 
elastycznej lince wiedząc, że energia kinetyczna i potencjalna określone są wzorami 

 

2

2

2

2

2

1

2

1

2

x

y

E

m v

v

U

k

x

y

l

mgy

 

gdzie m oznacza masę, l – długość wahadła, g – przyspieszenie ziemskie, k – współczynnik 
sprężystości. 
 
 
 

background image

Zadanie 4. 

 

Wyprowadzić równania różniczkowe opisujące ruch wahadła matematycznego podwieszonego na 
oscylatorze wiedząc, że energia kinetyczna i potencjalna określone są wzorami 

 

2

2

2

2

1 1

2

1

1 2

2

2

2

1

2

2

1

1

2

cos(

)

2

2

1

cos(

)

2

E

m v

m v

v v l

x

l v

U

kx

m gl

x

 

gdzie m

1

 oznacza masę oscylatora, m

2

 – masę wahadła, l – długość wahadła, g – przyspieszenie 

ziemskie, k – współczynnik sprężystości sprężyny. 
 
Wyznaczyć rozwiązanie układu równania za pomocą komendy dsolve z opcją numeric 
przyjmując następujące dane: m

1

 = 1, m

2

 = 0.1, g = 9.81, l = 0.1, k = 100 i warunki początkowe: 

1

1

2

2

(0)

0.5 , (0)

0,

(0)

,

(0)

0.

3

x

l v

x

v

 

Dokonać animacji ruchu wahadła korzystając z komend 

> X:=t->'rhs(roz(t)[2])';Y:=t->'rhs(roz(t)[4])'; 
> a1:=animate(pointplot,[[X(t),0],symbol=box,symbolsize=30], 
  t=0..5,frames=200,color=blue,color=red): 
> a2:=animate(pointplot,[[X(t)+l*sin(Y(t)),-l*cos(Y(t))], 
  symbol=circle,symbolsize=30],t=0..5,frames=200,color=blue, 
  color=red): 
> a3:=animate(plot,[[[X(t),0], 
  [X(t)+l*sin(Y(t)),-l*cos(Y(t))]]],t=0..5,axes=none, 
  scaling=constrained,thickness=2,frames=200): 
> display(a1,a2,a3); 
 
 

background image

restart:

 

with(plots):

 

lagrange := proc (n, q, r, L) local i, uzm_q, uzm_r, rel_r_q, Lq, 

Lr, Lrt; global row; uzm_q := seq(q[i] = q[i](t), i = 1 .. n); uzm_r 
:= seq(r[i] = r[i](t), i = 1 .. n); for i to n do Lq[i] := subs([uzm_q, 
uzm_r], diff(L, q[i])); Lr[i] := subs([uzm_q, uzm_r], diff(L, r[i])) 
end do; for i to n do Lrt[i] := diff(Lr[i], t) end do; rel_r_q := 
seq(r[i](t) = diff(q[i](t), t), i = 1 .. n); for i to n do row[i] := 
subs(rel_r_q, Lrt[i]-Lq[i] = 0) end do; seq(row[i], i = 1 .. n) end 
proc:

 

>   

#Zad1

 

E := (1/2)*m*v[1]^2:

 

U := (1/2)*k*x^2:

 

L := E-U:

 

lagrange(1, x, v, L):

 

>   

#Zad2

 

restart:

 

E := (1/2)*m*l^2*omega[1]^2: 

 

U := -m*g*l*cos(phi[1]):

 

L := E-U:

 

lagrange(1, phi, omega, L):

 

>   

#Zad3

 

restart:

 

E := (1/2)*m*(v[1]^2+v[2]^2):

 

U := (1/2)*k*(sqrt(x[1]^2+x[2]^2)-l)^2+m*g*x[2]:

 

L := E-U:

 

lagrange(2, v, x, L):

 

>   

#Zad4

 

restart:

 

E := 

(1/2)*m[1]*v[1]^2+(1/2)*m[2]*(v[1]^2+2*v[1]*v[2]*l*cos(x[2])+l^2*
v[2]^2):

 

U := (1/2)*k*x[1]^2-m[2]*g*l*cos(x[2]):

 

m[1] := 1: m[2] := .1: g := 9.81: l := .1: k := 100:

 

wp := x[1](0) = .5*l, (D(x[1]))(0) = 0, x[2](0) = (1/3)*Pi, 

(D(x[2]))(0) = 0:

 

L := E-U:

 

lagrange(2, x, v, L):

 

dsolve({wp, row[1], row[2]}, {x[1](t), x[2](t)}, numeric):

 

background image

 

 

 
 

MODELOWANIE I SYMULACJA 

 

Modelowanie liniowego układu dyskretnego

 

 
 

Wyznaczyć rozwiązanie analityczne opisujące ruch liniowego układu dyskretnego przedstawionego 
na rysunku 

 

gdzie m oznacza masę poszczególnych ciał, k – sztywność każdej sprężyny, a x

i

 , i = 1, 2, ...,5 –  

przemieszczenia środków poszczególnych mas. 
 
Kolejność postępowania: 
 

1.  Wyznaczyć energię kinetyczną i potencjalną układu wykorzystując zależności: 

 

5

4

2

2

1

1

1

1

1

,

(

)

2

2

i

i

i

i

i

E

m

v

U

k

x

x

  

2.   Wyznaczyć macierz sztywności K i bezwładności korzystając ze wzorów: 

 

2

2

,

ij

ij

i

j

i

j

U

E

k

m

x x

v v

 

 

  

Uwaga: należy zadeklarować najpierw obie macierze, by następnie wyznaczyć ich elementy 
w podwójne pętli 

3.  Wyznaczyć macierz A związaną z macierzami K i wzorem 

1

A

M K

 

4.  Przyjąć dane liczbowe: m = 1, k = 100 i wyznaczyć wartości i wektory własne macierzy A 

korzystając z komendy Eigenvectors w postaci  

> alpha,V:=Eigenvectors(A):  

5.  Korzystając z procedury sortowanie posortować wartości własne zmieniając 

równocześnie w odpowiedni sposób pozycje kolumn w macierzy V, zawierającej wektory 
własne macierzy A 

> alpha,V:=sortowanie(alpha,V);  

6.  Dokonać normalizacji wektorów własnych względem macierzy bezwładności korzystając ze 

wzoru (u

i

 – kolumny macierzy V

 

,

1, 2,...,

i

i

T
i

i

i

n

u

w

u Mu

  

 

background image

7.  Wyznaczyć częstości drgań swobodnych korzystając z komendy map ze wzoru 

 

,

1, 2,...,

i

i

i

n

  

  

 

gdzie 

i

 oznaczają posegregowane wartości własne. 

8.  Zadać warunki początkowe w formie wektora przemieszczeń początkowych x

zawierającego zerowe elementy i wektora prędkości początkowych v0 zawierającego 
niezerową pierwszą współrzędną równą 10 

> x0:=Vector(5,[0,0,0,0,0]); v0:=Vector(5,[10,0,0,0,0]); 

9.  Wyznaczyć analityczne rozwiązanie opisujące ruch poszczególnych mas korzystając ze 

wzoru 

 

5

1

1

2

0

. .( 0

0 )

. .

0 cos (

)

sin (

)

T

T
i

i

i

i

i

i

t

t

t

 

 

v

x

w M x

v

w

w M x

w

  

10. Sporządzić wykres przemieszeń i prędkości poszczególnych mas korzystając z poniższych 

komend: 

> plot([seq(x[i],i=1..n)],t=0..3); 
> v:=map(diff,x,t): 
> plot([seq(v[i],i=1..n)],t=0..3); 

11. Dokonać animacji ruchu poszczególnych mas korzystając z poniższych komend: 

> seq_pkt:=seq([(j-1)*3+'x'[j],0],j=1..n); 
> animate(pointplot,[[seq_pkt],symbol=box,symbolsize=50], 
  t=0..3,frames=100,color=red,axes=none); 

12. Sporządzić wykres czasowy energii mechanicznej (E + U

> plot(E+U,t=0..5,0..100); 

13. Która ze sprężyn będzie najbardziej ściśnięta/rozciągnięta w trakcie pierwszych trzech 

sekund? 

 

background image

restart:

 

with(LinearAlgebra):

 

with(plots):

 

#sortowanie proc

 

>   

#Zad1

 

E:=1/2*m*add(v[i]^2,i=1..5):

 

U:=1/2*k*add((x[i+1]-x[i])^2,i=1..4):

 

>   

#Zad2

 

n:=5:

 

K:=Matrix(n):

 

M:=Matrix(n):

 

for i to n do 

 for j to n do 
  K[i,j]:=diff(U,x[i],x[j]); 
  M[i,j]:=diff(E,v[i],v[j]); 
 end do; 
end do;

 

K:

 

M:

 

>   

#Zad3

 

A:=1/M.K:

 

>   

#Zad4

 

m:=1: k:=100:

 

alpha,V:=evalf(Eigenvectors(A)):

 

>   

#Zad5

 

alpha,V:=sortowanie(alpha,V):

 

>   

#Zad6

 

for i from 1 to n do 

w[i]:=V[1..n,i]/(sqrt((V[1..n,i]^%T).M.V[1..n,i])): 
end do:

 

>   

#Zad7

 

for i from 1 to n do 

omega[i]:=sqrt(alpha[i]) 
end do:

 

>   

#Zad8

 

x0:=Vector(5,[0,0,0,0,0]):

 

v0:=Vector(5,[10,0,0,0,0]):

 

>   

#Zad9

 

x:=(Transpose(w[1]).M.(x0+v0*t))*w[1]+add((Transpose(w[1]).M.(x0*cos(om
ega[i]*t)+v0*sin(omega[i]*t)/omega[i]))*w[i], i=2..5):