Listings fr den Praxistest im Computeralgebra-System-Vergleich 

1.) Macsyma
1.)Definition der Systemmatrizen
Mmatrix:matrix([m[1],0],[0,m[2]]);
Dmatrix:matrix([0,0],[0,d[2]]);
Fmatrix:matrix([k[1],-k[1]],[-k[1],k[1]+k[2]]);
RDmatrix:matrix([0],[d[2]]);
RFmatrix:matrix([0],[k[2]]);
2.) Berechnung des Erregervektors
RDmatrix*diff(y[e](t),t)+RFmatrix*y[e](t);
h0:%,y[e](t)=e*cos(omega*t),diff;
h1:coeff(h0[2,1],cos(omega*t));
h2:coeff(h0[2,1],sin(omega*t));
h:1/2*matrix([0],[h1-%i*h2]);
3.)Berechnung der Frequenzgangmatrix
freqmatrix:(-omega^2*Mmatrix+%i*omega*Dmatrix+Fmatrix);
freqmatrix:%^^(-1),detout;
4.) Berechnung des Frequenzgangvektors
statantw:freqmatrix.h;
5.) Berechnung des Betrages der komplexen Vektorkomponenten
betstatantw:abs(statantw),ratsimp;
6.) Extraktion der zweiten Vektorkomponente und Normierung
aufbauampli:betstatantw[2,1]/e;
7.) Bestimmung der Tilgungsfrequenz
tilgfrequenz:solve(aufbauampli,omega);
8.) Bestimmung der Federhrte bei bekannter Tilgungsfrequenz
tilgfrequenz[2],omega=omega[t];
sub1:solve(%,k[1]);
9.) Berechnung der Halbwertsfrequenzen
halbwert:solve(aufbauampli^2=1/4,omega);
halbwerte:halbwert,sub1,m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=10,e=0.03,d[2]=2400,bfloat;
f(x):=block( if rhs(x)>0 then true);
sublist(halbwerte,f);
sort([rhs(%[1]),rhs(%[2]),rhs(%[3])]);
lsg:[%[1],%[2]];
10.) Graphische Darstellung der Aufbauamplitude
numaufbauampli:aufbauampli,sub1,m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=10,e=0.03,d[2]=2400,ratsimp;
plot(numaufbauampli,omega,lsg[1],lsg[2]);
11.)Berechnung der maximalen Aufbaufrequenzen
diff(aufbauampli,omega);
numdiffampli:%,sub1,m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=10,e=0.03,d[2]=2400,radcan;
num(numdiffampli)^2;
extrem:realroots(%);
f(x):=block( if rhs(x)>0 then true);
sublist(extrem,f);
extrem:[rhs(%[1]),rhs(%[2]),rhs(%[3])];
12.) Berechnung der maximalen Aufbauamplituden
fktnum:lambda[[omega],numaufbauampli];
map(fktnum,extrem);

