Modellierung und Simulation - Programmiertechniken: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 298: Zeile 298:
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Bestimmen Sie folgende Werte und stellen Sie diese dar
* Signalenergie berechnen
* Spitzenwert bestimmen
* Ereignisse oberhalb eines Schwellwerts markieren
* dominante Frequenz bestimmen
* Ergebnisse grafisch darstellen
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Signalparameter.m&thinsp;</strong>
| <strong>Signalparameter.m&thinsp;</strong>
Zeile 321: Zeile 329:


%% Dominante Frequenz bestimmen
%% Dominante Frequenz bestimmen
[peakAmplitude,index] = max(A);
dominantFrequency = f(index);
fprintf("Dominante Frequenz = %.1f Hz\n",dominantFrequency)
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Bestimmen Sie folgende Werte und stellen Sie diese dar
* Signalenergie berechnen
* Spitzenwert bestimmen
* Ereignisse oberhalb eines Schwellwerts markieren
* Ergebnisse grafisch darstellen
----
----
→ [[MATLAB-Befehle| MATLAB<sup>®</sup> Befehlsübersicht]]<br>
→ [[MATLAB-Befehle| MATLAB<sup>®</sup> Befehlsübersicht]]<br>
→ zurück zum Hauptartikel: [[BSE Modellierung und Simulation - SoSe26]]
→ zurück zum Hauptartikel: [[BSE Modellierung und Simulation - SoSe26]]

Version vom 2. Juli 2026, 17:29 Uhr

Autor: Prof. Dr.-Ing. Schneider
Lektion: 12
Termin: 03.07.2026

Einleitung

MATLAB® ist eines der wichtigsten Werkzeuge für die numerische Berechnung, Datenanalyse und Simulation in den Ingenieur- und Naturwissenschaften. Neben der korrekten Umsetzung eines Algorithmus spielt dabei auch die Qualität des Programmcodes eine entscheidende Rolle. Gut strukturierter, effizienter und wartbarer Code erleichtert nicht nur die Fehlersuche und Weiterentwicklung, sondern verbessert häufig auch die Ausführungsgeschwindigkeit. In diesem Kurs lernen die Studierenden grundlegende und fortgeschrittene Programmiertechniken in MATLAB® kennen. Anhand praxisnaher Beispiele und Optimierungsaufgaben werden typische Programmierfehler identifiziert und bestehender Code schrittweise verbessert. Ziel ist es, moderne MATLAB®-Programme zu entwickeln, die übersichtlich, leistungsfähig und leicht wiederverwendbar sind.


Lernziele

Nach dem Kurs können die Teilnehmenden:

  • effizienten und gut lesbaren MATLAB®-Code schreiben,
  • Funktionen und Skripte sinnvoll einsetzen,
  • Vektorisierung anstelle unnötiger Schleifen verwenden,
  • Eingaben überprüfen,
  • Code modular strukturieren,
  • typische MATLAB®-Funktionen zur Datenverarbeitung anwenden,
  • ihren Code dokumentieren und debuggen.

1. Programmierrichtlinien

  1. Analysieren Sie den nachfolgenden Quelltext unter Berücksichtigung der Programmierrichtlinien für MATLAB®.
  2. Optimieren Sie den Quelltext.
a=5;
b=3;
c=a*b;
disp(c)

2. Skripte und Funktionen

Ein Skript

  • arbeitet im Workspace.
  • ist leicht zu schreiben.
  • ist schlecht wiederverwendbar.
radius = 3;
A = pi*radius^2;

Die Vorteile eine Funktion sind

  • Wiederverwendbarkeit
  • eigener Workspace
  • einfach testbar

Wandeln Sie das Skript in die Funktion berechneKreis um und starten Sie diese mit der Funktion testBerechneKreis.

3. Vektorisierung

Der folgende Code berechnet y=3x2+2x5 mittels einer Schleife.

x=-10:0.1:10
for i=1:length(x)
    y(i)=3*x(i)^2+2*x(i)-5;
end
  1. Ersetzen Sie die Schleife durch eine vektorisierte Berechnung.
  2. Messen Sie die Zeitersparnis mittels tic und toc.

4. Logische Indizes

Der Quelltext sucht ineffizient alle Werte > 0.

x = randn(1000,1);
j=0;
for i=1:length(x)
    if x>0
j=j+1;
     xPos(j)=i;
    end
end
  1. Optimieren Sie den Quelltext mit logischer Indizierung.

5. Vorallokation

Der Quelltext alloziert Speicher zur Laufzeit. Das ist ineffizient.

for i=1:10000
    y(i)=i^2;
end
  1. Optimieren Sie den Quelltext mit Vorallokation.
  2. Messen Sie die Zeitersparnis mittels tic und toc.

6. Eingaben prüfen

  1. Schreiben Sie eine Funktion Wurzel, die die Wurzel berechnet.
  2. Prüfen Sie mit arguments, dass der Übergabewert positiv ist.

= 7. Rauschen entfernen

x = x + 0.3*randn(size(x));
end
  1. Nutzen Sie die Funktionen arguments und arguments, um das Rauschen zu entfernen.
  2. Prüfen Sie mit arguments, dass der Übergabewert positiv ist.

8. FTF eines Signals

Gegeben:

signal = randn(5000,1);
signal = signal + sin(2*pi*40*(0:4999)'/1000);

Erstellen Sie ein Programm mit folgenden Funktionen:

  • main.m
  • generateSignal()
  • filterSignal()
  • calculateFFT()
  • plotResults()

Bestimmen Sie folgende Werte und stellen Sie diese dar

  • Signalenergie berechnen
  • Spitzenwert bestimmen
  • Ereignisse oberhalb eines Schwellwerts markieren
  • dominante Frequenz bestimmen
  • Ergebnisse grafisch darstellen

MATLAB® Befehlsübersicht
→ zurück zum Hauptartikel: BSE Modellierung und Simulation - SoSe26