MATLAB Repetitorium - Programmstrukturen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(30 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
| '''Autor:'''  || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
| '''Autor:'''  || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
|-
| '''Termin:''' || 10.05.2024
| '''Termin:''' || 31.05.2024
|}
|}
== Aufgabe 4.1 - Erzeugen und Lesen von mat-Dateien ==
== Aufgabe 4.1 - Erzeugen und Lesen von mat-Dateien ==
# Schreiben Sie ein Skript, in welchem Sie eine Einheitsmatrix, eine Nullmatrix und ein String mit dem Inhalt „test“ erzeugen.
# Schreiben Sie ein Skript, in welchem Sie eine Einheitsmatrix, eine Nullmatrix und ein String mit dem Inhalt „test“ erzeugen.
# Erstellen Sie in Matlab einen Ordner mit dem Namen: „Daten“ (Befehle: mkdir()).
# Erstellen Sie in MATLAB<sup>®</sup> einen Ordner mit dem Namen: „Daten“ (Befehle: <code>mkdir()</code>).
# Speichern Sie alle vorher erzeugten Variablen in eine mat-Datei im erzeugten Ordner (Befehle: save())
# Speichern Sie alle vorher erzeugten Variablen in eine mat-Datei im erzeugten Ordner (Befehle: <code>save()</code>)
# Speichern Sie nur die Matrizen in einer neuen mat-Datei mit den Namen des vorher erzeugten Strings im erzeugten Ordner.
# Speichern Sie nur die Matrizen in einer neuen mat-Datei mit den Namen des vorher erzeugten Strings im erzeugten Ordner.
# Löschen Sie die an Teilaufgabe a) erzeugten Variablen aus dem Workspace und laden Sie die vorher erzeugte „test.mat“ Datei aus dem Ordner (Befehle: load())
# Löschen Sie die an Teilaufgabe a) erzeugten Variablen aus dem Workspace und laden Sie die vorher erzeugte <code>„test.mat“</code> Datei aus dem Ordner (Befehle: <code>load()</code>)
# Nutzen Sie die Benutzeroberfläche (uigetfile), um Daten zu laden.
# Nutzen Sie die Benutzeroberfläche (<code>uigetfile</code>), um Daten zu laden.
'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/clear.html <code>clear</code>], close, clc, mkdir, save, load, uigetfile
'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/clear.html <code>clear</code>], [https://de.mathworks.com/help/matlab/ref/close.html <code>close</code>], [https://de.mathworks.com/help/matlab/ref/clc.html clc], [https://de.mathworks.com/help/matlab/ref/mkdir.html mkdir], [https://de.mathworks.com/help/matlab/ref/save.html save], [https://de.mathworks.com/help/matlab/ref/load.html load], [https://de.mathworks.com/help/matlab/ref/uigetfile.html uigetfile]




Zeile 22: Zeile 22:
clear all; close all; clc;
clear all; close all; clc;


