# Kapitel 7_f:
# Freie ungedmpfte Schwingungen fr Systeme mit endlich vielen Freiheitsgraden
#  2015  Friedrich U. Mathiak, 
# mathiak@mechanik-info.de
# 
> restart: with(LinearAlgebra):
# Beispiel 7-5:
# Es wird eine Maple-Prozedur zur Berechnung des Bewegungssverhaltens eines freien ungedmpften Systems mit allgemein  n Freiheitsgraden zur Verfgung gestellt.   
> Proc_Calc_28:=proc(K::Matrix, M::Matrix, q0::Vector, v0::Vector)
> #-------------------------------------------------------------
# #  Eingabe:
# #            M: Massenmatrix       (symmetrisch)
# #            K: Steifigkeitsmatrix (symmetrisch)
# #           q0: Anfangsauslenkungen
# #           v0: Anfangsgeschwindigkeiten
> 
> #  Ausgabe:
> #            x: Auslenkungen
> #            v: Geschwindigkeiten
> #--------------------------------------------------------------
> local m,n,Lambda,Phi,i,ei,eiT,j,Omega,a1,a2,a3,A,cai,sai;
> global alpha,x,v,f; 
> description "Freie ungedmpfte Schwingungen eines Systems mit n Freiheitsgraden";
> if abs(LinearAlgebra[Determinant](K)) < 10.^(-Digits+2) then
>   print(`Matrix K ist singulr, Abbruch der Berechnung`);
>   return;
> end if;
> m,n := LinearAlgebra[Dimension](K);
> if m-n <> 0 then 
>   print(`Matrix K ist nicht quadratisch, , Abbruch der Berechnung`);
>   return;
> end if;
> A:=Vector(n);alpha:=Vector(n); x:=Vector(n); v:=Vector(n);
> #Berechnung der Eigenwerte und Eigenvektoren eines allgemeinen Eigenwertproblems
> (Lambda,Phi):=LinearAlgebra[Eigenvectors](K,M);
> Lambda:=Re(Lambda);Phi:=Re(Phi);
> #Eigenkreisfrequenzen
> Omega:=map(sqrt,Lambda);
> f    :=evalf(Omega/(2*Pi));
> #Normierung der Eigenvektoren auf die Lnge 1
> for i to n do 
>   ei :=LinearAlgebra[Normalize](Column(Phi,[i]), Euclidean);
>   eiT:=LinearAlgebra[Transpose](ei);
>     for j to n do
>       Phi[j,i]:= ei[j];
>     end do;
>   #Berechnung der Amplituden
>   a1:=eiT.M.q0; a2:=eiT.M.v0; a3:=eiT.M.ei;
>   A[i]:=sqrt(a1^2+a2^2/Lambda[i])/a3;
>   #Berechnung der Phasenverschiebungswinkel
>   cai:=a1/a3/A[i]; sai:=a2/a3/A[i]/Omega[i];
>   alpha[i]:=arctan(sai,cai);
>   #Berechnung der Verschiebungen und der Geschwindigkeiten
>   x:=x + A[i]*ei*cos(Omega[i]*t-alpha[i]);
>   v:=v - A[i]*Omega[i]*ei*sin(Omega[i]*t-alpha[i]);
> end do;
> print(`Eigenwerte des allgemeinen Eigenwertproblems`, Lambda);
> print(`Eigenkreisfrequenzen omega =`, Omega);
> print(`Frequenzen f = `, f);
> print(`Eigenvektoren Phi =`, Phi);
> print(`Amplituden A = `, A);
> print(`Phasenverschiebungswinkel alpha = `, alpha);
> print(`Verschiebungen x(t) = `, x);
> print(`Geschwindigkeiten v(t) = `, v);
> end proc:
# Es sind laut Aufgabenstellung folgende System- und Anfangswerte gegeben.
> m0:=10^4;m1:=4*m0;m2:=m0;
> M:=Matrix(2,2,[m1,0,0,m2]);
> k0:=10.^7; k11:=1.5*k0; k12:=-1.*k0;k21:=k12;k22:=1.*k0;
> K:=Matrix(2,2,[k11,k12,k21,k22]);
> x0:=Vector(2,[0.02,0.01]); xp0:=Vector(2,[0,0]);
> Proc_Calc_28(K,M,x0,xp0);
# Grafische Ausgabe der Ergebnisse
> para:=axes=boxed,gridlines, titlefont = ["ARIAL", 15], labeldirections = ["horizontal", "vertical"], labelfont = ["HELVETICA", 10],axesfont=["HELVETICA", "ROMAN", 8], legendstyle = [font = ["HELVETICA", 9], location = bottom]:
> pl1:=plot([x[1],x[2]],t=0..1,para,title = "\nAuslenkungen\n", legend = ["x1(t)", "x2(t)"], labels = ["Zeit t [s]", "Verschiebungen [m]"],color=[black,blue]):
> pl2:=plot([v[1],v[2]],t=0..1,para,title = "\nGeschwindigkeiten\n", legend = ["v1(t)", "v2(t)"], labels = ["Zeit t [s]", "Geschwindigkeiten [m/s]"],color=[black,blue]):
# Darstellung der Schwingungen im Phasenraum
> pl3:=plot([x[1],x[2],t=0..5],para,title = "\nPfad in der (x1,x2)-Ebene\n", labels = ["x1 [m]"  , "x2 [m]"]):
> pl4:=plot([v[1],v[2],t=0..5],para,title = "\nPfad in der (v1,v2)-Ebene\n", labels = ["v1 [m/s]", "v2 [m/s]"]):
> plots[display](Matrix(1,4,[pl1,pl2,pl3,pl4]));
> 
;
