Gelöste Aufgaben/FEC1/FEC1 - Teil II: Das Modell erstellen
Mathematisches Modell formulieren
Die Bewegungsgleichungen leiten wir mit dem Prinzip der virtuellen Verrückungen her, die Gleichgewichtsbedingung lautet also
- .
Die Anteile ergeben sich jeweils aus der Summe der Teilsysteme
mit
- .
Auf keines der Teilsysteme wirkt eine äußere, eingeprägte Last (keine Kraft, kein Moment) - es treten also nur die Anteile der d'Alembert'schen Kräfte und der Formänderungsenergie auf.
Impeller- und Turbinen-Rad sowie die Unwuchten erfassen wir als Starrkörper - ihre virtuelle Formänderungsenergie ist Null:
- .
Für die beiden Lager berücksichtigen wir keine Massen, hier ist also
- .
Die verbleibenden virtuellen Arbeiten des Systems schreiben wir an, sortieren nach den Koordinaten und deren Variation und formen daraus das System von Bewegungsgleichungen.
Diskretisierung der Welle
Die Welle ist ein elastisches Kontinuum. Wir können sie als Stab (als eindimensionales Kontinuum) modellieren. Dabei passen
- ein Euler-Bernoulli-Balken oder
- ein Timoshenko-Balken.
Der Einfachheit halber wählen wir den klassischen Euler-Bernoulli-Balken. Die Ansatzfunktionen und Element-Steifigkeits-Matrizen nehmen wir aus der FEM-Formulierung für den Euler-Bernoulli-Balken.
Für die Komplexität des Modells ist die Anzahl der Finiten Elemente entscheidend. Jeder Knoten eines Finite Elements für diesen 3D-Euler-Bernoulli-Ballken hat die vier Koordinaten
- .
Die Anzahl der Koordinaten K ist also mit N als Anzahl der Elemente
Uns geht es hier primär um die Anschaulichkeit - wir approximieren die Bewegung der Welle mit einem Finiten Element.
Damit sind die Koordinaten der Welle - und damit des Gesamt-Systems
Hier steht der Index 0 für Punkt A und Index 1 für Punkt B.
/*******************************************************/
/******************* PART I **************************/
/*******************************************************/
/* define trial functions */
trial: w(x,t) = sum(a[i]*xi^i,i,0,3);
nodal : [W[0](t) = subst([xi=0],subst(trial,w(x,t))),
Φ[0](t) = subst([xi=0],diff(subst(trial,w(x,t)),xi)/ℓ),
W[1](t) = subst([xi=1],subst(trial,w(x,t))),
Φ[1](t) = subst([xi=1],diff(subst(trial,w(x,t)),xi)/ℓ)];
trial: ratsimp(subst(solve(nodal,makelist(a[i],i,0,3))[1],trial));
/* translate to y-direction */
trial: [trial, subst([w(x,t)=v(x,t),W[0](t)=V[0](t),W[1](t)=V[1](t), Φ[0](t)=Ψ[0](t), Φ[1](t)=Ψ[1](t)],trial)];
/* shaft nodal coordinates */
Q: [[ V[0](t), Ψ[0](t), W[0](t), Φ[0](t), V[1](t), Ψ[1](t), W[1](t), Φ[1](t), V[i](t), Ψ[i](t), W[i](t), Φ[i](t)],
[δV[0] , δΨ[0] , δW[0] , δΦ[0] , δV[1] , δΨ[1] , δW[1] , δΦ[1] , δV[i] , δΨ[i] , δW[i] , δΦ[i] ]];
/* variation of coordinates */
varia: makelist(Q[1][i]=Q[2][i],i,1,8);
/* null-reference for linearization */
nuller : makelist(Q[1][i]=0,i,1,12);
Virtuelle Arbeit von D'Alembert'schen Trägheitkräften
Allgemein ist die Virtuelle Arbeit von D'Alembert'schen Trägheitkräften definiert als
- .
Wir brauchen also nur einen Ortsvektor zu den materiellen Punkten der Körper als Funktion der Koordinaten der Bewegung - den wir dann in die Beziehung oben einsetzen und über das Volumen des Körpers integrieren.
Virtuelle Arbeit von D'Alembert'schen Trägheitkräften der Welle
Wir beschreiben den Ort "x1" der neutralen Faser der Welle durch die funktionalen Koordinaten v(x1,t) und w(x1,t) im rotierenden Koordinatensystem. In diesem ist
mit den Einheits-Vektoren des rotierenden Koordinatensystems
- .
In Kurzform schrieben wir den Ortsvektor als
- .
mit
- und .
Um vom
zu transformieren, arbeiten wir mit der Eulerschen Drehmatrix in der Form
Die Beschleunigung eines Schwerpunkts des Querschnitts "x" erhalten wir dann durch die zweite Ableitung des Ortsvektors nach der Zeit. Das ist nicht ganz trivial, weil wir nun die Ableitung der Einheitsvektoren im rotierenden Koordinatensystem berücksichtigen müssen. Wir starten deshalb mit der ersten Zeitableitung, der Geschwindigkeit. Hier ist - mit der Produktregel -
mit
- .
Ausführlich geschrieben steht dort
- .
Einsetzten liefert für die Einheitsvektoren im gedrehten "1"-System (s.o.)
Und damit ist z.B.
- und
- .
Die zweite Ableitung nach der Zeit liefert analog
Die Variation des Ortsvektors erhalten wir, indem wir im Ausdruck für
- die Terme zu Null setzen, die wir nicht variieren dürfen und
- die Koordinaten v(x,t), w(x,t) durch ihre Variation δv(x), δw(x) ersetzen, also
.
Einsetzten in die Formel für die Virtuelle Arbeit von D'Alembert'schen Trägheitkräften liefert zunächst
Wir setzen nun die Trial-Functions für kubische Ansatz-Polynome für v(x,t), w(x,t) ein, führen die Integration über die Länge ℓ der Welle und den Querschnitt A aus - wobei wir die Trägheitsmomente aus dem Kippen der Querschnitte vernachlässigen - und erhalten
mit
- ,
- ,
- ,
und der Wellen-Masse
- .
Im rotierenden Koordinatensystem kommen wir zusätzlich zur gewohnten Massenmatrix MS nun also die Gyroskopie-Matrix GS und die Zentrifugal-Matrix KS.
Hier steht bereits die Grundform der System-Matrizen von oben - es fehlen nur noch die Anteile der starren Teilsysteme Impeller,Turbine und Unwucht.
/*******************************************************/
/******************* PART II **************************/
/*******************************************************/
/* virtuel work of d'Alembert forces */
/*******************************************************/
/***********************************/
/* matrices from d'Alembert forces
of shaft*/
r : expand(subst(trial,matrix([0,v(x,t),w(x,t)]).D[1](Omega*t)));
δr : sum(subst(nuller,diff(r,Q[1][i]))*Q[2][i],i,1,8);
δW[S] :-expand(ℓ*integrate(expand(rho*A* diff(r,t,2). δr ),xi,0,1))$
δW[S] : subst(solve(params[1][3],A),δW[S])$
MS : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[S],Q[2][j]),diff(Q[1][k],t,2)),j,1,8),k,1,8)))$
GS : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[S],Q[2][j]),diff(Q[1][k],t,1)),j,1,8),k,1,8)))$
KS : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[S],Q[2][j]),diff(Q[1][k],t,0)),j,1,8),k,1,8)))$
Virtuelle Arbeit von D'Alembert'schen Kräften von Impeller- und Turbinen-Rad
Impeller-und Turbinen-Rad modellieren wir als Starrkörper.
Eine Verschiebung in Wellen-Längsachse betrachten wir nicht, der Drehwinkel Ω t ist fest gegeben - es bleiben also für jeden Knoten i = A, D noch die Freiheitsgrade
Die Virtuelle Arbeit von d'Alembert'schen Trägheitskräften des Impeller- oder Turbinen-Rades "i" erhalten wir nun wieder aus dem Integral der Beiträge über alle seine materiellen Punkte. Um zu einem beliebigen Punkt auf dem Rad - hier dem Impeller - zu kommen, brauchen wir zuerst den Ortsvektor zu Punkt A:
Von Punkt A zu Punkt P kommen wir im Impeller-festen Koordinatensystem
- mit .
Die Integration über den zylindrischen Impeller schaffen wir einfacher in Polarkoordinaten
Für die Ebene x2=0 ist das
- .
Die beiden Kippungen um die y1- und z1-Achse sind klein, es gilt
- .
Wir linearisieren deshalb bezüglich dieser Winkel.
Für x2=0 ist dieser Punkt P noch in der y-z-Ebene von Punkt A. Wir müssten nun die Integration über den komplexen Impeller mit seinen Schaufeln ausführen - mit analytischen Ansätzen hoffnungslos! Wir stellen uns vor, der Impeller sei eine Scheibe mit konstante Dicke "w". Und statt die Integration explizit in x2-Richtung auszuführen, multiplizieren wir einfach (vereinfachend) mit der Dicke der imaginären Scheibe w.
Wir führen also die Integration über
für
aus und erhalten - hier für den Impeller -
mit
- ,
- ,
- .
Die Matrizen des Teilsystems Turbine sind die gleichen - nur mit dem Intex T statt I!
Wir bauen die Matrizen der Teilsysteme wie im Bild links in das Gesamtsystem ein.
Jetzt fehlt noch die Unwucht.
/* displacement of mass point P
on either Impeller- or Turbine-Wheel*/
r : expand(matrix([0,V[i](t),W[i](t)]).D[1](Omega*t)
+matrix([0, y , 0 ]).D[1](zeta).DL[2](-Φ[i](t)).DL[3](Ψ[i](t)).D[1](Omega*t))$
/* linearize*/
r : subst(nuller,r) + sum(subst(nuller,diff(r,Q[1][j]))*Q[1][j],j,9,12)$
/* Variation of ...*/
δr : sum(subst(nuller,diff(r,Q[1][j]))*Q[2][j],j,9,12)$
δW[W] :-expand(integrate(integrate(expand(w*y*rho* diff(r,t,2). δr ), zeta,0,2*%pi),y,0,R))$
δW[W] : subst( append(solve(subst(params[1][2],params[1][1]),R^4), solve(params[1][2],R^2)),δW[W]);
/***********************************/
/* matrices from d'Alembert forces
of rigid wheels*/
MW : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[W],Q[2][j]),diff(Q[1][k],t,2)),j,9,12),k,9,12)))$
GW : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[W],Q[2][j]),diff(Q[1][k],t,1)),j,9,12),k,9,12)))$
KW : trigsimp(funmake('matrix,makelist(makelist(coeff(coeff(-δW[W],Q[2][j]),diff(Q[1][k],t,0)),j,9,12),k,9,12)))$
Virtuelle Arbeit von D'Alembert'schen Kräften der Unwucht
Eine Unwucht hat die Gesamtmasse mU. Wir setzen mU ≪ mi' und mU ≪ mT' an, dann brauchen wir unten die Anteile der Unwucht in den System-Matrizen M, G und K nicht berücksichtigen. Was bleibt dann?.
Der Ortsvektor zur "vorderen" (positive x-Koordinate) der Hantelmassen ist
Die Virtuelle Arbeit von D'Alembert'schen Trägheitskräften für diese Hälfte der Hantel-Masse erhalten wir aus
Den Term für die zweite Masse der Hantel (Index "U,2") erhalten wir, wenn wir die Länge "a" durch "-a" ersetzen. Dann ist
Wir erhalten in Matrix-Schreibweise - hier für die Unwucht am Impeller (bei A) -
mit
- ,
- ,
und
- .
Damit es übersichtlich bleibt, vernachlässigen wir - wegen mU ≪ mi' - die Matrizen MU, GU und KU beim Zusammenbau der Gesamt-Gleichungssystems.
Es bleibt: PA als "rechte Seite" im Gleichungssystem.
/***********************************/
/* matrices from d'Alembert forces
of unbalance*/
r : expand(matrix([ 0, V[i](t),W[i](t)]).D[1](Omega*t)
+matrix([ 0, 0 , e ]).DL[2](-Φ[i](t)).DL[3](Ψ[i](t)).D[1](Omega*t)
+matrix([+a, 0 , 0 ]).D[2](-phi).DL[2](-Φ[i](t)).DL[3](Ψ[i](t)).D[1](Omega*t))$
/* linearize*/
r : subst(nuller,r) + sum(subst(nuller,diff(r,Q[1][j]))*Q[1][j],j,9,12)$
/* Variation of ...*/
δr : sum(subst(nuller,diff(r,Q[1][j]))*Q[2][j],j,9,12)$
δW[U] :-m[U]/2*diff(r,t,2). δr$
δW[U] : expand(subst(nuller,δW[U]))$
/* add second Mass */
δW[U] : expand(trigsimp(δW[U] +subst([a=-a],δW[U])))$
δW[U] : subst([cos(phi)=sin(2*phi)/sin(phi)/2],δW[U]);
/***********************************/
/* right-hand-side from d'Alembert forces
of unbalance*/
PU : trigsimp(funmake('matrix,makelist([coeff(+δW[U],Q[2][j])],j,9,12)));
Virtuelle Formänderungsenergie
Zwei elastische Elemente hat unser Modell:
- die Welle und
- die elastischen Lager.
Virtuelle Formänderungsenergie der Welle
Die Virtuelle Formänderungsenergie für die elastische Welle können wir aus der FEM-Formulierung für den Euler-Bernoulli-Balken kopieren:
mit
/*******************************************************/
/* virtuel strain energies */
/*******************************************************/
/* matrices from elastic deformation
of shaft */
δΠ[S] : integrate(EI*diff(subst(trial,w(x,t)),xi,2)*diff(subst(varia,subst(trial,w(x,t))),xi,2),xi,0,1)/ℓ^3+
integrate(EI*diff(subst(trial,v(x,t)),xi,2)*diff(subst(varia,subst(trial,v(x,t))),xi,2),xi,0,1)/ℓ^3$
δΠ[S] : expand(subst(solve(params[1][4],EI) ,δΠ[S]))$
KS : funmake('matrix,makelist(makelist(coeff(coeff(δΠ[S],Q[2][i]),diff(Q[1][j],t,0)),i,1,8),j,1,8))$
Virtuelle Formänderungsenergie der elastischen Lager
Etwas komplizierter wir es bei der virtuellen Formänderungsenergie der Lager.
Die Verschiebungen der Welle - hier VB und WB für Lager B - haben wir im mitrotierenden Koordinatensystem angegeben. Wenn hier das Turbolader-Gehäuse unterschiedliche Nachgiebigkeiten in y0 und z0-Richtung hat, müssen wir die Auslenkungen auf das Intertialsystem transformieren.
Dafür brauchen wir
und
Die virtuelle Formänderungsenergie der beiden Federn ist dann
- .
🧨 Gleitlager sind komplizierter: |
In Gleitlagern ist die Auslenkung in eine Richtung (z.B. y1) durch die Drehung der Welle immer mit einer Kraft senkrecht zur Auslenkung (z.B. in z1-Richtung) gekoppelt. Die Bewegungsgleichungen haben dann periodische Koeffizienten (vgl. Aufgabe "Kw30"). Das vernachlässigen wir hier. |
Einsetzen und Vereinfachen liefert
- .
Hier stehen jetzt Terme mit sin(2 Ω t), cos(2 Ω t), die sich auch nicht herauskürzen lassen. Sie führen in der Bewegungsgleichung zu einer Steifigskeits-Matrix (die Koeffizienten), die nicht mehr konstant ist. Diese periodischen Anteile haben alle den Koeffizienten k3-k2 - wir führen deshalb
ein und schreiben damit die Steifigkeitsmatrizen
an. Aber dafür müssen wir zuerst noch die Auslenkungen VB und WB in unsere FE-Knoten umrechnen. Wir wählen
und erhalten z.B. für
- .
Damit berechnen wir die Element-Steifigkeits-Matrizen zu
- ,
und
- .
/***********************************/
/* matrices from elastic deformation
of bearing */
r : expand(subst(trial,matrix([0,v(x,t),w(x,t)]).D[1](Omega*t)));
δr : sum(subst(nuller,diff(r,Q[1][j]))*Q[2][j],j,1,8);
δΠ[B] : k[2]*r[1][2]*subst(varia,r[1][2])+
k[3]*r[1][3]*subst(varia,r[1][3])$
δΠ[B] : expand(sum(subst(params[2][i],δΠ[B]),i,1,2))$
δΠ[B] : expand(subst([k[3]=k[2]+Δk],δΠ[B]))$
KB[N] : funmake('matrix,makelist(makelist(trigsimp(coeff(coeff(δΠ[B],Q[2][i]),diff(Q[1][j],t,0))),i,1,8),j,1,8))$
KB[N] : expand(subst(trigReplace[3],expand(subst(trigReplace[2],expand(subst(trigReplace[1],KB[N]))))))$
KB[C] : coeff(KB[N],cos(2*Omega*t))/Δk$
KB[S] : coeff(KB[N],sin(2*Omega*t))/Δk$
KB[N] : KB[N] - Δk*KB[S]*sin(2*Omega*t) - Δk*KB[C]*cos(2*Omega*t)$
/* -> see Matthieus DGL, Ottl 3.11*/
Komponieren der System-Matrizen
Aus den Element-Matrizen müssen wir nun noch die System-Matrix komponieren, d.h. die Element-Matrizen passend hinein-addieren. Die Struktur dazu ist
- Fehler beim Parsen (Syntaxfehler): {\displaystyle \underline{\underline{M}}\;\underline{\ddot{Q}} + \underline{\underline{G}}\; \underline{\dot{Q}} + \left(\underbrace{\underline{\underline{K}}_D + \underline{\underline{K}}_C \cos(2\Omega t)+\underline{\underline{K}}_S \sin(2 \Omega t)}_{\displaystyle \text{Terme mit }\Delta k}+\underline{\underline{K}}_0\right)\; \underline{Q} = \underline{P} }
Wir erhalten
- ,
- ,
- ,
- ,
und
In P steht dabei nur die Zentrifugalkraft der Impeller-Unwucht - auf eine Unwucht in der Turbine verzichten wir hier.
In der Hauptdiagonale der Steifigkeitsmatrix K0 stehen nun Terme - hier in Zeile 1 - die bei genügend großem Ω negativ werden:
Das sieht nach Instabilität aus!
Aber unser Mathematisches Modell ist erst mal fertig! Wir können es aber etwas einfacher hinschrieben:
/*******************************************************/
/* compose total equations of motion */
M : MS$
G : GS$
K[N] : KS + KB[N]$
K[S] : Δk*KB[S]$
K[C] : Δk*KB[C]$
P : zeromatrix(8,1)$
for row:1 thru 4 do
(P[row,1] : subst([sin(phi)=sin(2*phi)/cos(phi)/2],PU[row,1]),
for col:1 thru 4 do
(print (row,col),
/* compressor wheel*/
M [ row][ col] : M [ row][ col]+subst([i=I],MW[row][col]),
M [4+row][4+col] : M [4+row][4+col]+subst([i=T],MW[row][col]),
G [ row][ col] : G [ row][ col]+subst([i=I],GW[row][col]),
G [4+row][4+col] : G [4+row][4+col]+subst([i=T],GW[row][col]),
K[N][ row][ col] : K[N][ row][ col]+subst([i=I],KW[row][col]),
K[N][4+row][4+col] : K[N][4+row][4+col]+subst([i=T],KW[row][col])))$
Mathematisches Modell anpassen
Hinschreiben in dimensionsloser Form
Das Mathematische Modell schreiben wir jetzt noch in dimensionsloser Form an.
Dazu wählen wir
- ,
also
- .
Als dimensionslose Zeit wählen wir
- .
Wir ersetzen außerdem dimensionsbehaftete Parameter durch dimensionslose Parameter:
- .
Als numerische Werte wählen wir weiter
- ..
Die Koeffizienten unseres linearen, dimensionslosen Differentialgleichungssystems zweiter Ordnung sind hier aufgelistet:
m[1,1] = 179/(560*pi^2)
m[1,2] = 11/(1120*pi^2)
m[1,3] = 0
m[1,4] = 0
m[1,5] = 27/(1120*pi^2)
m[1,6] = -13/(2240*pi^2)
m[1,7] = 0
m[1,8] = 0
m[2,1] = 11/(1120*pi^2)
m[2,2] = 1/(70*pi^2)
m[2,3] = 0
m[2,4] = 0
m[2,5] = 13/(2240*pi^2)
m[2,6] = -3/(2240*pi^2)
m[2,7] = 0
m[2,8] = 0
m[3,1] = 0
m[3,2] = 0
m[3,3] = 179/(560*pi^2)
m[3,4] = 11/(1120*pi^2)
m[3,5] = 0
m[3,6] = 0
m[3,7] = 27/(1120*pi^2)
m[3,8] = -13/(2240*pi^2)
m[4,1] = 0
m[4,2] = 0
m[4,3] = 11/(1120*pi^2)
m[4,4] = 1/(70*pi^2)
m[4,5] = 0
m[4,6] = 0
m[4,7] = 13/(2240*pi^2)
m[4,8] = -3/(2240*pi^2)
m[5,1] = 27/(1120*pi^2)
m[5,2] = 13/(2240*pi^2)
m[5,3] = 0
m[5,4] = 0
m[5,5] = 109/(560*pi^2)
m[5,6] = -11/(1120*pi^2)
m[5,7] = 0
m[5,8] = 0
m[6,1] = -13/(2240*pi^2)
m[6,2] = -3/(2240*pi^2)
m[6,3] = 0
m[6,4] = 0
m[6,5] = -11/(1120*pi^2)
m[6,6] = 9/(1120*pi^2)
m[6,7] = 0
m[6,8] = 0
m[7,1] = 0
m[7,2] = 0
m[7,3] = 27/(1120*pi^2)
m[7,4] = 13/(2240*pi^2)
m[7,5] = 0
m[7,6] = 0
m[7,7] = 109/(560*pi^2)
m[7,8] = -11/(1120*pi^2)
m[8,1] = 0
m[8,2] = 0
m[8,3] = -13/(2240*pi^2)
m[8,4] = -3/(2240*pi^2)
m[8,5] = 0
m[8,6] = 0
m[8,7] = -11/(1120*pi^2)
m[8,8] = 9/(1120*pi^2)
g[1,1] = 0
g[1,2] = 0
g[1,3] = (179*eta)/(140*pi)
g[1,4] = (11*eta)/(280*pi)
g[1,5] = 0
g[1,6] = 0
g[1,7] = (27*eta)/(280*pi)
g[1,8] = -(13*eta)/(560*pi)
g[2,1] = 0
g[2,2] = 0
g[2,3] = (11*eta)/(280*pi)
g[2,4] = eta/(140*pi)
g[2,5] = 0
g[2,6] = 0
g[2,7] = (13*eta)/(560*pi)
g[2,8] = -(3*eta)/(560*pi)
g[3,1] = -(179*eta)/(140*pi)
g[3,2] = -(11*eta)/(280*pi)
g[3,3] = 0
g[3,4] = 0
g[3,5] = -(27*eta)/(280*pi)
g[3,6] = (13*eta)/(560*pi)
g[3,7] = 0
g[3,8] = 0
g[4,1] = -(11*eta)/(280*pi)
g[4,2] = -eta/(140*pi)
g[4,3] = 0
g[4,4] = 0
g[4,5] = -(13*eta)/(560*pi)
g[4,6] = (3*eta)/(560*pi)
g[4,7] = 0
g[4,8] = 0
g[5,1] = 0
g[5,2] = 0
g[5,3] = (27*eta)/(280*pi)
g[5,4] = (13*eta)/(560*pi)
g[5,5] = 0
g[5,6] = 0
g[5,7] = (109*eta)/(140*pi)
g[5,8] = -(11*eta)/(280*pi)
g[6,1] = 0
g[6,2] = 0
g[6,3] = -(13*eta)/(560*pi)
g[6,4] = -(3*eta)/(560*pi)
g[6,5] = 0
g[6,6] = 0
g[6,7] = -(11*eta)/(280*pi)
g[6,8] = eta/(140*pi)
g[7,1] = -(27*eta)/(280*pi)
g[7,2] = -(13*eta)/(560*pi)
g[7,3] = 0
g[7,4] = 0
g[7,5] = -(109*eta)/(140*pi)
g[7,6] = (11*eta)/(280*pi)
g[7,7] = 0
g[7,8] = 0
g[8,1] = (13*eta)/(560*pi)
g[8,2] = (3*eta)/(560*pi)
g[8,3] = 0
g[8,4] = 0
g[8,5] = (11*eta)/(280*pi)
g[8,6] = -eta/(140*pi)
g[8,7] = 0
g[8,8] = 0
kn[1,1] = -(1458*eta^2-19302)/1458
kn[1,2] = 956/243
kn[1,3] = 0
kn[1,4] = 0
kn[1,5] = 428/243
kn[1,6] = 146/243
kn[1,7] = 0
kn[1,8] = 0
kn[2,1] = 956/243
kn[2,2] = 424/243
kn[2,3] = 0
kn[2,4] = 0
kn[2,5] = -146/243
kn[2,6] = 82/243
kn[2,7] = 0
kn[2,8] = 0
kn[3,1] = 0
kn[3,2] = 0
kn[3,3] = -(1458*eta^2-19302)/1458
kn[3,4] = 956/243
kn[3,5] = 0
kn[3,6] = 0
kn[3,7] = 428/243
kn[3,8] = 146/243
kn[4,1] = 0
kn[4,2] = 0
kn[4,3] = 956/243
kn[4,4] = 424/243
kn[4,5] = 0
kn[4,6] = 0
kn[4,7] = -146/243
kn[4,8] = 82/243
kn[5,1] = 428/243
kn[5,2] = -146/243
kn[5,3] = 0
kn[5,4] = 0
kn[5,5] = -(324*eta^2-25736/3)/648
kn[5,6] = -956/243
kn[5,7] = 0
kn[5,8] = 0
kn[6,1] = 146/243
kn[6,2] = 82/243
kn[6,3] = 0
kn[6,4] = 0
kn[6,5] = -956/243
kn[6,6] = 424/243
kn[6,7] = 0
kn[6,8] = 0
kn[7,1] = 0
kn[7,2] = 0
kn[7,3] = 428/243
kn[7,4] = -146/243
kn[7,5] = 0
kn[7,6] = 0
kn[7,7] = -(324*eta^2-25736/3)/648
kn[7,8] = -956/243
kn[8,1] = 0
kn[8,2] = 0
kn[8,3] = 146/243
kn[8,4] = 82/243
kn[8,5] = 0
kn[8,6] = 0
kn[8,7] = -956/243
kn[8,8] = 424/243
ks[1,1] = 0
ks[1,2] = 0
ks[1,3] = 2245/729
ks[1,4] = 470/729
ks[1,5] = 0
ks[1,6] = 0
ks[1,7] = 1400/729
ks[1,8] = -340/729
ks[2,1] = 0
ks[2,2] = 0
ks[2,3] = 470/729
ks[2,4] = 100/729
ks[2,5] = 0
ks[2,6] = 0
ks[2,7] = 340/729
ks[2,8] = -80/729
ks[3,1] = 2245/729
ks[3,2] = 470/729
ks[3,3] = 0
ks[3,4] = 0
ks[3,5] = 1400/729
ks[3,6] = -340/729
ks[3,7] = 0
ks[3,8] = 0
ks[4,1] = 470/729
ks[4,2] = 100/729
ks[4,3] = 0
ks[4,4] = 0
ks[4,5] = 340/729
ks[4,6] = -80/729
ks[4,7] = 0
ks[4,8] = 0
ks[5,1] = 0
ks[5,2] = 0
ks[5,3] = 1400/729
ks[5,4] = 340/729
ks[5,5] = 0
ks[5,6] = 0
ks[5,7] = 2245/729
ks[5,8] = -470/729
ks[6,1] = 0
ks[6,2] = 0
ks[6,3] = -340/729
ks[6,4] = -80/729
ks[6,5] = 0
ks[6,6] = 0
ks[6,7] = -470/729
ks[6,8] = 100/729
ks[7,1] = 1400/729
ks[7,2] = 340/729
ks[7,3] = 0
ks[7,4] = 0
ks[7,5] = 2245/729
ks[7,6] = -470/729
ks[7,7] = 0
ks[7,8] = 0
ks[8,1] = -340/729
ks[8,2] = -80/729
ks[8,3] = 0
ks[8,4] = 0
ks[8,5] = -470/729
ks[8,6] = 100/729
ks[8,7] = 0
ks[8,8] = 0
kc[1,1] = -2245/729
kc[1,2] = -470/729
kc[1,3] = 0
kc[1,4] = 0
kc[1,5] = -1400/729
kc[1,6] = 340/729
kc[1,7] = 0
kc[1,8] = 0
kc[2,1] = -470/729
kc[2,2] = -100/729
kc[2,3] = 0
kc[2,4] = 0
kc[2,5] = -340/729
kc[2,6] = 80/729
kc[2,7] = 0
kc[2,8] = 0
kc[3,1] = 0
kc[3,2] = 0
kc[3,3] = 2245/729
kc[3,4] = 470/729
kc[3,5] = 0
kc[3,6] = 0
kc[3,7] = 1400/729
kc[3,8] = -340/729
kc[4,1] = 0
kc[4,2] = 0
kc[4,3] = 470/729
kc[4,4] = 100/729
kc[4,5] = 0
kc[4,6] = 0
kc[4,7] = 340/729
kc[4,8] = -80/729
kc[5,1] = -1400/729
kc[5,2] = -340/729
kc[5,3] = 0
kc[5,4] = 0
kc[5,5] = -2245/729
kc[5,6] = 470/729
kc[5,7] = 0
kc[5,8] = 0
kc[6,1] = 340/729
kc[6,2] = 80/729
kc[6,3] = 0
kc[6,4] = 0
kc[6,5] = 470/729
kc[6,6] = -100/729
kc[6,7] = 0
kc[6,8] = 0
kc[7,1] = 0
kc[7,2] = 0
kc[7,3] = 1400/729
kc[7,4] = 340/729
kc[7,5] = 0
kc[7,6] = 0
kc[7,7] = 2245/729
kc[7,8] = -470/729
kc[8,1] = 0
kc[8,2] = 0
kc[8,3] = -340/729
kc[8,4] = -80/729
kc[8,5] = 0
kc[8,6] = 0
kc[8,7] = -470/729
kc[8,8] = 100/729
p[1,1] = 0
p[2,1] = 0
p[3,1] = (9/1000/100*eta^2)/4
p[4,1] = (9/1000/100^2*eta^2*sin(2*pi/6))/8
p[5,1] = 0
p[6,1] = 0
p[7,1] = 0
p[8,1] = 0 |
/*******************************************************/
/* Mathematisches Modell anpassen */
/*******************************************************/
toReplace : [k[2]=kappa[2]*k[4], Δk=kappa[3]*k[4], k[4]=omega[0,0]^2*m[I],
J[I]=Theta[I]*m[I]*ℓ^2, J[T]=Theta[T]*m[T]*ℓ^2, m[T]=theta[T]*m[t], m[U]=theta[U]*m[t], m[S]=theta[S]*m[t],
m[I] = theta[I]*m[t],
e = epsilon*ℓ, a = alpha*ℓ,
Omega = eta*omega[0,0]];
/* numerical parameters */
numerical : [
/* mass ratios */
theta[S] = 3/9, theta[I] = 4/9, theta[T] = 2/9, theta[U] = 1/1000,
/* mass momentum ratios */
Theta[I] = 1/20, Theta[T] = 1/20,
/* stiffness ratios */
kappa[2] = 10, kappa[3] = 10];
mats : [copymatrix(M)/subst(solve(params[3],T),T)^2, copymatrix(G)/subst(solve(params[3],T),T), copymatrix(K[N]), copymatrix(K[S]), copymatrix(K[C]), copymatrix(P)]$
/***********************************/
/* make V and W dimensionsless
coordinates V = V*ℓ, W = W*ℓ*/
for i:1 thru (length(mats)-1) do
(for row:1 thru 8 step 2 do
mats[i][row] : mats[i][row]*ℓ,
for row:1 thru 8 step 1 do
for col:1 thru 8 step 2 do
mats[i][row][col] : mats[i][row][col]*ℓ)$
for row:1 thru 8 step 2 do
mats[length(mats)][row][1] : mats[length(mats)][row][1]*ℓ$
/***********************************/
/* and simplify .... */
mats: ratsimp(subst(toReplace,mats/m[I]/ℓ^2/omega[0,0]^2))$
mats: subst(numerical,mats)$
/* write matrices to file */
fileN : "C:\\Users\\abs384\\OneDrive\\X\\tmp\\plots\\system.txt"$
toDump : [m, g, kn, ks, kc, p]$
with_stdout (fileN,
for mid:1 thru length(toDump) do
for row:1 thru length(mats[mid]) do
for col:1 thru length(mats[mid][row]) do
grind (toDump[mid][row,col] = mats[mid][row,col]))$