"Dämpfung und Gyroskopie können entsprechend berücksichtigt werden, wenn das resultierende nichtlineare EWP nach der bekannten Transformation in ein lineares EWP überführt wird (Matrizen $\\mathrm{F}$ und $\\mathrm{G}$).\n",
"Diese Umformung ist exakt. Hier hat noch keine Näherung stattgefunden. Diese Gleichung gilt für jede betrachtete Eigenkreisfrequenz $\\omega_{0,i}$ und den zugehörigen Eigenvektor $\\hat{\\vec{q}}_i$.\n",
"$f$ ist die Gesamtanzahl der Freiheitsgrade (= Anzahl der Eigenformen). Die skalaren Vorfaktoren $a_i$ sind zunächst unbekannt. Auch Null ist als Vorfaktor möglich, wenn eine Eigenform nicht an der betrachtenten Verformung beteiligt ist."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Iteration\n",
"\n",
"Wird $\\mathrm{M}^\\prime_u $ mit einem beliebigen Vektor $\\hat{\\vec{s}}$ multipliziert, ergibt sich\n",
"Nach ,,ausreichend'' vielen Iterationsschritten $N$ besteht der Vektor $\\hat{\\vec{s}}_N$ maßgeblich aus dem Vielfachen des ersten Eigenvektors $\\hat{\\vec{q}}_1$ und ist somit selbst ein Eigenvektor der ersten Eigenkreisfrequenz."
"Ist nun der zweite Eigenvektor gesucht, muss ein Startvektor $\\hat{\\vec{s}}_{0,2}$ gefunden werden, für den $a_1 = 0$ gilt. Dies wird erzielt, indem der Anteil des ersten Eigenvektors $\\hat{\\vec{q}}_1$ von dem (zufälligen) Startvektor $\\hat{\\vec{s}}$ subtrahiert wird. "
"* Da die Länge des Vektors $\\hat{\\vec{s}}_j$ mit jeder Iteration $j$ zunimmt, ist $\\hat{\\vec{s}}_j$ nach jeder$^\\text{*}$ Iteration zu normieren, um die numerischen Werte beschränkt zu halten.\n",
"* Der Startvektor muss den gesuchten ersten Eigenvektor beinhalten, d.h. $a_1 \\neq 0$.\n",
"* Da das Absieben nicht exakt ist, muss auch während der Iteration gesiebt werden."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Iterationsfunktion mit dem Aussieben ungewünschter Ergebnisse in jedem Iterationsschritt"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-26T18:18:44.374795Z",
"start_time": "2021-01-26T18:18:44.202221Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"function sk = InvVekIteration_Sieben(K,M,s0,Grenze,EV_bekannt)\n",
" % K - Steifigkeitsmatrix\n",
" % M - Massenmatrix\n",
" % s0 - Startvektor\n",
" % Grenze - Konvergenzkriterium: Norm der Vektordifferenz der letzten beiden Iterationen\n",
" % EV_bekannt - Matrix mit Eigenvektoren in den Spalten, die bei der Iteration ausgesiebt werden sollen\n",
" sk = M_u_prime*sj; % Iteration (k = j+1) durchführen\n",
" sk = sk/norm(sk); % Normieren\n",
" \n",
" for i = 1:size(EV_bekannt,2) % Alle bekannten Eigenvektoren raussieben\n",
" sk = aussieben(sk,M,EV_bekannt(:,i));\n",
" end\n",
" end\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Rayleigh-Quotient\n",
"\n",
"Ist ein Eigenvektor (näherungsweise) bekannt, so kann der Eigenwert bzw. die Eigenkreisfrequenz (näherungsweise) mittels des Rayleigh-Quotienten berechnet werden. Dieser folgt aus der Umformung des Eigenwertproblems:\n",
"Mit den obigen Funktionen kann nun eine rudimentäre Version der `eigs` Funktion zur Bestimmung der kleinsten $n$ Eigenwerte mit zugehörigen Eigenvektoren erstellt werden."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-26T18:18:46.771335Z",
"start_time": "2021-01-26T18:18:46.648259Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"function [omega, EV] = myeigs(K,M,n)\n",
"\n",
" Grenze = 1E-10; % Iterationsgrenze\n",
"\n",
" dof = size(K,1); % Anzahl der Freiheitsgrade in q\n",
" s0 = ones(dof,1); % Startvektor generieren (rand() oder ones())\n",
" \n",
" omega = zeros(n,1); % Vektor zum Abspeichern der Eigenkreisfrequenzen\n",
" EV = zeros(dof,n); % Matrix zum Abspeichern der Eigenvektoren\n",
"\n",
" % Schleife, bis die gewünschte Anzahl an Eigenvektoren gefunden ist\n",
"1. Mit der (nicht-inversen) Vektoriteration können entsprechend die höchsten Eigenkreisfrequenzen zuerst berechnet werden"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"2. Die inverse von-Mises Vektoriteration liefert die betragsmäßig kleinsten Eigenwerte. Mit Hilfe der Skalarverschiebung lässt sich auch die zu einem Zielwert am nächsten befindliche Lösung finden, denn "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"*Besitzt eine Matrix $A$ die Eigenwerte $\\lambda_1, \\lambda_2, \\lambda_3, \\ldots, \\lambda_n$, sodass $(A - \\lambda I) q = 0$,*\n",
"\n",
"*dann besitzt die Matrix $B = A + pI$ die Eigenwerte $\\lambda_1+p, \\lambda_2+p, \\lambda_3+p, \\ldots, \\lambda_n+p$.*\n",
"Wird also die Eigenkreisfrequenz in der Nähe von $\\omega_{ziel}$ gesucht, kann die Steifigkeitsmatrix durch \n",
"$$\n",
"K^\\prime = K - \\omega_{ziel}^2 M \n",
"$$\n",
"modifiziert werden und die inverse Vektoriteration durchgeführt werden. Nach Identifikation des Eigenwertes ist die Verschiebung in der Lösung rückgängig zu machen, d.h. der Lösung ist $\\omega_{ziel}$ zu addieren."
Dämpfung und Gyroskopie können entsprechend berücksichtigt werden, wenn das resultierende nichtlineare EWP nach der bekannten Transformation in ein lineares EWP überführt wird (Matrizen $\mathrm{F}$ und $\mathrm{G}$).
Diese Umformung ist exakt. Hier hat noch keine Näherung stattgefunden. Diese Gleichung gilt für jede betrachtete Eigenkreisfrequenz $\omega_{0,i}$ und den zugehörigen Eigenvektor $\hat{\vec{q}}_i$.
Jede beliebige Verformung $\hat{\vec{s}}$ des Systems setzt sich durch die Überlagerung der Eigenformen zusammen:
$$
\hat{\vec{s}} = \sum_{i=1}^f a_i \hat{\vec{q}}_i
$$
$f$ ist die Gesamtanzahl der Freiheitsgrade (= Anzahl der Eigenformen). Die skalaren Vorfaktoren $a_i$ sind zunächst unbekannt. Auch Null ist als Vorfaktor möglich, wenn eine Eigenform nicht an der betrachtenten Verformung beteiligt ist.
%% Cell type:markdown id: tags:
#### Iteration
Wird $\mathrm{M}^\prime_u $ mit einem beliebigen Vektor $\hat{\vec{s}}$ multipliziert, ergibt sich
Nach ,,ausreichend'' vielen Iterationsschritten $N$ besteht der Vektor $\hat{\vec{s}}_N$ maßgeblich aus dem Vielfachen des ersten Eigenvektors $\hat{\vec{q}}_1$ und ist somit selbst ein Eigenvektor der ersten Eigenkreisfrequenz.
%% Cell type:markdown id: tags:
#### Iterationsfunktion
%% Cell type:markdown id: tags:
Mit Angabe der Iterationsschritte:
%% Cell type:code id: tags:
``` octave
function sj = InvVekIteration_Schritte(K,M,s0,N)
% K - Steifigkeitsmatrix
% M - Massenmatrix
% s0 - Startvektor
% N - Anzahl an Iterationsschritten
M_u_prime = inv(K)*M;
sj = s0;
for j = 1:N
sj = M_u_prime*sj;
sj = sj/norm(sj); % Division durch die Länge (euklidische Norm)
end
end
```
%% Cell type:markdown id: tags:
Mit Angabe eines Konvergenzkriteriums
%% Cell type:code id: tags:
``` octave
function sk = InvVekIteration_Kriterium(K,M,s0,Grenze)
% K - Steifigkeitsmatrix
% M - Massenmatrix
% s0 - Startvektor
% Grenze - Konvergenzkriterium: Norm der Vektordifferenz der letzten beiden Iterationen
M_u_prime = inv(K)*M;
% Initialisierung
sj = zeros(size(s0));
sk = s0/norm(s0);
while norm(sk - sj) > Grenze
sj = sk; % letztes Iterationsergebnis speichern
sk = M_u_prime*sk; % Iteration (k = j+1) durchführen
sk = sk/norm(sk); % Normieren
end
end
```
%% Cell type:markdown id: tags:
Auch eine Kombination wäre denkbar mit einer definierten maximalen Anzahl an Iterationsschritten.
Ist nun der zweite Eigenvektor gesucht, muss ein Startvektor $\hat{\vec{s}}_{0,2}$ gefunden werden, für den $a_1 = 0$ gilt. Dies wird erzielt, indem der Anteil des ersten Eigenvektors $\hat{\vec{q}}_1$ von dem (zufälligen) Startvektor $\hat{\vec{s}}$ subtrahiert wird.
* Da die Länge des Vektors $\hat{\vec{s}}_j$ mit jeder Iteration $j$ zunimmt, ist $\hat{\vec{s}}_j$ nach jeder$^\text{*}$ Iteration zu normieren, um die numerischen Werte beschränkt zu halten.
* Der Startvektor muss den gesuchten ersten Eigenvektor beinhalten, d.h. $a_1 \neq 0$.
* Da das Absieben nicht exakt ist, muss auch während der Iteration gesiebt werden.
%% Cell type:markdown id: tags:
Iterationsfunktion mit dem Aussieben ungewünschter Ergebnisse in jedem Iterationsschritt
%% Cell type:code id: tags:
``` octave
function sk = InvVekIteration_Sieben(K,M,s0,Grenze,EV_bekannt)
% K - Steifigkeitsmatrix
% M - Massenmatrix
% s0 - Startvektor
% Grenze - Konvergenzkriterium: Norm der Vektordifferenz der letzten beiden Iterationen
% EV_bekannt - Matrix mit Eigenvektoren in den Spalten, die bei der Iteration ausgesiebt werden sollen
M_u_prime = inv(K)*M;
% Initialisierung
sj = zeros(size(s0));
sk = s0/norm(s0);
while norm(sk - sj) > Grenze
sj = sk; % letztes Iterationsergebnis speichern
sk = M_u_prime*sj; % Iteration (k = j+1) durchführen
sk = sk/norm(sk); % Normieren
for i = 1:size(EV_bekannt,2) % Alle bekannten Eigenvektoren raussieben
sk = aussieben(sk,M,EV_bekannt(:,i));
end
end
end
```
%% Cell type:markdown id: tags:
### Rayleigh-Quotient
Ist ein Eigenvektor (näherungsweise) bekannt, so kann der Eigenwert bzw. die Eigenkreisfrequenz (näherungsweise) mittels des Rayleigh-Quotienten berechnet werden. Dieser folgt aus der Umformung des Eigenwertproblems:
Mit den obigen Funktionen kann nun eine rudimentäre Version der `eigs` Funktion zur Bestimmung der kleinsten $n$ Eigenwerte mit zugehörigen Eigenvektoren erstellt werden.
%% Cell type:code id: tags:
``` octave
function [omega, EV] = myeigs(K,M,n)
Grenze = 1E-10; % Iterationsgrenze
dof = size(K,1); % Anzahl der Freiheitsgrade in q
s0 = ones(dof,1); % Startvektor generieren (rand() oder ones())
omega = zeros(n,1); % Vektor zum Abspeichern der Eigenkreisfrequenzen
EV = zeros(dof,n); % Matrix zum Abspeichern der Eigenvektoren
% Schleife, bis die gewünschte Anzahl an Eigenvektoren gefunden ist
1. Mit der (nicht-inversen) Vektoriteration können entsprechend die höchsten Eigenkreisfrequenzen zuerst berechnet werden
%% Cell type:markdown id: tags:
2. Die inverse von-Mises Vektoriteration liefert die betragsmäßig kleinsten Eigenwerte. Mit Hilfe der Skalarverschiebung lässt sich auch die zu einem Zielwert am nächsten befindliche Lösung finden, denn
%% Cell type:markdown id: tags:
*Besitzt eine Matrix $A$ die Eigenwerte $\lambda_1, \lambda_2, \lambda_3, \ldots, \lambda_n$, sodass $(A - \lambda I) q = 0$,*
*dann besitzt die Matrix $B = A + pI$ die Eigenwerte $\lambda_1+p, \lambda_2+p, \lambda_3+p, \ldots, \lambda_n+p$.*
$$
\begin{align*}
B &= A + pI \\
&= M^{-1}K + pI \\
&= M^{-1} \underbrace{(K + pM)}_{K^\prime}
\end{align*}
$$
%% Cell type:markdown id: tags:
Wird also die Eigenkreisfrequenz in der Nähe von $\omega_{ziel}$ gesucht, kann die Steifigkeitsmatrix durch
$$
K^\prime = K - \omega_{ziel}^2 M
$$
modifiziert werden und die inverse Vektoriteration durchgeführt werden. Nach Identifikation des Eigenwertes ist die Verschiebung in der Lösung rückgängig zu machen, d.h. der Lösung ist $\omega_{ziel}$ zu addieren.