update num and lectures
This commit is contained in:
+1
-1
@@ -213,7 +213,7 @@
|
|||||||
}
|
}
|
||||||
% replace all relations with align characters (&) and add the needed padding
|
% replace all relations with align characters (&) and add the needed padding
|
||||||
\regex_replace_all:nnN
|
\regex_replace_all:nnN
|
||||||
{ (\c{impliedby}&|&\c{impliedby}|\c{implies}&|&\c{implies}|\c{approx}&|&\c{approx}|\c{equiv}&|&\c{equiv}|=&|&=|\c{le}&|&\c{le}|\c{ge}&|&\c{ge}|&\c{stackrel}{.*?}{.*?}|\c{stackrel}{.*?}{.*?}&|&\c{neq}|\c{neq}&) }
|
{ (\c{iff}&|&\c{iff}|\c{impliedby}&|&\c{impliedby}|\c{implies}&|&\c{implies}|\c{approx}&|&\c{approx}|\c{equiv}&|&\c{equiv}|=&|&=|\c{le}&|&\c{le}|\c{ge}&|&\c{ge}|&\c{stackrel}{.*?}{.*?}|\c{stackrel}{.*?}{.*?}&|&\c{neq}|\c{neq}&) }
|
||||||
{ \c{kern} \u{l_tmp_dim_needed} \1 \c{kern} \u{l_tmp_dim_needed} }
|
{ \c{kern} \u{l_tmp_dim_needed} \1 \c{kern} \u{l_tmp_dim_needed} }
|
||||||
\l__lec_text_tl
|
\l__lec_text_tl
|
||||||
\l__lec_text_tl
|
\l__lec_text_tl
|
||||||
|
|||||||
+1
-1
Submodule sose2020/ana/lectures updated: 0368910241...ba8188da5c
Binary file not shown.
@@ -248,7 +248,7 @@ NumberType frobeniusNorm(const hdnum::DenseMatrix<NumberType> &A) {
|
|||||||
|
|
||||||
\item Auszug aus \textit{rohrleitungsnetzwerk.cc}
|
\item Auszug aus \textit{rohrleitungsnetzwerk.cc}
|
||||||
\begin{lstlisting}[language=C++, title=Eigenwertberechnung, captionpos=b]
|
\begin{lstlisting}[language=C++, title=Eigenwertberechnung, captionpos=b]
|
||||||
// Funktion zur Berechnung des betragsgrößten Eigenwertes mit Potenzmethode
|
// Funktion zur Berechnung des betragsgroessten Eigenwertes mit Potenzmethode
|
||||||
template<class NumberType>
|
template<class NumberType>
|
||||||
NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
||||||
// Error checking
|
// Error checking
|
||||||
@@ -259,18 +259,33 @@ NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
|||||||
|
|
||||||
// start vektor
|
// start vektor
|
||||||
hdnum::Vector<NumberType> r(N);
|
hdnum::Vector<NumberType> r(N);
|
||||||
r[0] = 1;
|
r[0] = 0;
|
||||||
// work copy
|
// work copy
|
||||||
hdnum::Vector<NumberType> r_tmp(N);
|
hdnum::Vector<NumberType> r_tmp(N);
|
||||||
hdnum::Vector<NumberType> diff(N);
|
// finde vektor mit Ar != 0
|
||||||
// fuehre iterationsschritt 10000 mal aus
|
for (int i = 0;;i++) {
|
||||||
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
|
if (r_tmp.two_norm() > 0) {
|
||||||
|
// Ar != 0
|
||||||
|
break;
|
||||||
|
} else if (i >= 100) {
|
||||||
|
// breche ab, wenn kein passender startvektor gefunden werden kann
|
||||||
|
HDNUM_ERROR("Kann keinen Vektor mit Ax != 0 finden. Ist A = 0?");
|
||||||
|
}
|
||||||
|
// Ar = 0, modifiziere start vektor
|
||||||
|
r[i % N] += 1;
|
||||||
|
}
|
||||||
|
// fuehre iterationsschritt maximal 10000 mal aus
|
||||||
for (int k=0; k<10000; k++) {
|
for (int k=0; k<10000; k++) {
|
||||||
A.mv(r_tmp, r); // r_tmp = Ar
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
r_tmp /= r_tmp.two_norm(); // normiere r_tmp
|
r_tmp /= r_tmp.two_norm(); // normiere r_tmp
|
||||||
|
if ((r-r_tmp).two_norm() == 0)
|
||||||
|
// breche ab ab, wenn maximale genauigkeit erreicht wurde
|
||||||
|
break;
|
||||||
r = r_tmp;
|
r = r_tmp;
|
||||||
}
|
}
|
||||||
A.mv(r_tmp, r);
|
|
||||||
// berechne eigenwert mit rayleigh quotient
|
// berechne eigenwert mit rayleigh quotient
|
||||||
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
return (r * r_tmp)/r.two_norm_2();
|
return (r * r_tmp)/r.two_norm_2();
|
||||||
}\end{lstlisting}
|
}\end{lstlisting}
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ NumberType frobeniusNorm(const hdnum::DenseMatrix<NumberType> &A) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Funktion zur Berechnung des betragsgrößten Eigenwertes mit Potenzmethode
|
// Funktion zur Berechnung des betragsgroessten Eigenwertes mit Potenzmethode
|
||||||
template<class NumberType>
|
template<class NumberType>
|
||||||
NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
||||||
// Error checking
|
// Error checking
|
||||||
@@ -82,25 +82,38 @@ NumberType maxEigenwert(const hdnum::DenseMatrix<NumberType> &A) {
|
|||||||
|
|
||||||
// start vektor
|
// start vektor
|
||||||
hdnum::Vector<NumberType> r(N);
|
hdnum::Vector<NumberType> r(N);
|
||||||
r[0] = 1;
|
r[0] = 0;
|
||||||
// work copy
|
// work copy
|
||||||
hdnum::Vector<NumberType> r_tmp(N);
|
hdnum::Vector<NumberType> r_tmp(N);
|
||||||
hdnum::Vector<NumberType> diff(N);
|
// finde vektor mit Ar != 0
|
||||||
// fuehre iterationsschritt 10000 mal aus
|
for (int i = 0;;i++) {
|
||||||
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
|
if (r_tmp.two_norm() > 0) {
|
||||||
|
// Ar != 0
|
||||||
|
break;
|
||||||
|
} else if (i >= 100) {
|
||||||
|
// breche ab, wenn kein passender startvektor gefunden werden kann
|
||||||
|
HDNUM_ERROR("Kann keinen Vektor mit Ax != 0 finden. Ist A = 0?");
|
||||||
|
}
|
||||||
|
// Ar = 0, modifiziere start vektor
|
||||||
|
r[i % N] += 1;
|
||||||
|
}
|
||||||
|
// fuehre iterationsschritt maximal 10000 mal aus
|
||||||
for (int k=0; k<10000; k++) {
|
for (int k=0; k<10000; k++) {
|
||||||
A.mv(r_tmp, r); // r_tmp = Ar
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
r_tmp /= r_tmp.two_norm(); // normiere r_tmp
|
r_tmp /= r_tmp.two_norm(); // normiere r_tmp
|
||||||
|
if ((r-r_tmp).two_norm() == 0)
|
||||||
|
// breche ab ab, wenn maximale genauigkeit erreicht wurde
|
||||||
|
break;
|
||||||
r = r_tmp;
|
r = r_tmp;
|
||||||
}
|
}
|
||||||
A.mv(r_tmp, r);
|
|
||||||
// berechne eigenwert mit rayleigh quotient
|
// berechne eigenwert mit rayleigh quotient
|
||||||
|
A.mv(r_tmp, r); // r_tmp = Ar
|
||||||
return (r * r_tmp)/r.two_norm_2();
|
return (r * r_tmp)/r.two_norm_2();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hauptprogramm
|
// Hauptprogramm
|
||||||
int main(int argc, char ** argv)
|
int main(int argc, char ** argv) {
|
||||||
{
|
|
||||||
|
|
||||||
// Anzahl der Knoten
|
// Anzahl der Knoten
|
||||||
const int N(10);
|
const int N(10);
|
||||||
std::cout << "Knotenanzahl N: " << N << std::endl;
|
std::cout << "Knotenanzahl N: " << N << std::endl;
|
||||||
@@ -126,10 +139,8 @@ int main(int argc, char ** argv)
|
|||||||
// und c) mit folgender Matrix testen
|
// und c) mit folgender Matrix testen
|
||||||
int size_b = 3;
|
int size_b = 3;
|
||||||
hdnum::DenseMatrix<REAL> B(size_b,size_b);
|
hdnum::DenseMatrix<REAL> B(size_b,size_b);
|
||||||
for (std::size_t i=0; i<size_b; ++i)
|
for (std::size_t i=0; i<size_b; ++i) {
|
||||||
{
|
for (std::size_t j=0; j<size_b; ++j) {
|
||||||
for (std::size_t j=0; j<size_b; ++j)
|
|
||||||
{
|
|
||||||
B[i][j] = i+j;
|
B[i][j] = i+j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user