Sławomir Pieprzak
GRUPA 311C
Wyznaczenie częstości drgań własnych metodą
analityczną i przybliżoną metodą Ritz'a oraz porównanie wyników. Drgania podłużne pręta jednostronnie utwierdzonego z masą skupioną na swobodnym końcu.
1. Cel projektu:
( rys. 1 )
Analizowany układa to pręt pryzmatyczny o przekroju prostokątnym przedstawiony na rysunku nr 1. Pręt ten jest wykonany ze stali z jednej strony utwierdzony a z drugiej podwieszony na sprężynie. Do wyznaczenia częstości własnych przyjmuje następujące parametry:
Pręt:
a = 30 [mm] = 0,03 [m]
b = 20 [mm] = 0,02 [m]
l = 1000[mm] = 1 [m]
E = 2,1*105 [MPa]
ρ = 7850 [kg/m3]
Sprężyna:
k = 600 [N/m]
2. Rozwiązanie analityczne:
Obliczam objętość pręta:
Obliczam masę pręta:
Równanie drgań wzdłużnych pręta:
Metoda Fouriera pozwala na analityczne rozwiązanie tego równania. Przewidujemy że rozwiązaniem będzie postać:
Zatem:
Rozwiązanie dla oscylatora jest następujące:
Rozwiązanie postaci:
Do wyznaczenia stałych A,B,C,D wykorzystuje warunki brzegowe:
I:
II:
I.
II.
Aby istniało rozwiązanie nietrywialnie współczynnik C musi być różny od zera.
Wówczas:
Przyjmuje za
KOD ŹRÓDŁOWY Z PROGRAMU MAPLE:
> restart:
> rownanie:=tan(z)=-(2.1*10^5*0.03*0.02*z)/(600*1);
> fsolve(rownanie,z=0..0.5):
z[1]:=evalf(%,6);
> fsolve(rownanie,z=2..4):
z[2]:=evalf(%,6);
> fsolve(rownanie,z=5..6):
z[3]:=evalf(%,6);
> fsolve(rownanie,z=8..10):
z[4]:=evalf(%,6);
> fsolve(rownanie,z=10..12):
z[5]:=evalf(%,6);
> plot({-0.21*z,tan(z)},z=(0..(9*Pi)/2),-2..2,color=[green,red]);
Obliczam częstości:
Wzór ogólny na częstość:
3. Metoda Ritz`a (przybliżona)
Wychodzimy z zasady Hamiltona dla układów zachowawczych, która mówi, że ze wszystkich ruchów możliwych ruchem rzeczywistym jest taki ruch, dla którego funkcjonał:
osiąga wartość minimalną.
Zatem rozwiązanie jest postaci:
Gdzie:
Warunkiem istnienia ekstremum funkcjonału jest
Co sprowadza się do układu równań:
Aby układ równań posiadał niezerowe rozwiązania, wyznacznik główny musi być równy zero. Wyznaczenie częstości drgań własnych w sposób przybliżony metodą Ritz'a, sprowadza się zatem do rozwiązania równania:
Dla kolejnych przybliżeń funkcjami bazowymi.
Przyjmuję jako funkcje bazowe wielomiany:
Przybliżenie funkcją sin:
> restart:
> with(LinearAlgebra):
> y[1]:=x->sin(Pi*x/l):
> y[2]:=x->sin(Pi*x/l)+sin(2*Pi*x/l):
> y[3]:=x->sin(Pi*x/l)+sin(2*Pi*x/l)+sin(3*Pi*x/l):
> y[4]:=x->sin(Pi*x/l)+sin(2*Pi*x/l)+sin(3*Pi*x/l)+sin(4*Pi*x/l):
> for i from 1 to 4 do
E[1,i]:=int(rho*F*y[1](x)*y[i](x),x=0..l);
U[1,i]:=int(E*F*diff(y[1](x),x)*diff(y[i](x),x)+((k*(y[1](x))^2)/2),x=0..l) end do:
> for i from 1 to 4 do
E[2,i]:=int(rho*F*y[2](x)*y[i](x),x=0..l);
U[2,i]:=int(E*F*diff(y[2](x),x)*diff(y[i](x),x)+((k*(y[2](x))^2)/2),x=0..l) end do:
> for i from 1 to 4 do
E[3,i]:=int(rho*F*y[3](x)*y[i](x),x=0..l);
U[3,i]:=int(E*F*diff(y[3](x),x)*diff(y[i](x),x)+((k*(y[3](x))^2)/2),x=0..l) end do:
> for i from 1 to 4 do
E[4,i]:=int(rho*F*y[4](x)*y[i](x),x=0..l);
U[4,i]:=int(E*F*diff(y[4](x),x)*diff(y[i](x),x)+((k*(y[4](x))^2)/2),x=0..l) end do:
> A:=Matrix([
[omega^2*E[1,1]-U[1,1],omega^2*E[1,2]-U[1,2],omega^2*E[1,3]-U[1,3],omega^2*E[1,4]-U[1,4]],
[omega^2*E[2,1]-U[2,1],omega^2*E[2,2]-U[2,2],omega^2*E[2,3]-U[2,3],omega^2*E[2,4]-U[2,4]],
[omega^2*E[3,1]-U[3,1],omega^2*E[3,2]-U[3,2],omega^2*E[3,3]-U[3,3],omega^2*E[3,4]-U[3,4]],
[omega^2*E[4,1]-U[4,1],omega^2*E[4,2]-U[4,2],omega^2*E[4,3]-U[4,3],omega^2*E[4,4]-U[4,4]] ]):
> row:=Determinant(A)=0:
> E:=2.2*10^11; rho:=7850; F:=6*10^(-4); l:=1; k:=1000;
> row;
> sols:=solve(row,omega);
> for k from 1 to 8 do if sols[k]>0 then print(omega[k/2]=evalf(sols[k])) end if
end do;
;
;
;
;
FUNKCJA WIELOMIANOWA:
> restart:
> with(LinearAlgebra):
> y[1]:=x->x:
> y[2]:=x->x+x^2:
> y[3]:=x->x+x^2+x^3:
> y[4]:=x->x+x^2+x^3+x^4:
> for i from 1 to 4 do
E[1,i]:=int(rho*F*y[1](x)*y[i](x),x=0..l);
U[1,i]:=int(E*F*diff(y[1](x),x)*diff(y[i](x),x)+((k*(y[1](x))^2)/2),x=0..l) end do:
>
> for i from 1 to 4 do
E[2,i]:=int(rho*F*y[2](x)*y[i](x),x=0..l);
U[2,i]:=int(E*F*diff(y[2](x),x)*diff(y[i](x),x)+((k*(y[2](x))^2)/2),x=0..l) end do:
> for i from 1 to 4 do
E[3,i]:=int(rho*F*y[3](x)*y[i](x),x=0..l);
U[3,i]:=int(E*F*diff(y[3](x),x)*diff(y[i](x),x)+((k*(y[3](x))^2)/2),x=0..l) end do:
> for i from 1 to 4 do
E[4,i]:=int(rho*F*y[4](x)*y[i](x),x=0..l);
U[4,i]:=int(E*F*diff(y[4](x),x)*diff(y[i](x),x)+((k*(y[4](x))^2)/2),x=0..l) end do:
> A:=Matrix([
[omega^2*E[1,1]-U[1,1],omega^2*E[1,2]-U[1,2],omega^2*E[1,3]-U[1,3],omega^2*E[1,4]-U[1,4]],
[omega^2*E[2,1]-U[2,1],omega^2*E[2,2]-U[2,2],omega^2*E[2,3]-U[2,3],omega^2*E[2,4]-U[2,4]],
[omega^2*E[3,1]-U[3,1],omega^2*E[3,2]-U[3,2],omega^2*E[3,3]-U[3,3],omega^2*E[3,4]-U[3,4]],
[omega^2*E[4,1]-U[4,1],omega^2*E[4,2]-U[4,2],omega^2*E[4,3]-U[4,3],omega^2*E[4,4]-U[4,4]]]):
> row:=Determinant(A)=0:
> E:=2.2*10^11; rho:=7850; F:=6*10^(-4); l:=1; k:=1000;
;
;
;
> row;
> sols:=solve(row,omega);
> for k from 1 to 8 do if sols[k]>0 then print(omega[k/2]=evalf(sols[k])) end if
end do;
;
;
;
METODA ANALITYCZNA:
Przybliżenie za pomocą funkcji sinusów:
;
;
;
;
Przybliżenie za pomocą wielomianów:
;
;
;
Jak widać przybliżenie funkcją sinusów daje wyniki bardziej zbliżone do wyników otrzymanych w metodzie analitycznej niż przybliżenie funkcją wielomianu. W miarę zwiększenia stopnia przybliżenia uzyskałem dokładniejsze przybliżenia.