cds_matlab_intro_part1.m 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. % Einführung in Matlab/Simulink
  3. %
  4. %
  5. % Institut für Automatisierungstechnik
  6. % Gruppe für komplexe dynamische Systeme
  7. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  8. % Dieses Musterfile dient zum Erlernen der grundlegenden Matlabbefehle. Es
  9. % handelt sich dabei um ein sogenanntes m-file, in welchem der Code zu
  10. % einer Datei zusammengefasst und direkt ausgeführt werden kann. Neben
  11. % diesem m-file kann der Code auch direkt im Command Window hinter der
  12. % Eingabeaufforderung ">>" eingegeben und ausgeführt werden.
  13. % Das Prozentzeichen dient in Matlab zum Einbinden von Kommentaren.
  14. % Weiterhin ist es möglich durch zwei aufeinanderfolgende Prozentzeichen
  15. % den Quelltext in Abschnitte zu unterteilen. Das Ausführen der Datei
  16. % erfolgt entweder durch Eingabe des Dateinamens im Command Window oder
  17. % durch Drücken der F5-Taste, einzelne Abschnitte können durch die
  18. % Kombination STRG+Eingabe ausgeführt werden. Einzelne Zeilen im
  19. % Programmcode können weiterhin markiert und durch Drücken der F9-Taste
  20. % ausgeführt werden.
  21. %
  22. % Das Ergebnis der Auswertungen erscheint im Command Window. Es wird dabei
  23. % zeilenweise ausgewertet. Wird die Programmzeile mit einem Semikolon
  24. % abgeschlossen, so wird die Ausgabe unterdrückt.
  25. %%
  26. % Beim Start eines neuen Programmes sollten zunächst einmal alle alten
  27. % Variablen gelöscht und alle offenen Fenster gelöscht werden
  28. clear all % Es werden alle Variablen gelöscht
  29. close all % Es werden alle Fenster geschlossen
  30. clc % Das Command Window wird zurückgesetzt
  31. %%
  32. % Matlab Hilfe: Es gibt zu allen Matlabbefehlen eine Hilfe, die entweder
  33. % direkt im Command Window oder aber in einem zusätzlichen Hilfefenster
  34. % angezeigt wird (die Hilfe enthält des Weiteren auch sehr gute
  35. % Einführungsbeispiele
  36. help sqrt % Hilfe im Command Window
  37. %doc sqrt % Hilfe in der Dokumentation (meist ausführlicher)
  38. %%
  39. % Zuweisungen in Matlab: Matlab verwendet standardmäßig Fließkommazahlen
  40. % (double: 64 Bit).
  41. variable_1 = 2; % Durch das Semikolon wird die Ausgabe unterdrückt
  42. variable_2 = 2.0; % Kein Unterschied zu vorher
  43. variable_3 = 4e5 % Durch Weglassen des Semikolons wird
  44. % das Ergebnis der Zeile ausgegeben
  45. variable_3 = variable_1 % Überschreiben von Variablen
  46. % Einige Variablen sind vordefiniert
  47. variable_4 = pi % Kreiszahl pi
  48. variable_5 = i % Komplexe Einheit
  49. variable_6 = j % Komplexe Einheit
  50. variable_7 = eps % Fließkommagenauigkeit
  51. variable_8 = NaN % Not a number, ungültiges Ergebnis
  52. % Zuweisen von String-Variablen
  53. variable_9 = 'Hello World' % Eingabe von Namen mit Hochkomma
  54. variable_10 = strcat('Hello', ' World') % Zusammenfügen von Strings
  55. %%
  56. % Mathematische Funktionen und Operatoren
  57. v1 = 2;
  58. v3 = 3;
  59. v1+v3 % Addition
  60. v1*v3 % Multiplikation
  61. v1-v3 % Subtraktion
  62. v1/v3 % Division
  63. mod(v1,v3) % Modulodivision
  64. rem(v1,v3) % Rest der Division
  65. sqrt(v1) % Wurzel
  66. exp(v1) % Exponentialfunktion
  67. log(v1) % Natürlicher Logarithmus
  68. log10(v1) % Zehnerlogarithmus
  69. abs(v1) % Betrag
  70. sign(v1) % Signum
  71. round(v1) % Runden
  72. ceil(v1) % Nach oben runden
  73. floor(v1) % Nach unten runden
  74. real(2+i) % Realteil
  75. imag(2+i) % Imaginärteil
  76. conj(2+i) % komplexe Konjugation
  77. angle(2+i) % Phase einer komplexen Zahl
  78. sin(v1) % Sinus
  79. cos(v1) % Cosinus
  80. tan(v1) % Tangens
  81. cot(v1) % Cotangens
  82. %%
  83. % Eingabe von Vektoren und Matrizen
  84. zv = [1,2,3] % Zeilenvektor
  85. sv = [1;2;3] % Spaltenvektor
  86. zv2 = 1:1:5 % Zeilenvektor [1 2 3 4 5]
  87. % Verwendung start:(schrittweite:)ende
  88. % Der Parameter schrittweite ist optional
  89. zv3 = 1:2:5 % Zeilenvektor [1 3 5]
  90. zv4 = linspace(1,2,11) % Zeilenvektor aus 11 äquidistanten Werten von 1 bis 2
  91. zv5 = [zv zv3] % Zusammenfügen von Vektoren
  92. % Eingabe von Matrizen
  93. matr1 = [1 2;3 4] % 2x2 Matrix
  94. matr2 = ones(3) % 3x3 Einsmatrix
  95. matr3 = zeros(4,2)% 4x2 Nullmatrix
  96. matr4 = randn(4) % 4x4 Zufallsmatrix
  97. matr5 = rand(4) % 4x4 Zufallsmatrix mit Werten zwischen 0 und 1
  98. matr6 = eye(3) % 3x3 Einheitsmatrix
  99. % Weitere vorgegebene Zahlen, Matrizen und Vektoren sind hier zu finden
  100. % doc elmat
  101. % Zugriff auf Einträge von Vektoren und Matrizen
  102. zv(2) % Zweites Element von zv
  103. zv(end) % Letztes Element von zv
  104. matr1(2,2) % Element in der zweiten Spalte und der zweiten Zeile
  105. length(zv) % Länge des Vektors zv
  106. size(matr1) % Größe der Matrix matr1
  107. matr2(1:2,2:3) % Auf gewisse Submatrizen zurückgreifen
  108. % Rechnen mit Matrizen und Vektoren
  109. det(matr1) % Determinante der Matrix
  110. rank(matr1) % Rang der Matrix
  111. eig(matr1) % Eigenwerte der Matrix
  112. inv(matr1) % Inverse der Matrix
  113. matr1' % Transponierte der Matrix
  114. zv*zv' % Skalarprodukt
  115. zv'*zv % Dyadisches Produkt
  116. zv.*zv % Elementweises Ausführen der Multiplikation
  117. matr1*[1;2] % Matrix-Vektor-Produkt
  118. matr1^2 % Matrixquadrat
  119. [min1,min2] = min(zv) % Minimum und Lage des Minimums eines Vektors
  120. [max1,max2] = max(zv) % Maximum und Lage des Maximums eines Vektors
  121. mean(zv) % Mittelwert eines Vektors
  122. std(zv) % Standartabweichung vom Mittelwert eines Vektors
  123. sum(zv) % Summe der Vektorelemente
  124. prod(zv) % Produkt der Vektorelemente
  125. %%
  126. % Strukturen und Zellen
  127. % Um komplexe zusammengehörige Daten übersichtlich zu verwalten, empfiehlt
  128. % sich die Verwendung von Strukturen. Der Zugriff erfolgt mit Hilfe des
  129. % "."-Operators
  130. % Erzeugen einer Struktur
  131. stru1 = struct('name','Albert','age',21) % Mit dem Struct-Operator
  132. stru2.name = 'Albert' % Mit dem Punkt-Operator
  133. stru2.age = 129
  134. % Der Zugriff auf die Struktur erfolgt analog
  135. % Verschachtelte Struktur
  136. stru3.name.vorname = 'Albert'
  137. stru3.name.nachname = 'Einstein'
  138. stru3.age = 129
  139. % Erzeugen eines Zweiten Eintrages in der Struktur
  140. stru3(2).name.vorname = 'Isaac'
  141. stru3(2).name.nachname = 'Newton'
  142. stru3(2).age = 366
  143. % Cell-Arrays: Werden meist zum Abspeichern unterschiedlicher Daten benutzt
  144. zell1 = cell(2,2) % Erzeugen der Zelle mit dem cell-Befehl
  145. zell1{1,1} = 1 % Zugriff auf die Elemente mit geschweiften Klammern
  146. zell1{1,2} = [1;2]
  147. zell1{2,1} = 'Hello World'
  148. zell1{2,2} = date
  149. zell2{1,1} = 1 % Direkte Erzeugung ohne vorherige Deklaration
  150. zell2{1,2} = [1;2]
  151. zell2{2,1} = 'Hello World'
  152. zell2{2,2} = date
  153. %%
  154. % Verzweigungen und Schleifen
  155. % If-Verzweigungen
  156. var = 3;
  157. if var > 2
  158. display('Die Variable ist größer als 2') %Ausgabe im Command Window
  159. else
  160. display('Die Variable ist kleiner als 2 oder gleich 2')
  161. end
  162. % Verschachtelte Verzweigungen
  163. if ((var > 1) && (var<3))
  164. display('Die Variable liegt zwischen 1 und 3')
  165. elseif (var>=3)
  166. display('Die Variable ist größer als 3 oder gleich 3')
  167. else
  168. display('Die Variable ist kleiner als 1 oder gleich 1')
  169. end
  170. % Case Anweisung
  171. switch var case 1; a=1, case{3,4,5}; a=5, otherwise a=10, end
  172. % Schleifen
  173. for i=1:2:10
  174. display(['Der aktuelle Index beträgt: ',num2str(i)])
  175. % Umwandlung von Zahlen in Strings mit dem Befehl num2str
  176. pause(1) % Einführen von Pausen bei der Ausgabe
  177. end
  178. k=0;
  179. while k<5
  180. display(sprintf('Der aktuelle Index beträgt: %i',k))
  181. % Umwandlung von Zahlen in Strings mit dem Befehl num2str
  182. pause(1) % Einführen von Pausen bei der Ausgabe
  183. k=k+2;
  184. end
  185. % Das Abbrechen von Schleifen (und m-code allgemein) ist mit dem Befehl break möglich
  186. while k>0
  187. display(sprintf('Der aktuelle Index beträgt: %i',k))
  188. % Umwandlung von Zahlen in Strings mit dem Befehl num2str
  189. pause(1) % Einführen von Pausen bei der Ausgabe
  190. if k>10
  191. display('Schleife unterbrochen')
  192. break
  193. end
  194. k=k+2;
  195. end
  196. % Anmerkung: Sollte unbeabsichtigt eine Endlosschleife entstanden sein
  197. % (oder eine andere Berechnung nicht terminieren), so kann
  198. % diese mittels STRG+C unterbrochen werden
  199. %%
  200. % Matlabfunktionen:
  201. % Dies sind spezielle m-files, welchen Parameter übergeben werden können
  202. % und dann das Ergebnis der Funktion zurückgeben. Der Name der Funktion
  203. % muss immer gleich dem Namen des m-files sein
  204. % Syntax: funtion [out] = name(in) Abschluss der Funktion mit end
  205. help mittelwert % Ausgabe der Hilfe
  206. mittelwert(2,3) % Ausgabe des Ergebnis
  207. % Anmerkung: Variablen in einer Funktion sind lokal, sofern nicht anders
  208. % deklariert. Allerdings sollte darauf wenn möglich verzichtet werden.
  209. %%
  210. % Datenexport:
  211. % Daten werden in Matlab standardmäßig als sogenanntes mat-file exportiert
  212. vasa = [1 2 3];
  213. save sav_dat vasa % Abspeichern des Vektors vasa in der Datei sav_dat.mat
  214. vasa2 = [4 5 6];
  215. save sav_dat -append vasa2 %Anhängen des Vektors vasa2 an die existierende Datei
  216. clear all
  217. load sav_dat.mat % Laden einer mat-Datei
  218. vec = load('sav_dat.mat') % Direktes Zuweisen zu einer Variable
  219. % Weitere Datenexporte und Importe
  220. vasa = [1 2 3];
  221. save sav_dat_asc.txt -ascii vasa %Abspeichern in einer ascii-Datei (z.B. txt)
  222. clear all
  223. load -ascii sav_dat_asc.txt % Laden der ascii-Datei
  224. vasa = [1 2 3];
  225. %Benötigt eine Installation von MS-Excel
  226. try
  227. Excel = matlab.io.internal.getExcelInstance;
  228. xlswrite('sav_dat_xls',vasa); % Abspeichern in einer Excel-Datei
  229. clear all
  230. var = xlsread('sav_dat_xls')
  231. catch exception %#ok<NASGU>
  232. warning("Can't save variable to Excel-Sheet - " + exception.message)
  233. end
  234. %%
  235. % Abschluss: Einige zusätzliche Features
  236. % Erzeugen einer Stoppuhr um die Berechnungszeit auszugeben
  237. tic
  238. toc
  239. tic
  240. pause(1)
  241. toc
  242. % Angabe der Variablen im Arbeitsspeicher
  243. who
  244. whos % Ausgabe mit Variablentyp
  245. % Löschen einzelner Variablen
  246. a = 1;
  247. clear a
  248. %% Functions handles
  249. u = @(t) sin(2*t);
  250. t_vec=0:1e-3:4;
  251. u_vec=u(t_vec);
  252. figure();
  253. plot(t_vec,u_vec);