Modellierung und Simulation - Programmstrukturen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 7: Zeile 7:
| '''Feedback:''' || [https://app.wooclap.com/ wooclap Ereigniscode]: JNLXEK
| '''Feedback:''' || [https://app.wooclap.com/ wooclap Ereigniscode]: JNLXEK
|}
|}
== Aufgabe 5.1 - Programmiergrundlagen - Schleifen und Bedingungen ==
= Aufgabe 5.1 - Programmiergrundlagen - Schleifen und Bedingungen =
# Schreiben Sie ein MATLAB<sup>®</sup>-Skript, das mit Hilfe einer <code>for</code> -Schleife die Summe der Zahlen von 1 bis 100000 berechnet (z.&thinsp;B. <code>n=n+1</code>).
# Schreiben Sie ein MATLAB<sup>®</sup>-Skript, das mit Hilfe einer <code>for</code> -Schleife die Summe der Zahlen von 1 bis 100000 berechnet (z.&thinsp;B. <code>n=n+1</code>).
# Schreiben Sie ein MATLAB<sup>®</sup>-Skript, das mit Hilfe einer <code>while</code>-Schleife die Summe die Zahlen von 1 bis 100000 berechnet.
# Schreiben Sie ein MATLAB<sup>®</sup>-Skript, das mit Hilfe einer <code>while</code>-Schleife die Summe die Zahlen von 1 bis 100000 berechnet.
Zeile 79: Zeile 79:
|}
|}


== Aufgabe 5.2 - Programmiergrundlagen - Funktionen ==
= Aufgabe 5.2 - Programmiergrundlagen - Funktionen =
# Schreiben Sie das MATLAB<sup>®</sup>-Skript aus Aufgabe 5.1.3 zu einer MATLAB<sup>®</sup>-Function mit dem Namen <code>analyse</code> um, die
# Schreiben Sie das MATLAB<sup>®</sup>-Skript aus Aufgabe 5.1.3 zu einer MATLAB<sup>®</sup>-Function mit dem Namen <code>analyse</code> um, die
## als Eingabeargument die Zahl n bekommt und dann
## als Eingabeargument die Zahl n bekommt und dann
Zeile 141: Zeile 141:
|}
|}


== Aufgabe 5.3 - Programmiergrundlagen - Messdaten simulieren ==
= Aufgabe 5.3 - Programmiergrundlagen - Messdaten simulieren =
[[Datei:MuS findeAusreisser.jpg|thumb|rigth|450px|Abb. 1:  Ausreisser in einer verrauschten Messung]]
[[Datei:MuS findeAusreisser.jpg|thumb|rigth|450px|Abb. 1:  Ausreisser in einer verrauschten Messung]]
# Schreiben Sie das Skript <code>simuliereAussreisser.m</code>, welche normalverteilte Spannungen (Mittelwert: 10&thinsp;V, Standardabweichung: 5&thinsp;V) simuliert.
# Schreiben Sie das Skript <code>simuliereAussreisser.m</code>, welche normalverteilte Spannungen (Mittelwert: 10&thinsp;V, Standardabweichung: 5&thinsp;V) simuliert.
Zeile 176: Zeile 176:
|}
|}


== Aufgabe 5.4 Logische Indizierung ==
= Aufgabe 5.4 Logische Indizierung =
# Erzeugen Sie eine 5x5 Matrix mit 1²..5² als Inhalt so sortiert, dass die Summe in den Zeilen und spalten immer gleich sind.
# Erzeugen Sie eine 5x5 Matrix mit 1²..5² als Inhalt so sortiert, dass die Summe in den Zeilen und spalten immer gleich sind.
# Finden Sie die Einträge > 20 über zwei verschachtelte Schleifen.
# Finden Sie die Einträge > 20 über zwei verschachtelte Schleifen.
Zeile 213: Zeile 213:
|}
|}


== Aufgabe 5.5 Finde Ausreisser ==
= Aufgabe 5.5 Finde Ausreisser =
# Schreiben Sie das Skript <code>findeAusreisser.m</code> welches die Messdaten <code>Messdaten.mat</code> aus Aufgabe 5.3 lädt.
# Schreiben Sie das Skript <code>findeAusreisser.m</code> welches die Messdaten <code>Messdaten.mat</code> aus Aufgabe 5.3 lädt.
# Nutzen Sie Logische Indizierung, um die Außreißer zu finden.
# Nutzen Sie Logische Indizierung, um die Außreißer zu finden.
Zeile 242: Zeile 242:
|}
|}


= Aufgabe 5.3 - Programmiergrundlagen - Systematische Programmierung =
= Aufgabe 5.6 - Programmiergrundlagen - Systematische Programmierung =
Erzeugen Sie sich ein Framework für zukünftige Programmierarbeiten mit folgenden Ablauf:
Erzeugen Sie sich ein Framework für zukünftige Programmierarbeiten mit folgenden Ablauf:
# Header mit: Programmname, Autor, Änderungsdatum, Erstelldatum, Beschreibung, Input, Output
# Header mit: Programmname, Autor, Änderungsdatum, Erstelldatum, Beschreibung, Input, Output
Zeile 256: Zeile 256:
| <strong>Musterlösung 5.3&thinsp;</strong>
| <strong>Musterlösung 5.3&thinsp;</strong>
|-
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 4.6 - Systematische Programmierung
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 5.6 - Systematische Programmierung
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                        %                                                                       
%                                                                        %                                                                       
Zeile 312: Zeile 312:
%% Fenster schließen
%% Fenster schließen
close 1
close 1
</source>
</source>
|}
|}