2.) Maple
1.)Definition der Systemmatrizen
with(linalg):
Mmatrix:=matrix(2,2,[m[1],0,0,m[2]]);
Dmatrix:=matrix(2,2,[0,0,0,d[2]]);
Fmatrix:=matrix(2,2,[k[1],-k[1],-k[1],k[1]+k[2]]);
RDmatrix:=matrix(2,1,[0,d[2]]);
RFmatrix:=matrix(2,1,[0,k[2]]);
2.) Berechnung des Erregervektors
evalm(RDmatrix * diff(y[e](t),t)+RFmatrix*y[e](t));
subs(y[e](t)=e*cos(omega*t),");
h0:=map(eval,");
h1:=coeff(h0[2,1],cos(omega*t));
h2:=coeff(h0[2,1],sin(omega*t));
h:=(1/2*matrix(2,1,[0,h1-I*h2]));
3.)Berechnung der Frequenzgangmatrix
freqmatrix:=inverse(evalm(-omega^2*Mmatrix+I*omega*Dmatrix+Fmatrix));
4.) Berechnung des Frequenzgangvektors
statantw:=evalm(freqmatrix&*h);
5.) Berechnung des Betrages der komplexen Vektorkomponenten
betstatantw:=evalc(map(abs,statantw));
6.) Extraktion der zweiten Vektorkomponente und Normierung
aufbauampli:=betstatantw[2,1]/e;
7.) Bestimmung der Tilgungsfrequenz
solve(aufbauampli,omega);
tilgfrequenz:=map(allvalues,["]);
8.) Bestimmung der Federhrte bei bekannter Tilgungsfrequenz
omega[t]=tilgfrequenz[2];
sub1:=k[1]=solve(",k[1]);
9.) Berechnung der Halbwertsfrequenzen
solve(aufbauampli=1/2,omega);
halbwert:=map(allvalues,["]);
subs(sub1,halbwert);
halbwerte:=evalf(subs({m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=10,e=0.03,d[2]=2400},"));sort(select(x->x>0,"));
lsg:=["[1],"[2]];
10.) Graphische Darstellung der Aufbauamplitude
subs(sub1,aufbauampli);
numaufbauampli:=simplify(subs({m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=1
0,d[2]=2400,e=0.03},"));
plot(numaufbauampli,omega=lsg[1]..lsg[2],title=`Amplitudenkurve`);
11.)Berechnung der maximalen Aufbaufrequenzen
diff(aufbauampli,omega):
subs(sub1,");
numdiffampl:=simplify(subs({m[1]=150,m[2]=500,k[2]=1600*10^2,omega[t]=10,d[
2]=2400,e=3/100},"));
numer(numdiffampl);
solve(",omega);
map(allvalues,["]);
extrem:=sort(select(x->(x>0 and Im(x)=0) ,"));
12.) Berechnung der maximalen Aufbauamplituden
fktnum:=unapply(numaufbauampli,omega);
map(fktnum,extrem);
3.) Mathematica
1.)Definition der Systemmatrizen
Mmatrix={{m1,0},{0,m2}}
%//MatrixForm
Dmatrix={{0,0},{0,d2}}
%//MatrixForm
Fmatrix={{k1,-k1},{-k1,k1+k2}}
%//MatrixForm
RDmatrix={0,d2}
%//MatrixForm
RFmatrix={0,k2}
%//MatrixForm
2.) Berechnung des Erregervektors
RDmatrix*D[y[e][t],t]+RFmatrix*y[e][t]//HoldForm
%/.y[e][t]->e*Cos[Omega*t]
h0=%//ReleaseHold
h1=Coefficient[h0[[2]],Cos[Omega*t]]
h2=Coefficient[h0[[2]],Sin[Omega*t]]
h=1/2*{0,h1-I*h2}
3.)Berechnung der Frequenzgangmatrix
freqmatrix=Inverse[-Omega^2*Mmatrix+I*Omega*Dmatrix+Fmatrix]
4.) Berechnung des Frequenzgangvektors
statantw=freqmatrix.h
5.) Berechnung des Betrages der komplexen Vektorkomponenten
betstatantw=statantw//Abs//ComplexExpand//Simplify
6.) Extraktion der zweiten Vektorkomponente und Normierung
aufbauampli=betstatantw[[2]]/e
7.) Bestimmung der Tilgungsfrequenz
tilgfrequenz=Solve[aufbauampli==0,Omega]
8.) Bestimmung der Federhrte bei bekannter Tilgungsfrequenz
omegat==Omega/.tilgfrequenz[[5]]
sub1=Solve[%,k1]
9.) Berechnung der Halbwertsfrequenzen
halbwert=Solve[aufbauampli^2==1/4,Omega]
halbwerte=halbwert/.sub1/.{m1->150,m2->500,k2->1600*10^2,omegat->10,e->0.03,d2->2400}//N
Omega/.halbwerte
Sort[Select[%[[1]],(#>0.0)&]]
Lsg=Take[%,2]
10.) Graphische Darstellung der Aufbauamplitude
numaufbauampli=aufbauampli/.sub1/.{m1->150,m2->500,k2->1600*10^2,omegat->10,e->0.3,d2->2400}//N//Simplify
Plot[numaufbauampli,{Omega,Lsg[[1]],Lsg[[2]]}, PlotLabel->"Amplitudenkurve"]
11.)Berechnung der maximalen Aufbaufrequenzen
D[aufbauampli,Omega]
numdiffampli=%/.sub1/.{m1->150,m2->500,k2->1600*10^2,omegat->10,e->0.03,d2->2400}//N//Simplify
%//Factor//Numerator
NSolve[%==0,Omega]
Omega/.%
extrem=Sort[Select[%,(#>(0.0)&& Im[#]==0)&]]
12.) Berechnung der maximalen Aufbauamplituden
numaufbauampli/.Omega->extrem