4.1.1)
%4.1.1)
A = eye(10);
A = eye(10);
B = zeros(20);
B = zeros(20);
Zeile 49: Zeile 49:
</source>
</source>
|}
|}
== Aufgabe 4.2 - Erzeugen und Lesen von txt-Dateien ==
== Aufgabe 4.2 - Erzeugen und Lesen von txt-Dateien ==
# Schreiben Sie ein Skript, in welchem Sie zunächst eine 5x5 Matrix erzeugen, welche zeilenweise aufsteigend die Werte von π bis 25π enthält.
# Schreiben Sie ein Skript, in welchem Sie zunächst eine 5x5 Matrix erzeugen, welche zeilenweise aufsteigend die Werte von π bis 25π enthält.
Zeile 80: Zeile 81:
</source>
</source>
|}
|}
== Aufgabe 4.3 - Cell Arrays ==
#Erzeugen Sie Tabelle 1 als Cell-Array in MATLAB<sup>®</sup> (Befehle: cell(), num2cell()).
# Wandeln Sie das Cell-Array in eine Tabelle um (Befehle: cell2table()).
# Erzeugen Sie eine Textdatei und speichern Sie dort das erstellte Cell -Array (Befehle: fopen(), fprintf(), fclose()).
Tutorial: [https://de.mathworks.com/help/matlab/import_export/write-to-delimited-data-files.html#br2ypq2-1 MATLAB<sup>®</sup>: Export Cell Array to Text File]
{| class="wikitable"
|+ Tabelle 1: Tabelle als Cell-Array
|-
! Name !! Alter !! Beruf
|-
| Walter White || 50 || Lehrer
|-
| Saul Goodman || 45 || Anwalt
|-
| Skyler White || 47 || Einzelhandelskauffrau
|-
| Jesse Pinkman || 26 || arbeitssuchend
|}
'''Nützliche Befehle:''' cell, num2cell, cell2table, fopen, fclose, fprintf
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.3&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Musterlösung Aufgabe 4.3 - Cell Arrays
clear all;
close all;
clc;
%4.3.1)
Header = {'Name','Alter','Beruf'};
Names = {'Walter White';'Saul Goodman';'Skyler White';'Jesse Pinkman'};
Alter = [50; 45; 47; 26];
Beruf = {'Lehrer';'Anwalt';'Einzelhandelskauffrau';'Arbeitslos'};
cellarray = cell(5,3);
cellarray(1,:) = Header;
cellarray(2:5,1) = Names;
cellarray(2:5,2) = num2cell(Alter);
cellarray(2:5,3) = Beruf;
%4.3.2)
table = cell2table(cellarray);
%4.3.3)
filename = 'Teil_3_CellArray.txt';
fileID = fopen(filename,'w');
formatSpecHeader = '%s %s %s\r\n';
formatSpec = '%s %d %s\r\n';
[nrows,ncols] = size(cellarray);
for row = 1:nrows
    if row==1
        fprintf(fileID,formatSpecHeader,cellarray{row,:});
    else
        fprintf(fileID,formatSpec,cellarray{row,:});
    end
end
fclose(fileID);
</source>
|}
== Aufgabe 4.4 - 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>while</code>-Schleife die Summe die Zahlen von 1 bis 100000 berechnet.
# Schreiben Sie ein MATLAB<sup>®</sup>-Skript, das
## Einen Vektor X mit 10000 Zufallszahlen zwischen 0 und 1 erzeugt.
## Mit Hilfe einer <code>for</code>-Schleife den Index des ersten Elementes in X berechnet, das > 0.9 ist (falls ein solches existiert) und diesen Index in der Variablen <math>x_1</math> speichert.
## 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 <math>x_2</math> speichert.
## 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 <math>x_3</math> speichert.
'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/for.html <code>for</code>], [https://de.mathworks.com/help/matlab/ref/if.html <code>if</code>], [https://de.mathworks.com/help/matlab/ref/while.html <code>while</code>], [https://de.mathworks.com/help/matlab/ref/break.html <code>break</code>]
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.4&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 4.4 - Schleifen und Bedingungens
clear all
%(a)
Summe1 = 0;
for i=0:1:100000
    Summe1 = Summe1+i;
end
%(b)
Summe2 = 0;
i = 0;
while i<=100000
    Summe2 = Summe2+i;
    i = i+1;
end
clear all
%(c)
VektorX = rand(1,10000);
%Element finden, welches >0.9 ist
for i=1:1:10000
   
    if(VektorX(i)>0.9)
        x1 = i;
        break;
    end
end
%Element finden, welches <0.1 ist
i=1;
while i<=10000
   
    if(VektorX(i)<0.1)
        x2 = i;
        break;
    end
    i = i+1;
end
%Element finden, welches zwischen 0.5 und 0.55 liegt
%% Möglichkeit 1: Schleife
for i=1:1:10000
   
    if(VektorX(i)>=0.50 && VektorX(i)<=0.55)
        x3 = i;
        break;
    end