Aktuelle Version vom 24. April 2026, 08:00 Uhr

Autor: Prof. Dr.-Ing. Schneider
Termin: 24.04.2025
Feedback: wooclap Ereigniscode: JNLXEK

Aufgabe 5.1 - Programmiergrundlagen - Schleifen und Bedingungen

  1. Schreiben Sie ein MATLAB®-Skript, das mit Hilfe einer for -Schleife die Summe der Zahlen von 1 bis 100000 berechnet (z. B. n=n+1).
  2. Schreiben Sie ein MATLAB®-Skript, das mit Hilfe einer while-Schleife die Summe die Zahlen von 1 bis 100000 berechnet.
  3. Schreiben Sie ein MATLAB®-Skript, das
    1. Einen Vektor X mit 10000 Zufallszahlen zwischen 0 und 1 erzeugt.
    2. Mit Hilfe einer for-Schleife den Index des ersten Elementes in X berechnet, das > 0.9 ist (falls ein solches existiert) und diesen Index in der Variablen x1 speichert.
    3. Mit Hilfe einer while-Schleife den Index des ersten Elementes in X berechnet, das< 0.1 ist (falls ein solches existiert) und diesen Index in der Variablen x2 speichert.
    4. Mit Hilfe von „ logical indexing" das erste Element findet, das echt zwischen 0.5 und 0.55 liegt (falls ein solches existiert) und diesen Index in der Variablen x3 speichert.

Nützliche Befehle: for, if, while, break

Aufgabe 5.2 - Programmiergrundlagen - Funktionen

  1. Schreiben Sie das MATLAB®-Skript aus Aufgabe 5.1.3 zu einer MATLAB®-Function mit dem Namen analyse um, die
    1. als Eingabeargument die Zahl n bekommt und dann
    2. einen Vektor mit n Zufallszahlen zwischen 0 und 1 erzeugt
    3. Anschließend soll die Funktion genau die Werte x1,x2 und x3 wie in Aufgabe 5.1.3 berechnen und diese als Rückgabewerte zurückliefern.
    4. Machen Sie sich anhand der Funktion analyse mit dem Setzen von „Breakpoints" und dem MATLAB®-Debugger vertraut.
  2. Schreiben Sie ein kurzes Matlab Skript start.m, mit dem Sie die Funktion analyse aufrufen. Springen Sie dabei mit einem Breakpoint in die Funktion.

Nützliche Befehle: function

Nützlicher Artikel: MATLAB function

Aufgabe 5.3 - Programmiergrundlagen - Messdaten simulieren

Abb. 1: Ausreisser in einer verrauschten Messung
  1. Schreiben Sie das Skript simuliereAussreisser.m, welche normalverteilte Spannungen (Mittelwert: 10 V, Standardabweichung: 5 V) simuliert.
  2. Die x-Achse Bildet die Zeit. Nehmen Sie den Index (1, 2, 3,...) in s.
  3. Bauen Sie zufällig einen Ausreißer in das Datenarray Spannung von 20 V ein.
  4. Zeigen Sie das Ergebnis entsprechend Abb. 1. Eine graue Gerade bildet den Mittelwert, die Messwerte sind tote Punkte und der Ausreißer ist blau eingekreist.
  5. Speichern Sie die Variablen Zeit und Spannung in der Datei Messdaten.mat.
  6. Werten Sie den Quelltext mit Header, Kommentaren und Hilfe auf.

Nützliche Befehle: randn, randi, save

Aufgabe 5.4 Logische Indizierung

  1. Erzeugen Sie eine 5x5 Matrix mit 1²..5² als Inhalt so sortiert, dass die Summe in den Zeilen und spalten immer gleich sind.
  2. Finden Sie die Einträge > 20 über zwei verschachtelte Schleifen.
  3. Finden Sie die Einträge > 20 über zwei über Logische Indizierung.

Nützliche Befehle: magic, for, if

Nützlicher Artikel: Matrix Indexing in MATLAB®

Aufgabe 5.5 Finde Ausreisser

  1. Schreiben Sie das Skript findeAusreisser.m welches die Messdaten Messdaten.mat aus Aufgabe 5.3 lädt.
  2. Nutzen Sie Logische Indizierung, um die Außreißer zu finden.
  3. Nutzen Sie als zweiten Ansatz Index = find(Spannung > 10)
  4. Zeichnen Sie das Ergebnis gemäß Abb. 1.

Aufgabe 5.6 - Programmiergrundlagen - Systematische Programmierung

Erzeugen Sie sich ein Framework für zukünftige Programmierarbeiten mit folgenden Ablauf:

  1. Header mit: Programmname, Autor, Änderungsdatum, Erstelldatum, Beschreibung, Input, Output
  2. Konsole löschen, Workspace bereinigen, Fenster schließen
  3. Initialisierung von Variablen etc.
  4. Simulationsschleife/Algorithmus
  5. Plots/Ausgabe etc.

Arbeiten Sie dabei mit Ausgaben vor und nach jedem Abschnitt. Bsp.: „Initialisation successful“.

Nützliche Befehle: disp, fprintf



→ Termine 1 2 3 4 5 6
MATLAB® Befehlsübersicht
→ zurück zum Hauptartikel: BSE Modellierung und Simulation - SoSe26