From 98bbb4776ef16c825f7565213a56291eeaad46c5 Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Tue, 8 May 2018 10:18:16 +0200 Subject: [PATCH 1/8] updated --- bin/NMLS_c_sharp_variante.cs | 100 +++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/bin/NMLS_c_sharp_variante.cs b/bin/NMLS_c_sharp_variante.cs index bde6665..865d68a 100644 --- a/bin/NMLS_c_sharp_variante.cs +++ b/bin/NMLS_c_sharp_variante.cs @@ -161,7 +161,7 @@ void direkterVorgaenger() // Funktion fürs berechnen der Vorhersagezahl for (int i = 1; i < x_count; i++) { - x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); + x_pred += (w[i, x_count] * (_x[x_count - 1] - _x[x_count - i - 1])); } x_pred += _x[x_count - 1]; @@ -194,7 +194,7 @@ void direkterVorgaenger() double x_square = 0; for (int i = 1; i < x_count; i++) { - x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); + x_square += Math.Pow(_x[x_count - 1] - _x[x_count - i - 1], 2); } //Console.WriteLine(String.Format("X_square: {0}", x_square)); @@ -207,7 +207,7 @@ void direkterVorgaenger() // Funktion zum updaten der Gewichte for (int i = 1; i < x_count; i++) { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - 1] - _x[x_count - i - 1]) / x_square); } // Laufzeitvariable hochzählen @@ -229,4 +229,98 @@ void direkterVorgaenger() File.AppendAllText("ergebnisse.txt", String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), Encoding.UTF8); +} + +/************************************************************** +Errechnet die 3. Variante, mit abziehen des differenziellen Vorgängers +***************************************************************/ + +void differenziellerVorgaenger() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + // Variable für die errechnete Zahl + double x_pred = 0.0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + // Funktion fürs berechnen der Vorhersagezahl + for (int i = 1; i < x_count; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); + } + x_pred += _x[x_count - 1]; + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + + // Berechnung des Fehlers + x_error[x_count] = x_actual - x_pred; + + + //Console.WriteLine(String.Format("X_error: {0}", x_error)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error), + Encoding.UTF8); + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = 1; i < x_count; i++) + { + x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); + } + + //Console.WriteLine(String.Format("X_square: {0}", x_square)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + //File.AppendAllText("direkterVorgaenger.txt", + // String.Format("{0}. X_square {1}\n", x_count, x_square), + // Encoding.UTF8); + + // Funktion zum updaten der Gewichte + for (int i = 1; i < x_count; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers + double mittel = x_error.Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers + double varianz = 0.0; + foreach (double x_e in x_error) + { + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); } \ No newline at end of file From 4fd3b6e4145c8ef117ad854ee403f789f29c823d Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 12:31:10 +0200 Subject: [PATCH 2/8] updated Version --- bin/NLMSvariants.cs | 349 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 bin/NLMSvariants.cs diff --git a/bin/NLMSvariants.cs b/bin/NLMSvariants.cs new file mode 100644 index 0000000..17c9168 --- /dev/null +++ b/bin/NLMSvariants.cs @@ -0,0 +1,349 @@ + +// Variable mit der anzahl Punkten zwischen 0 - 255 +static int NumberOfSamples = 1000; + +// Variable zum tracken der Gewichte +const int tracking = 40; + +// C# only zum erstellen von Randomzahlen +static Random rnd = new Random(); + +// Array mit den Testwerten +static double[] _x = new double[M]; + +// Array mit den Gewichten +static double[,] w = new double[M, M]; + +// Lernrate +static double learnrate = 1; + +// Größe des Fensters +static int windowSize = 5; + +/************************************************************** +main() des Programms +***************************************************************/ + +int main(){ + + // Initialisierung des Test Array + Gewichte + for (int i = 0; i < M; i++) + { + _x[i] += ((255.0 / M) * i); + for (int k = 1; k < M; k++) + { + w[k, i] = rnd.NextDouble(); + //Console.WriteLine(String.Format("Weight: {0}", w[k, i])); + } + + } + + // Zum erstellen eines Files mit den Gewichten vor den Updates + for (int i = 0; i < tracking; i++) + { + for (int k = 1; k < tracking; k++) + { + File.AppendAllText("weights.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + } + + // Variante die Ausgeführt werden soll + lokalerMittelWert(); + + // Zum erstellen eines Files mit den Gewichten nach den Updates + for (int i = 0; i < tracking; i++) + { + for (int k = 1; k < tracking; k++) + { + File.AppendAllText("weights_after.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + + } + + +} + +/************************************************************** +Errechnet die 1. Variante, mit abziehen des lokalen Mittelwertes +***************************************************************/ + +void lokalerMittelWert() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + //Erstellt ein neues Array der letzten "windowSize" Werte + double[] x_part_Array = new double[x_count]; + //Anfang des Fensters das erstellt wird + int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; + //Länge des Fensters das erstellt wird + int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; + + Array.Copy(_x, _sourceIndex, x_part_Array, 0, _arrayLength); + double x_middle = (x_count > 0) ? (x_part_Array.Sum() / _arrayLength) : 0; + + // Variable für die errechnete Zahl + double x_pred = 0.0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - i] - x_middle)); + } + x_pred += x_middle; + + //Console.WriteLine(String.Format("X_sum: {0}", x_middle)); + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + x_error[x_count] = x_actual - x_pred; + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_square += Math.Pow(_x[x_count - i], 2); + } + + // Funktion zum updaten der Gewichte + for (int i = _sourceIndex; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * (_x[x_count - i] / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double varianz = 0.0; + foreach (double x_e in x_error) + { + if (!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); +} + +/************************************************************** +Errechnet die 2. Variante, mit abziehen des direkten Vorgängers +***************************************************************/ + +void direkterVorgaenger() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + // Variable für die errechnete Zahl + double x_pred = 0.0; + + //Anfang des Fensters das erstellt wird + int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; + + //Länge des Fensters das erstellt wird + int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + // Funktion fürs berechnen der Vorhersagezahl + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - 1] - _x[x_count - i - 1])); + } + x_pred += _x[x_count - 1]; + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + + // Berechnung des Fehlers + x_error[x_count] = x_actual - x_pred; + + + //Console.WriteLine(String.Format("X_error: {0}", x_error)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error), + Encoding.UTF8); + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_square += Math.Pow(_x[x_count - 1] - _x[x_count - i - 1], 2); + } + + //Console.WriteLine(String.Format("X_square: {0}", x_square)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + //File.AppendAllText("direkterVorgaenger.txt", + // String.Format("{0}. X_square {1}\n", x_count, x_square), + // Encoding.UTF8); + + // Funktion zum updaten der Gewichte + for (int i = _sourceIndex; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - 1] - _x[x_count - i - 1]) / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double varianz = 0.0; + foreach (double x_e in x_error) + { + if (!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); +} + +/************************************************************** +Errechnet die 3. Variante, mit abziehen des differenziellen Vorgängers +***************************************************************/ + +void differenziellerVorgaenger() +{ + //Array in dem e(n) gespeichert wird + double[] x_error = new double[M]; + + //Laufzeitvariable + int x_count = 0; + + // x_count + 1 da x_count > 0 sein muss + while (x_count + 1 < M) + { + // Variable für die errechnete Zahl + double x_pred = 0.0; + + // Anfang des Fensters das erstellt wird + int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; + + //Länge des Fensters das erstellt wird + int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; + + // Variable mit der eigentlichen Zahl + double x_actual = _x[x_count + 1]; + + // Funktion fürs berechnen der Vorhersagezahl + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); + } + x_pred += _x[x_count - 1]; + + //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + + // Berechnung des Fehlers + x_error[x_count] = x_actual - x_pred; + + + //Console.WriteLine(String.Format("X_error: {0}", x_error)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error), + Encoding.UTF8); + + // Funktion zum berechnen des Quadrates + double x_square = 0; + for (int i = _sourceIndex; i < _arrayLength; i++) + { + x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); + } + + //Console.WriteLine(String.Format("X_square: {0}", x_square)); + + // Hängt dem Angegebenen File den Vorgegebenen String an + //File.AppendAllText("direkterVorgaenger.txt", + // String.Format("{0}. X_square {1}\n", x_count, x_square), + // Encoding.UTF8); + + // Funktion zum updaten der Gewichte + for (int i = _sourceIndex; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); + } + + // Laufzeitvariable hochzählen + x_count += 1; + } + + // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + + // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array + double varianz = 0.0; + foreach (double x_e in x_error) + { + if (!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + // Hängt dem Angegebenen File den Vorgegebenen String an + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); +} \ No newline at end of file From 9a4bd421fc966304a6ff938483ee5cc588eb02c0 Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 12:35:20 +0200 Subject: [PATCH 3/8] remove NMLS_c_sharp_variante.cs --- bin/NMLS_c_sharp_variante.cs | 326 ----------------------------------- 1 file changed, 326 deletions(-) delete mode 100644 bin/NMLS_c_sharp_variante.cs diff --git a/bin/NMLS_c_sharp_variante.cs b/bin/NMLS_c_sharp_variante.cs deleted file mode 100644 index 865d68a..0000000 --- a/bin/NMLS_c_sharp_variante.cs +++ /dev/null @@ -1,326 +0,0 @@ - -// Variable mit der anzahl Punkten zwischen 0 - 255 -static int M = 1000; - -// Variable zum tracken der Gewichte -const int tracking = 40; - -// C# only zum erstellen von Randomzahlen -static Random rnd = new Random(); - -// Array mit den Testwerten -static double[] _x = new double[M]; - -// Array mit den Gewichten -static double[,] w = new double[M, M]; - -// Lernrate -static double learnrate = 1; - -/************************************************************** -main() des Programms -***************************************************************/ - -int main(){ - - // Initialisierung des Test Array + Gewichte - for (int i = 0; i < M; i++) - { - _x[i] += ((255.0 / M) * i); - for (int k = 1; k < M; k++) - { - w[k, i] = rnd.NextDouble(); - //Console.WriteLine(String.Format("Weight: {0}", w[k, i])); - } - - } - - // Zum erstellen eines Files mit den Gewichten vor den Updates - for (int i = 0; i < tracking; i++) - { - for (int k = 1; k < tracking; k++) - { - File.AppendAllText("weights.txt", - String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), - Encoding.UTF8); - } - } - - // Variante die Ausgeführt werden soll - lokalerMittelWert(); - - // Zum erstellen eines Files mit den Gewichten nach den Updates - for (int i = 0; i < tracking; i++) - { - for (int k = 1; k < tracking; k++) - { - File.AppendAllText("weights_after.txt", - String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), - Encoding.UTF8); - } - - } - - -} - -/************************************************************** -Errechnet die 1. Variante, mit abziehen des lokalen Mittelwertes -***************************************************************/ - -void lokalerMittelWert() -{ - //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) - { - //Erstellt ein neues Array mit allen werten bis zur Laufzeitvariable - double[] x_part_Array = new double[x_count]; - Array.Copy(_x, 0, x_part_Array, 0, x_count); - double x_middle = (x_count > 0) ? ( x_part_Array.Sum() / x_count) : 0; - - // Variable für die errechnete Zahl - double x_pred = 0.0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - for (int i = 1; i < x_count; i++) - { - x_pred += (w[i, x_count] * (_x[x_count - i] - x_middle)); - } - x_pred += x_middle; - - //Console.WriteLine(String.Format("X_sum: {0}", x_middle)); - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - x_error[x_count] = x_actual - x_pred; - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = 1; i <= x_count; i++) - { - x_square += Math.Pow(_x[x_count - i], 2); - } - - // Funktion zum updaten der Gewichte - for (int i = 1; i < x_count; i++) - { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * (_x[x_count - i] / x_square); - } - - // Laufzeitvariable hochzählen - x_count += 1; - } - - // Berechenen des mittleren Fehlers - double mittel = x_error.Sum() / x_error.Length; - - // Berechenen der varianz des Fehlers - double varianz = 0.0; - foreach (double x_e in x_error) - { - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} - -/************************************************************** -Errechnet die 2. Variante, mit abziehen des direkten Vorgängers -***************************************************************/ - -void direkterVorgaenger() -{ - //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) - { - // Variable für die errechnete Zahl - double x_pred = 0.0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - // Funktion fürs berechnen der Vorhersagezahl - for (int i = 1; i < x_count; i++) - { - x_pred += (w[i, x_count] * (_x[x_count - 1] - _x[x_count - i - 1])); - } - x_pred += _x[x_count - 1]; - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_pred {1}\n", x_count, x_pred), - Encoding.UTF8); - - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_actual {1}\n", x_count, x_actual), - Encoding.UTF8); - - // Berechnung des Fehlers - x_error[x_count] = x_actual - x_pred; - - - //Console.WriteLine(String.Format("X_error: {0}", x_error)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_error {1}\n\n", x_count, x_error), - Encoding.UTF8); - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = 1; i < x_count; i++) - { - x_square += Math.Pow(_x[x_count - 1] - _x[x_count - i - 1], 2); - } - - //Console.WriteLine(String.Format("X_square: {0}", x_square)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - //File.AppendAllText("direkterVorgaenger.txt", - // String.Format("{0}. X_square {1}\n", x_count, x_square), - // Encoding.UTF8); - - // Funktion zum updaten der Gewichte - for (int i = 1; i < x_count; i++) - { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - 1] - _x[x_count - i - 1]) / x_square); - } - - // Laufzeitvariable hochzählen - x_count += 1; - } - - // Berechenen des mittleren Fehlers - double mittel = x_error.Sum() / x_error.Length; - - // Berechenen der varianz des Fehlers - double varianz = 0.0; - foreach (double x_e in x_error) - { - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} - -/************************************************************** -Errechnet die 3. Variante, mit abziehen des differenziellen Vorgängers -***************************************************************/ - -void differenziellerVorgaenger() -{ - //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) - { - // Variable für die errechnete Zahl - double x_pred = 0.0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - // Funktion fürs berechnen der Vorhersagezahl - for (int i = 1; i < x_count; i++) - { - x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); - } - x_pred += _x[x_count - 1]; - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_pred {1}\n", x_count, x_pred), - Encoding.UTF8); - - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_actual {1}\n", x_count, x_actual), - Encoding.UTF8); - - // Berechnung des Fehlers - x_error[x_count] = x_actual - x_pred; - - - //Console.WriteLine(String.Format("X_error: {0}", x_error)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_error {1}\n\n", x_count, x_error), - Encoding.UTF8); - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = 1; i < x_count; i++) - { - x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); - } - - //Console.WriteLine(String.Format("X_square: {0}", x_square)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - //File.AppendAllText("direkterVorgaenger.txt", - // String.Format("{0}. X_square {1}\n", x_count, x_square), - // Encoding.UTF8); - - // Funktion zum updaten der Gewichte - for (int i = 1; i < x_count; i++) - { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); - } - - // Laufzeitvariable hochzählen - x_count += 1; - } - - // Berechenen des mittleren Fehlers - double mittel = x_error.Sum() / x_error.Length; - - // Berechenen der varianz des Fehlers - double varianz = 0.0; - foreach (double x_e in x_error) - { - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} \ No newline at end of file From 14d6bbc2f6e6538f7c417c404fc889b8d9a6f73c Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 12:39:46 +0200 Subject: [PATCH 4/8] Rename NLMS_with_UI.exe --- bin/NLMS_with_UI.exe | Bin 0 -> 17920 bytes bin/NMLS_Graphisch.exe | Bin 16896 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/NLMS_with_UI.exe delete mode 100644 bin/NMLS_Graphisch.exe diff --git a/bin/NLMS_with_UI.exe b/bin/NLMS_with_UI.exe new file mode 100644 index 0000000000000000000000000000000000000000..59e4adbd3864bd54b2a6a9ac151b122e6ad723b4 GIT binary patch literal 17920 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 TkmUKdt5<7U#XmXi5Wa&XURvS{VZ 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 From a3dd80af5bac283866717066597f8ce4318966b7 Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 13:09:33 +0200 Subject: [PATCH 5/8] update --- bin/NLMSvariants.cs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/bin/NLMSvariants.cs b/bin/NLMSvariants.cs index 17c9168..1c5beef 100644 --- a/bin/NLMSvariants.cs +++ b/bin/NLMSvariants.cs @@ -9,10 +9,10 @@ const int tracking = 40; static Random rnd = new Random(); // Array mit den Testwerten -static double[] _x = new double[M]; +static double[] _x = new double[NumberOfSamples]; // Array mit den Gewichten -static double[,] w = new double[M, M]; +static double[,] w = new double[NumberOfSamples, NumberOfSamples]; // Lernrate static double learnrate = 1; @@ -27,10 +27,10 @@ main() des Programms int main(){ // Initialisierung des Test Array + Gewichte - for (int i = 0; i < M; i++) + for (int i = 0; i < NumberOfSamples; i++) { - _x[i] += ((255.0 / M) * i); - for (int k = 1; k < M; k++) + _x[i] += ((255.0 / NumberOfSamples) * i); + for (int k = 0; k < windowSize; k++) { w[k, i] = rnd.NextDouble(); //Console.WriteLine(String.Format("Weight: {0}", w[k, i])); @@ -41,7 +41,7 @@ int main(){ // Zum erstellen eines Files mit den Gewichten vor den Updates for (int i = 0; i < tracking; i++) { - for (int k = 1; k < tracking; k++) + for (int k = 0; k < windowSize; k++) { File.AppendAllText("weights.txt", String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), @@ -55,7 +55,7 @@ int main(){ // Zum erstellen eines Files mit den Gewichten nach den Updates for (int i = 0; i < tracking; i++) { - for (int k = 1; k < tracking; k++) + for (int k = 0; k < windowSize; k++) { File.AppendAllText("weights_after.txt", String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), @@ -74,18 +74,20 @@ Errechnet die 1. Variante, mit abziehen des lokalen Mittelwertes void lokalerMittelWert() { //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; + double[] x_error = new double[NumberOfSamples]; //Laufzeitvariable int x_count = 0; // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) + while (x_count + 1 < NumberOfSamples) { //Erstellt ein neues Array der letzten "windowSize" Werte double[] x_part_Array = new double[x_count]; + //Anfang des Fensters das erstellt wird int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; + //Länge des Fensters das erstellt wird int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; @@ -153,13 +155,13 @@ Errechnet die 2. Variante, mit abziehen des direkten Vorgängers void direkterVorgaenger() { //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; + double[] x_error = new double[NumberOfSamples]; //Laufzeitvariable int x_count = 0; // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) + while (x_count + 1 < NumberOfSamples) { // Variable für die errechnete Zahl double x_pred = 0.0; @@ -254,13 +256,13 @@ Errechnet die 3. Variante, mit abziehen des differenziellen Vorgängers void differenziellerVorgaenger() { //Array in dem e(n) gespeichert wird - double[] x_error = new double[M]; + double[] x_error = new double[NumberOfSamples]; //Laufzeitvariable int x_count = 0; // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < M) + while (x_count + 1 < NumberOfSamples) { // Variable für die errechnete Zahl double x_pred = 0.0; From 5804a2cfdb468968d795074b26435b796b9a106a Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 14:23:00 +0200 Subject: [PATCH 6/8] updated html and template --- bin/graphResults.html | 3049 ++++++++++++++++++++++++++++++++++++++++- bin/template.svg | 5 +- 2 files changed, 3046 insertions(+), 8 deletions(-) diff --git a/bin/graphResults.html b/bin/graphResults.html index e458220..0750327 100644 --- a/bin/graphResults.html +++ b/bin/graphResults.html @@ -3,12 +3,3053 @@ NLMSvariants | Graphical Output || - Eingangswert | - direkter Vorgaenger | - letzter Mittelwert + Eingangswert | + direkter Vorgaenger | + letzter Mittelwert + - + + NLMSvariants output graph + + + + + + + + + + + + + + + + + + + + + + + - + + + - + - - + + diff --git a/bin/template.svg b/bin/template.svg index 4288f37..6d7b086 100644 --- a/bin/template.svg +++ b/bin/template.svg @@ -1,6 +1,3 @@ - - NLMSvariants output graph @@ -22,7 +19,7 @@ + " fill="none" stroke="red" stroke-width="0.4px" onclick="clicksvg(this)"/> + + - + + - From 0aa4bc05293242c5138fce2f05f8013c2df33290 Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Wed, 9 May 2018 16:44:11 +0200 Subject: [PATCH 7/8] update --- bin/NLMS_with_UI.exe | Bin 17920 -> 17920 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/NLMS_with_UI.exe b/bin/NLMS_with_UI.exe index 59e4adbd3864bd54b2a6a9ac151b122e6ad723b4..8f93a3ce710a90473d7883e16397445581c2db4f 100644 GIT binary patch delta 2220 zcmb`JYitx%6vxlG(|PR7Zo7Af?zXg*zUYH(X^T*_ElPPPSO||2+!hi71hJ7Kgb0b$ zZkwhAZGqNH5Cj!aq9~QeMgfCH9tO~0ee+5{Vhl8j6-fv}D4w}nP{61koDaXf|8ws- zbI*Tg?@mK2Hnd{fa^-j9a(hb(zTLj{aSRE>Y&EqCAX#8po~XiX+#wnA zpn`WOz{XSnB<%*!c8D}qfkM=>4aNfSyMr^pFSt^XQttwY>4~vbuI9f3Mj+%i`sI+; zxR$?0ELLV=wm7MDxaz=fdxABTwJN4E=T=r6kIR1pxF-;@J=`M`z1*AM0t3J zQFL3mmFt~WqN#<7e!GZm25fgQ2wbbzs1xqibNT_8T-O6t>xkT4MT4s9kgWlC(>~qY z%}r{M_AAOvd{c)7MoyrG3%TcRSDT zv0i-c8LT?S_Xs_9#Q*NQ7WG|Rh+U1Y$a8Vs?(h~isbQ|Vg>m@QdW(1rw-Z-b5n_wA zn|PglO#Dhl9-x&7bIpUq-Ef$=9X=x-fllIP_?mcLjz5CqG(Ib5FA+KD`f1_^?0e#I z{E-y{!!955)7fy5m?b$5E{Yq;iQy}hY{)0Q5wffsOo8cH&O_e_a|}nd=0??2srKbX z)l$4db8GXXszAHKR4@ic)i6>zv=%t(5Zx;tTyRLLM$jyceg{W}ICJd@-x}p%X2Jk^ z$Vq~&my;STRZ~Kz;Vhjfl`uvaiekdrUbUIINNw*`@3J^jd!$-p>^1$01)WkYlT|D@ zA(gx#v*4G%sG$~IyJM+B=O{oESdc_zZmB|2?%QfABtdX`w&ODM8}V@J z_;45Q#OcgShxjV|5H>-N@hc9N|hVj7JP3%MKlht^rq1nEfY$2OqrV`I%Hfw}jSuVpI z$Qo(WgDJ8MJ)$5jBV5j&XP=m(i9X{oc2pYC&dOLdYiDPy+3Z2=G-_BCQG>1QJ*;B} z7_gD$!g}~JW*|9SqznWbN{C5NMa+O%#2_pt-Y;1Sbu=C+;}y_C<4PHy28+WaX2Uk( zQ}7*e5&WQxm8F}Y1&U*uKtK_3De?7Qw!o5@gL2$}O%%_DgHVlOY(;^m@C;6*wwJIN z`k|6 zQapyQ)>rHCcv3tb7MWMPKoO#3uUK8OFYl^xS-v1Js+mk%E2CG4vQmJ_m7^->kA3F1 zixc;j$ F{SPJvtiu2R delta 2276 zcmbtWYiv|i5T2R4_p$fxE+G3$VL7^ZiRzxJhK8U6w;3HK)62J=E zrrJOX!g|n1BoQ#8C{$rl(Wr@1wHTF0Krj>ui4nmFVoYj8(Ya>}NF)*C`SIQP=FFLy zbH8&RO{=hJ6|P;O-M;VVL|Z@nDzWu0d_p4T>9^GYWXS{N1+oV7uuC>$JbQO7s8PvC zpu^ZQfQh;Ztw}S9FUlxK#%A zN=%nC^}KMvh!ks)m}W$4V)}AFfKRT`r;;$`as3DHvey{yU4A!~<5AgYo-{axA4bV~ ztCBR5uUSLmJH4%#YO$BgOqn&V-Q&~E%gJ3w*xYXngt6SW|rFXjfS-2e!|w@mQx>V-v^>)EawtAJFit{JVqWT~c?o7{n6 zuCKk4+EuAVpsuz$zr@=Y2$z$(!c|Foi{5g+U23F@^f71tkgwVkav~8o8Y>eK5nbbhiPs~9a8tRj zR>B4QpGv$KEY&?FPRXud#s3n*ObG$)&Y-Ric-(Xzr z>|$(lb~9d}4;c?C&nS*Wm}hq|z73s>ufykzov@#AGaO<(rR)#jDBCC0?0H53rrE{# zE}djNg5S|dAUqSM2)|;^G7eFA8=RE~vNGe{yx6DCelrYlE|LbbhIo%bGt99(wsB~R z%~b6Bf)s1SZl3EXOtB)Pn{+50mSW?WnXtRaV;%4#rGp=SQmh#ahYth%GQyinWE{3C z;$*{2KH^NlH7l4cP^=|mpXG%|CeyuN<0Z(pXc#c z{S`!-LzCb%d(yy9QKKFGw83u2)3DaqiRWQ3zJoiU*nS@ct-(FmnpYe!dkT5+B{awcDj_fCYq$kH{D^V7n%xAhZu0C} z2cd)-oHRzyQ$tBB9qKuzgfmnbAv%pOU^)o;6Vo|9OHYRfc((5#T0qn6Y{pZVPt7n? zrOUO8sF|A{!JbwONi91!UO_AAV|y}V*s7wv>P94JEY(qhzH#oO(YVigkZKqW*h+8W zGP1yeO*9mqhl9Rhe20f?!@z}d#=cO?m_f>yX8+z<=~`vrq!C2t-%UrW9*dJz`z&xiW4AkLe`@B91t*W> zpV{(OXiEG3JMW&*@!8bm9px5=xApvpc%6LW*#i^V5!{_@9$Sye&`rPTbaYHoOge{& GV)HMtPOYZ^ From be5a61ac0adabe526aa370c9d6d9510724551c18 Mon Sep 17 00:00:00 2001 From: kbecke23 Date: Fri, 11 May 2018 10:56:56 +0200 Subject: [PATCH 8/8] update mit Graphischem Zeug --- bin/NLMSvariants.cs | 771 +++++++++++++++++++++++++------------------- 1 file changed, 433 insertions(+), 338 deletions(-) diff --git a/bin/NLMSvariants.cs b/bin/NLMSvariants.cs index 1c5beef..0710d17 100644 --- a/bin/NLMSvariants.cs +++ b/bin/NLMSvariants.cs @@ -1,351 +1,446 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; -// Variable mit der anzahl Punkten zwischen 0 - 255 -static int NumberOfSamples = 1000; - -// Variable zum tracken der Gewichte -const int tracking = 40; - -// C# only zum erstellen von Randomzahlen -static Random rnd = new Random(); - -// Array mit den Testwerten -static double[] _x = new double[NumberOfSamples]; - -// Array mit den Gewichten -static double[,] w = new double[NumberOfSamples, NumberOfSamples]; - -// Lernrate -static double learnrate = 1; - -// Größe des Fensters -static int windowSize = 5; - -/************************************************************** -main() des Programms -***************************************************************/ - -int main(){ - - // Initialisierung des Test Array + Gewichte - for (int i = 0; i < NumberOfSamples; i++) - { - _x[i] += ((255.0 / NumberOfSamples) * i); - for (int k = 0; k < windowSize; k++) - { - w[k, i] = rnd.NextDouble(); - //Console.WriteLine(String.Format("Weight: {0}", w[k, i])); - } - - } - - // Zum erstellen eines Files mit den Gewichten vor den Updates - for (int i = 0; i < tracking; i++) - { - for (int k = 0; k < windowSize; k++) - { - File.AppendAllText("weights.txt", - String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), - Encoding.UTF8); - } - } - - // Variante die Ausgeführt werden soll - lokalerMittelWert(); - - // Zum erstellen eines Files mit den Gewichten nach den Updates - for (int i = 0; i < tracking; i++) - { - for (int k = 0; k < windowSize; k++) - { - File.AppendAllText("weights_after.txt", - String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), - Encoding.UTF8); - } - - } - - -} - -/************************************************************** -Errechnet die 1. Variante, mit abziehen des lokalen Mittelwertes -***************************************************************/ - -void lokalerMittelWert() +namespace NMLS_Graphisch { - //Array in dem e(n) gespeichert wird - double[] x_error = new double[NumberOfSamples]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < NumberOfSamples) - { - //Erstellt ein neues Array der letzten "windowSize" Werte - double[] x_part_Array = new double[x_count]; - - //Anfang des Fensters das erstellt wird - int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; - - //Länge des Fensters das erstellt wird - int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; - - Array.Copy(_x, _sourceIndex, x_part_Array, 0, _arrayLength); - double x_middle = (x_count > 0) ? (x_part_Array.Sum() / _arrayLength) : 0; - - // Variable für die errechnete Zahl - double x_pred = 0.0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - for (int i = _sourceIndex; i < _arrayLength; i++) - { - x_pred += (w[i, x_count] * (_x[x_count - i] - x_middle)); - } - x_pred += x_middle; - - //Console.WriteLine(String.Format("X_sum: {0}", x_middle)); - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - x_error[x_count] = x_actual - x_pred; - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = _sourceIndex; i < _arrayLength; i++) - { - x_square += Math.Pow(_x[x_count - i], 2); - } - - // Funktion zum updaten der Gewichte - for (int i = _sourceIndex; i < _arrayLength; i++) - { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * (_x[x_count - i] / x_square); - } - - // Laufzeitvariable hochzählen - x_count += 1; - } - - // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; - - // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double varianz = 0.0; - foreach (double x_e in x_error) - { - if (!double.IsNaN(x_e)) - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} - -/************************************************************** -Errechnet die 2. Variante, mit abziehen des direkten Vorgängers -***************************************************************/ - -void direkterVorgaenger() -{ - //Array in dem e(n) gespeichert wird - double[] x_error = new double[NumberOfSamples]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < NumberOfSamples) - { - // Variable für die errechnete Zahl - double x_pred = 0.0; - - //Anfang des Fensters das erstellt wird - int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; - - //Länge des Fensters das erstellt wird - int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - // Funktion fürs berechnen der Vorhersagezahl - for (int i = _sourceIndex; i < _arrayLength; i++) - { - x_pred += (w[i, x_count] * (_x[x_count - 1] - _x[x_count - i - 1])); - } - x_pred += _x[x_count - 1]; - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_pred {1}\n", x_count, x_pred), - Encoding.UTF8); - - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_actual {1}\n", x_count, x_actual), - Encoding.UTF8); - - // Berechnung des Fehlers - x_error[x_count] = x_actual - x_pred; - - - //Console.WriteLine(String.Format("X_error: {0}", x_error)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("direkterVorgaenger.txt", - String.Format("{0}. X_error {1}\n\n", x_count, x_error), - Encoding.UTF8); - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = _sourceIndex; i < _arrayLength; i++) - { - x_square += Math.Pow(_x[x_count - 1] - _x[x_count - i - 1], 2); - } - - //Console.WriteLine(String.Format("X_square: {0}", x_square)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - //File.AppendAllText("direkterVorgaenger.txt", - // String.Format("{0}. X_square {1}\n", x_count, x_square), - // Encoding.UTF8); - - // Funktion zum updaten der Gewichte - for (int i = _sourceIndex; i < _arrayLength; i++) - { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - 1] - _x[x_count - i - 1]) / x_square); - } - - // Laufzeitvariable hochzählen - x_count += 1; - } - - // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; - - // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double varianz = 0.0; - foreach (double x_e in x_error) + public partial class Form1 : Form { - if (!double.IsNaN(x_e)) - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} - -/************************************************************** -Errechnet die 3. Variante, mit abziehen des differenziellen Vorgängers -***************************************************************/ - -void differenziellerVorgaenger() -{ - //Array in dem e(n) gespeichert wird - double[] x_error = new double[NumberOfSamples]; - - //Laufzeitvariable - int x_count = 0; - - // x_count + 1 da x_count > 0 sein muss - while (x_count + 1 < NumberOfSamples) - { - // Variable für die errechnete Zahl - double x_pred = 0.0; - - // Anfang des Fensters das erstellt wird - int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; - - //Länge des Fensters das erstellt wird - int _arrayLength = (x_count > windowSize) ? windowSize : (x_count > 0) ? x_count - 1 : 0; - - // Variable mit der eigentlichen Zahl - double x_actual = _x[x_count + 1]; - - // Funktion fürs berechnen der Vorhersagezahl - for (int i = _sourceIndex; i < _arrayLength; i++) + public Form1() { - x_pred += (w[i, x_count] * (_x[x_count - i] - _x[x_count - i - 1])); - } - x_pred += _x[x_count - 1]; - - //Console.WriteLine(String.Format("X_pred: {0}", x_pred)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_pred {1}\n", x_count, x_pred), - Encoding.UTF8); - - //Console.WriteLine(String.Format("X_actual: {0}", x_actual)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_actual {1}\n", x_count, x_actual), - Encoding.UTF8); - - // Berechnung des Fehlers - x_error[x_count] = x_actual - x_pred; - - - //Console.WriteLine(String.Format("X_error: {0}", x_error)); - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("differenziellerVorgaenger.txt", - String.Format("{0}. X_error {1}\n\n", x_count, x_error), - Encoding.UTF8); - - // Funktion zum berechnen des Quadrates - double x_square = 0; - for (int i = _sourceIndex; i < _arrayLength; i++) - { - x_square += Math.Pow(_x[x_count - i] - _x[x_count - i - 1], 2); + InitializeComponent(); } - //Console.WriteLine(String.Format("X_square: {0}", x_square)); + static int NumberOfSamples = 1000; + const int tracking = 40; + static Stack x = new Stack(); + static Random rnd = new Random(); + static double[] _x = new double[NumberOfSamples]; + static double[,] w = new double[NumberOfSamples, NumberOfSamples]; + static double learnrate = 0.2; + static double[] pixel_array; + static int windowSize = 5; - // Hängt dem Angegebenen File den Vorgegebenen String an - //File.AppendAllText("direkterVorgaenger.txt", - // String.Format("{0}. X_square {1}\n", x_count, x_square), - // Encoding.UTF8); - - // Funktion zum updaten der Gewichte - for (int i = _sourceIndex; i < _arrayLength; i++) + private void button1_Click(object sender, EventArgs e) { - w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((_x[x_count - i] - _x[x_count - i - 1]) / x_square); + + NumberOfSamples = Int32.Parse(comboBox2.SelectedItem.ToString()); + chart1.ChartAreas[0].AxisX.Maximum = NumberOfSamples; + chart1.ChartAreas[0].AxisY.Maximum = 300; + chart1.ChartAreas[0].AxisY.Minimum = -5; + + if (checkBox1.Checked) + { + for (int i = 0; i < tracking; i++) + { + for (int k = 0; k < windowSize; k++) + { + File.AppendAllText("weights.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + } + } + + Series[] series = new Series[2]; + switch (comboBox1.SelectedItem.ToString()) + { + + case "lokaler Mittelwert": + series = lokalerMittelWert(); + break; + + case "direkter Vorgänger": + series = direkterVorgaenger(); + break; + + case "differenzieller Vorgänger": + series = diffVorgaenger(); + break; + + default: + return; + + } + + foreach (Series s in series) + { + if (chart1.Series.IndexOf(s.Name) < 0) + { + chart1.Series.Add(s); + } + else + { + chart1.Series.RemoveAt(chart1.Series.IndexOf(s.Name)); + chart1.Series.Add(s); + } + } + + if (checkBox1.Checked) + { + for (int i = 0; i < tracking; i++) + { + for (int k = 0; k < windowSize; k++) + { + File.AppendAllText("weights_after.txt", + String.Format("[{0}][{1}] {2}\n", k, i, Math.Round(w[k, i], 2).ToString()), + Encoding.UTF8); + } + + } + } + + } - // Laufzeitvariable hochzählen - x_count += 1; + Series[] lokalerMittelWert() + { + int x_count = 0; + double[] x_error = new double[NumberOfSamples]; + x_error[0] = 0; + + //Graphischer Stuff + Series lokal_M_error = new Series("Lokaler Mittelwert Error"); + Series lokal_M_predic = new Series("Lokaler Mittelwert Prediction"); + lokal_M_error.ChartType = SeriesChartType.Spline; + lokal_M_predic.ChartType = SeriesChartType.Spline; + + while (x_count + 1 < NumberOfSamples) + { + double[] x_part_Array = new double[x_count]; + + int _sourceIndex = (x_count > windowSize) ? x_count - windowSize : 0; + int _arrayLength = (x_count > windowSize) ? windowSize + 1 : (x_count > 0) ? x_count : 0; + + Array.Copy(_x, _sourceIndex, x_part_Array, 0, _arrayLength); + double x_middle = (x_count > 0) ? ( x_part_Array.Sum() / _arrayLength) : 0; + double x_pred = 0.0; + double[] x_array = _x; + double x_actual = _x[x_count + 1]; + + for (int i = 1; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (x_array[x_count - i] - x_middle)); + } + x_pred += x_middle; + + // Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("lokalerMittelwert.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + File.AppendAllText("lokalerMittelwert.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + } + + x_error[x_count] = x_actual - x_pred; + double x_square = 0; + + //Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("lokalerMittelwert.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error[x_count]), + Encoding.UTF8); + } + + for (int i = 1; i < _arrayLength; i++) + { + x_square += Math.Pow(x_array[x_count - i] - x_middle, 2); + } + + for (int i = 1; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((x_array[x_count - i] - x_middle) / x_square); + } + + // Graphischer Stuff + lokal_M_error.Points.AddXY(x_count, x_error[x_count]); + lokal_M_predic.Points.AddXY(x_count, x_pred); + + x_count += 1; + } + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + double varianz = 0.0; + foreach (double x_e in x_error) + { + if(!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + if (checkBox1.Checked) + { + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); + } + return new Series[] { lokal_M_predic, lokal_M_error }; + } + + Series[] direkterVorgaenger() + { + double[] x_error = new double[NumberOfSamples]; + x_error[0] = 0; + int x_count = 0; + + // Graphischer Stuff + Series direkterVorgaenger_error = new Series("Direkter Vorgänger Error"); + Series direkterVorgaenger_predic = new Series("Direkter Vorgänger Prediction"); + direkterVorgaenger_error.ChartType = SeriesChartType.Spline; + direkterVorgaenger_predic.ChartType = SeriesChartType.Spline; + + while (x_count + 1 < NumberOfSamples) + { + double x_pred = 0.0; + double[] x_array = _x; + double x_actual = _x[x_count + 1]; + + if (x_count > 0) + { + int _arrayLength = (x_count > windowSize) ? windowSize + 1 : x_count; + + for (int i = 1; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (x_array[x_count - 1] - x_array[x_count - i - 1])); + } + x_pred += x_array[x_count - 1]; + + // Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + } + + + x_error[x_count] = x_actual - x_pred; + + // Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("direkterVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error[x_count]), + Encoding.UTF8); + } + + double x_square = 0; + for (int i = 1; i < _arrayLength; i++) + { + x_square += Math.Pow(x_array[x_count - 1] - x_array[x_count - i - 1], 2); + } + + for (int i = 1; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((x_array[x_count - 1] - x_array[x_count - i - 1]) / x_square); + } + } + + //Graphischer Stuff + direkterVorgaenger_error.Points.AddXY(x_count, x_error[x_count]); + direkterVorgaenger_predic.Points.AddXY(x_count, x_pred); + + x_count += 1; + } + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + double varianz = 0.0; + foreach (double x_e in x_error) + { + if (!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + if (checkBox1.Checked) + { + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); + } + + return new Series[] { direkterVorgaenger_error, direkterVorgaenger_predic }; + } + + Series[] diffVorgaenger() + { + double[] x_error = new double[NumberOfSamples]; + x_error[0] = 0; + int x_count = 1; + + //Graphischer Stuff + Series diffVorgaenger_error = new Series("Differenzieller Vorgänger Error"); + Series diffVorgaenger_predic = new Series("Differenzieller Vorgänger Prediction"); + diffVorgaenger_error.ChartType = SeriesChartType.Spline; + diffVorgaenger_predic.ChartType = SeriesChartType.Spline; + + while (x_count + 1 < NumberOfSamples) + { + double x_pred = 0.0; + double[] x_array = _x; + double x_actual = _x[x_count + 1]; + if (x_count > 0) + { + int _arrayLength = (x_count > windowSize) ? windowSize + 1 : x_count; + + for (int i = 1; i < _arrayLength; i++) + { + x_pred += (w[i, x_count] * (x_array[x_count - i] - x_array[x_count - i - 1])); + } + x_pred += x_array[x_count - 1]; + + // Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_pred {1}\n", x_count, x_pred), + Encoding.UTF8); + + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_actual {1}\n", x_count, x_actual), + Encoding.UTF8); + } + + + x_error[x_count] = x_actual - x_pred; + + // Output Stuff + if (checkBox1.Checked) + { + File.AppendAllText("differenziellerVorgaenger.txt", + String.Format("{0}. X_error {1}\n\n", x_count, x_error[x_count]), + Encoding.UTF8); + } + + + double x_square = 0; + for (int i = 1; i < _arrayLength; i++) + { + x_square += Math.Pow(x_array[x_count - i] - x_array[x_count - i - 1], 2); + } + + for (int i = 1; i < _arrayLength; i++) + { + w[i, x_count + 1] = w[i, x_count] + learnrate * x_error[x_count] * ((x_array[x_count - i] - x_array[x_count - i - 1]) / x_square); + } + + } + + //Graphischer Stuff + diffVorgaenger_error.Points.AddXY(x_count, x_error[x_count]); + diffVorgaenger_predic.Points.AddXY(x_count, x_pred); + + x_count += 1; + } + double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; + double varianz = 0.0; + foreach (double x_e in x_error) + { + if (!double.IsNaN(x_e)) + varianz += Math.Pow(x_e - mittel, 2); + } + varianz /= x_error.Length; + + if (checkBox1.Checked) + { + File.AppendAllText("ergebnisse.txt", + String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), + Encoding.UTF8); + } + + return new Series[] { diffVorgaenger_error, diffVorgaenger_predic }; + } + + // Inizialisierung von Arrays + private void Form1_Load(object sender, EventArgs e) + { + comboBox1.SelectedIndex = 0; + comboBox2.SelectedIndex = 0; + chart1.Series.Clear(); + Series x_actual = new Series("Actual x Value"); + x_actual.ChartType = SeriesChartType.Spline; + for (int i = 0; i < NumberOfSamples; i++) + { + _x[i] += ((255.0 / NumberOfSamples) * i); + for (int k = 0; k < windowSize; k++) + { + w[k, i] = rnd.NextDouble(); + //Console.WriteLine(String.Format("Weight[{0}, {1}]: {2}",k,i, w[k, i])); + } + x_actual.Points.AddXY(i, _x[i]); + } + chart1.Series.Add(x_actual); + } + + // Graphen Clearen + private void button2_Click(object sender, EventArgs e) + { + chart1.Series.Clear(); + Series x_actual = new Series("Actual x Value"); + x_actual.ChartType = SeriesChartType.Spline; + for (int i = 0; i < NumberOfSamples; i++) + { + x_actual.Points.AddXY(i, _x[i]); + } + chart1.Series.Add(x_actual); + } + + // Bild Laden + private void button3_Click(object sender, EventArgs e) + { + + OpenFileDialog openFileDialog = new OpenFileDialog(); + + if(openFileDialog.ShowDialog() == DialogResult.OK) + { + try + { + Bitmap img = new Bitmap(openFileDialog.FileName); + pixel_array = new double[img.Width * img.Height]; + + for (int i = 1; i < img.Width; i++) + { + for (int j = 1; j < img.Height; j++) + { + + Color pixel = img.GetPixel(i, j); + pixel_array[j*i] = pixel.R; + + } + } + NumberOfSamples = (img.Width * img.Height) / 2; + comboBox2.Items.Add(NumberOfSamples); + _x = pixel_array; + w = new double[NumberOfSamples, NumberOfSamples]; + for (int i = 0; i < NumberOfSamples; i++) + { + for (int k = 1; k < NumberOfSamples; k++) + { + w[k, i] = rnd.NextDouble(); + } + } + } + catch(Exception exep) + { + MessageBox.Show("Konnte Bild nicht laden."); + MessageBox.Show(String.Format("{0}", exep.ToString())); + } + } + } } - // Berechenen des mittleren Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double mittel = x_error.Where(d => !double.IsNaN(d)).Sum() / x_error.Length; +} - // Berechenen der varianz des Fehlers und aussortieren potenzieller NaN Werte im Fehler Array - double varianz = 0.0; - foreach (double x_e in x_error) - { - if (!double.IsNaN(x_e)) - varianz += Math.Pow(x_e - mittel, 2); - } - varianz /= x_error.Length; - - // Hängt dem Angegebenen File den Vorgegebenen String an - File.AppendAllText("ergebnisse.txt", - String.Format("Quadratische Varianz(x_error): {0}\n Mittelwert(x_error): {1}\n\n", varianz, mittel), - Encoding.UTF8); -} \ No newline at end of file