end
%% Möglichkeit 2: logical indexing
Logic_Vek = VektorX >= 0.50 & VektorX <= 0.55;
x3_new = find(Logic_Vek,1);
</source>
|}
== Aufgabe 4.5 - Programmiergrundlagen - Funktionen ==
# Recherchieren Sie den Begriff [https://www.mathworks.com/help/matlab/ref/function.html „MATLAB function"] und informieren Sie sich, was man darunter versteht.
# Schreiben Sie das MATLAB<sup>®</sup>-Skript aus Aufgabe 4.4.3 zu einer MATLAB<sup>®</sup>-Function mit dem Namen <code>analyse</code> um, die
## als Eingabeargument die Zahl n bekommt und dann
## einen Vektor mit n Zufallszahlen zwischen 0 und 1 erzeugt
## Anschließend soll die Funktion genau die Werte <math>x_1, x_2</math> und <math>x_3</math> wie in Aufgabe 4.4.3 berechnen und diese als Rückgabewerte zurückliefern.
## Machen Sie sich anhand der Funktion <code>analyse</code> mit dem Setzen von „Breakpoints" und dem MATLAB<sup>®</sup>-Debugger vertraut.
# Schreiben Sie ein kurzes Matlab Skript, mit dem Sie die Funktion <code>analyse</code> aufrufen. Springen Sie dabei mit einem Breakpoint in die Funktion.
'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/function.html <code>function</code>]
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.5.1 - Funktion&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 4.5 - Funktionen
function[x1 x2 x3] = analyse(n)
    VektorX = rand(1,n);
   
    %Element finden, welches >0.9 ist
    for i=1:1:10000
        if(VektorX(i)>0.9)
            x1 = i;
            break;
        end
    end
    %Element finden, welches <0.1 ist
    i=1;
    while i<=10000
        if(VektorX(i)<0.1)
            x2 = i;
            break;
        end
        i = i+1;
    end
    %Element finden, welches zwischen 0.5 und 0.55 liegt
    Logic_Vek = VektorX >= 0.50 & VektorX <= 0.55;
    x3 = find(Logic_Vek);
    if ~isempty(x3)
        x3 = x3(1);
    else
        x3 = 0;
    end
end
</source>
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.5.4 - Startskript&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Skript testAnalyse ruft die Funktion auf.
n = 1000;
%dbstop in analyse
[x1 x2 x3] = analyse(n)
</source>
|}
== Aufgabe 4.6 - Programmiergrundlagen - Systematische Programmierung ==
Erzeugen Sie sich ein Framework für zukünftige Programmierarbeiten mit folgenden Ablauf:
# Header mit: Programmname, Autor, Änderungsdatum, Erstelldatum, Beschreibung, Input, Output
# Konsole löschen, Workspace bereinigen, Fenster schließen
# Initialisierung von Variablen etc.
# Simulationsschleife/Algorithmus
# Plots/Ausgabe etc.
Arbeiten Sie dabei mit Ausgaben vor und nach jedem Abschnitt. Bsp.: „Initialisation successful“.
'''Nützliche Befehle:''' [https://de.mathworks.com/help/matlab/ref/disp.html <code>disp</code>], fprintf
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung 4.6&thinsp;</strong>
|-
| <source line lang="matlab" style="font-size:medium">%% Aufgabe 4.6 - Systematische Programmierung
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                        %                                                                     
% Funktion        : Framework                                            %
%                                                                        %
%                                                                        %
% Eingabe        : /                                                    %
%                                                                        %
%                                                                        %
% Ausgabe        : /                                                    %
%                                                                        %
%                                                                        %
% Autor          : Erika Musterfrau                                      %
%                                                                        %
% Implementation  : MATLAB R2016b                                        %
%                                                                        %
% Bemerkung      :                                                      %
%                                                                        %
% Änderungsdatum  : 09.03.2017                                            %
%                                                                        %
% Erstelldatum    : 09.03.2017                                            %
%                                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matlab initialisiern
clear all;
close all;
clc;
%% Initialisierung von Variablen/Konstanten
disp('Starte Initialisierung');
%Hier kommt die Initialisierung hin
disp('Initialisation erfolgreich');
fprintf('\n');
%% Simulationsschleife/Algorithmus
disp('Programmstart');
%Hier kommen die Berechnungen hin
disp('Berechnung beendet');
fprintf('\n');
%% Plots/Ausgabe
figure(1);
%Hier kommen die Ausgabe hin
%% Fenster schließen
close 1
</source>
|}
== Projekt - Programmiergrundlagen - Funktionen ==
# Schreiben Sie die Funktion <code>LeseSpannung</code>, welche normalverteilte Spannungen (Mittelwert: 14,4&thinsp;V, Standardabweichung: 4&thinsp;V) simuliert.
# Nutzen Sie das Startskript <code>startLeseSpannung</code>, um über eine Schleife 50 Messwerte zu simulieren.
# Zeigen Sie die Messwerte als rote Punkte zyklisch an.
# Werten Sie den Quelltext mit Header, Kommentaren und Hilfe auf.
----
→ Termine [[MATLAB_Repetitorium_-_Einführung|1]] <br>
→ [[MATLAB-Befehle| MATLAB<sup>®</sup> Befehlsübersicht]]<br>
→ zurück zum Hauptartikel: [[MATLAB_Repetitorium|MATLAB Repetitorium]]

Aktuelle Version vom 5. Juli 2024, 09:42 Uhr

Autor: Prof. Dr.-Ing. Schneider
Termin: 31.05.2024

Aufgabe 4.1 - Erzeugen und Lesen von mat-Dateien

  1. Schreiben Sie ein Skript, in welchem Sie eine Einheitsmatrix, eine Nullmatrix und ein String mit dem Inhalt „test“ erzeugen.
  2. Erstellen Sie in MATLAB® einen Ordner mit dem Namen: „Daten“ (Befehle: mkdir()).
  3. Speichern Sie alle vorher erzeugten Variablen in eine mat-Datei im erzeugten Ordner (Befehle: save())
  4. Speichern Sie nur die Matrizen in einer neuen mat-Datei mit den Namen des vorher erzeugten Strings im erzeugten Ordner.
  5. Löschen Sie die an Teilaufgabe a) erzeugten Variablen aus dem Workspace und laden Sie die vorher erzeugte „test.mat“ Datei aus dem Ordner (Befehle: load())
  6. Nutzen Sie die Benutzeroberfläche (uigetfile), um Daten zu laden.

Nützliche Befehle: clear, close, clc, mkdir, save, load, uigetfile


Aufgabe 4.2 - Erzeugen und Lesen von txt-Dateien

  1. Schreiben Sie ein Skript, in welchem Sie zunächst eine 5x5 Matrix erzeugen, welche zeilenweise aufsteigend die Werte von π bis 25π enthält.
  2. Schreiben Sie diese Matrix in eine Textdatei mit den Anforderungen (Befehl: dlmwrite()):
    1. Zahlen in einer Zeile sollen mit einem Tabstopp getrennt werden.
    2. Zeilen sollen mit Zeilenumbrüchen getrennt werden.
    3. Zahlen sollen auf 6 Stellen genau gespeichert werden
  3. Laden Sie den Inhalt der Textdatei in eine neue Matrix (Befehl: dlmread())

Nützliche Befehle: dlmwrite(), dlmread()

Aufgabe 4.3 - Cell Arrays

  1. Erzeugen Sie Tabelle 1 als Cell-Array in MATLAB® (Befehle: cell(), num2cell()).
  2. Wandeln Sie das Cell-Array in eine Tabelle um (Befehle: cell2table()).
  3. Erzeugen Sie eine Textdatei und speichern Sie dort das erstellte Cell -Array (Befehle: fopen(), fprintf(), fclose()).

Tutorial: MATLAB®: Export Cell Array to Text File

Tabelle 1: Tabelle als Cell-Array
Name Alter Beruf
Walter White 50 Lehrer
Saul Goodman 45 Anwalt
Skyler White 47 Einzelhandelskauffrau
Jesse Pinkman 26 arbeitssuchend

Nützliche Befehle: cell, num2cell, cell2table, fopen, fclose, fprintf

Aufgabe 4.4 - 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 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 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 speichert.

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


Aufgabe 4.5 - Programmiergrundlagen - Funktionen

  1. Recherchieren Sie den Begriff „MATLAB function" und informieren Sie sich, was man darunter versteht.
  2. Schreiben Sie das MATLAB®-Skript aus Aufgabe 4.4.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 und wie in Aufgabe 4.4.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.
  3. Schreiben Sie ein kurzes Matlab Skript, mit dem Sie die Funktion analyse aufrufen. Springen Sie dabei mit einem Breakpoint in die Funktion.

Nützliche Befehle: function


Aufgabe 4.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

Projekt - Programmiergrundlagen - Funktionen

  1. Schreiben Sie die Funktion LeseSpannung, welche normalverteilte Spannungen (Mittelwert: 14,4 V, Standardabweichung: 4 V) simuliert.
  2. Nutzen Sie das Startskript startLeseSpannung, um über eine Schleife 50 Messwerte zu simulieren.
  3. Zeigen Sie die Messwerte als rote Punkte zyklisch an.
  4. Werten Sie den Quelltext mit Header, Kommentaren und Hilfe auf.

→ Termine 1
MATLAB® Befehlsübersicht
→ zurück zum Hauptartikel: MATLAB Repetitorium