kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz
80 Vorlesung_2014_10_01
81 Vorlesung_2014_10_08
82 Vorlesung_2014_10_15
83 Vorlesung_2014_10_22
84 Vorlesung_2014_10_29

1.3.1 Erste Schritte bei der Verwendung von Scilab

Wichtige Hinweise

  • In Scilab wird als präferierter Datentyp die Matrix verwendet.
  • Tatsächlich wird schon bei der Zuweisung a=10 eine 1x1-Matrix des Namens a mit Inhalt 10 erzeugt.
  • Anders als bei Arrays in C/C++, ist der erste Index die 1 und nicht die 0, Array-Klammern sind rund statt eckig, d.h. a(1,1) spricht das erste Element einer Matrix an.
  • Deklarationen von Variablennamen, wie in C/C++ üblich, sind in Scilab nicht notwendig.
  • Tatsächlich wird bei der Zuweisung a[3,2]=7 dynamisch eine 3x2-Matrix erzeugt, die bis auf das Element mit Index 3,2 mit Nullen gefüllt wird.

Scilab benutzen

  • Scilab kann vom Desktop aus durch Doppelklick auf das Scilab-Symbol gestartet werden.
  • Alternativ kann man Scilab durch Aufruf des Skripts scilab starten, das auf dem Slax-USB-Linux unter /usr/lib/scilab-4.1.2/bin/scilab verfügbar ist.
  • Dieses Skript ruft wiederum das eigentliche ausführbare Programm scilex unter /usr/lib/scilab-4.1.2/bin/scilex auf.
Icon zum Start von Scilab vom Desktop aus.

Bild 1.3.1-1: Icon zum Start von Scilab vom Desktop aus.

Aufruf von Scilab von der Konsole aus.

Bild 1.3.1-2: Aufruf von Scilab von der Konsole aus.

Scilab-Konsole

  • In die Scilab-Konsole können nach dem Start nun Befehle in der Scilab-Skriptsprache eingegeben werden.
  • Bei einer Befehlszeile, die mit einem Semikolon enden, wird der Befehl einfach ausgeführt.
  • Bei Befehlen, die nicht mit einem Semikolon enden, wird der Befehl ausgeführt und das Resultat dargestellt.
  • Wird der zu berechnende Ausdruck nicht einer neuen Variable zugewiesen, so wird das Ergebnis automatisch in der Variablen ans gespeichert (vergl. nachfolgendes Bild).
Eingabe und Ausführung von Scilab-Befehlen in die Scilab-Konsole.

Bild 1.3.1-3: Eingabe und Ausführung von Scilab-Befehlen in die Scilab-Konsole.

Allgemeine Steuerbefehle für die Konsole

Funktion Beschreibung
help Öffnet die Scilab-Hilfe
help SCILABBEFEHL Öffnet die Hilfe für einen bestimmten Scilab-Befehl / eine bestimmte Scilab-Funktion
plot Grafische Darstellung einer Wertetabelle, Beispiel: plot([-3,-2,-1,0,1,2,3],[9,4,1,0,1,4,9])
scicos Aufruf der Grafischen Programmieroberfläche (Programmieren mit Blockdiagrammen)
who Ausgabe aller zur Zeit exisitierenden Variablen
clear Löscht alle Varaiblen
cd PFAD In ein bestimmtes Verzeichnis gehen (wird relevant, wenn man Daten abspeichern möchte, oder ein externes Skript ausführen will.)
dir oder ls Listet die Files im aktuellen Verzeichnis (Startverzeichnis: /root) auf.
exec FILENAME Führt Scilab-Befehle aus, die in einer Datei aufgelistet sind mit dem Namen FILENAME
stacksize Liefert den für Scilab reservierten Speicher und die maximale Anzahl definierbarer Variablen.
stacksize(WERT) Setzt den für Scilab reservierten Speicher auf WERT

Tabelle 1.3.1-1: Allgemeine Steuerbefehle für die Konsole

Verarbeitung von Vektoren und Matrizen

  • Alle Zahlenwerte werden in Scilab als Matrizen gespeichert.
  • Eine einzelne Zahl ist eine 1x1 Matrix.
  • Ein liegender Vektor mit n Komponenten ist eine 1xn Matrix (eine Zeile, n Spalten).
  • Ein stehender Vektor mit n Komponenten ist eine nx1 Matrix (n Zeilen, 1 Spalte).
  • Die elementaren Operatoren +, -, *, / und ** für das Potenzieren können in Scilab direkt auf Matrizen angewendet werden.
  • Einvorangestellte Punkt . vor einem dieser Operatoren, führt die Operation elementweise, statt gemäß der gängigen Verknüpfungsregeln durch.
  • Um Matrizen einzugeben, werden die Zahlen oder Variablen innerhalb von eckigen Klammern zeilenweise durch Kommata getrennt eigegeben.
  • Zeilenumbrüche erzeugt man durch Verwendung eines Semikolons.
  • Die folgenden Konsolenbefehle sollen die gerade beschriebene Syntax veranschaulichen:
Elementare Operatoren auf Matrizen angewendet

Bild 1.3.1-4: Elementare Operatoren auf Matrizen angewendet

  • Man beachte: Indem die Einheitsmatrix durch A geteilt wird, wird die inverse Matrix von A gebildet und damit das Gleichungssystem A*b=[3;13] gelöst: b=A-1*[3;13].
  • Dass das Ergebnis stimmt, kann leicht anhand der vorangehenden Operation A*[2;3] erkannt werden.

Funktionen zur Erzeugung spezieller Matrizen

Funktion Beschreibung Beispiel Resultat
eye(m,n) Einheitsmatrix, bzw. Matrix m(i,k) = 1 für i==k und 0 sonst eye(2,3) [1,0,0;0,1,0]
zeros(m,n) Nullmatrix, bzw. Matrix m(i,k) = 0 für alle i,k zeros(3,2) [0,0;0,0;0,0]
ones(m,n) Einsermatrix, bzw. Matrix m(i,k) = 1 für alle i,k ones(3,2) [1,1;1,1;1,1]
rand(m,n) Matrix mit Gauss verteilten Zufallszahlen zwischen im Intervall [0,1] rad(2,2) [0.2638578,0.5376230;0.5253563,0.1199926]

Tabelle 1.3.1-2: Funktionen zur Erzeugung spezieller Matrizen

Elementare Matrizenfunktionen

Funktion Beschreibung Beispiel Resultat
' Hochkomma bildet die Transponierte einer Matrix [1,2;3,4]' [1,3;2,4]
inv(A) Inverse einer Matrix bilden inv([0,1;2,3]) [-1.5,0.5;1.0,0.0]
size(A) Anzahl der Zeilen und Spalten in einem Zeilenvektor speichern size([1,2,3;4,5,6]) [2,3]
diag(A) Diagonale als Zeilenvektor aus einer Matrix herausgreifen diag([1,2;3,4]) [1,4]
int(A) Nachkommastellen abschneiden int([1.7,2;3,4.3]) [1,2;3,4]
sign(A) Matrixelemente werden -1, 0 oder 1, entsprechend Vorzeichen sign([1,-2;0,3]) [1,-1;0,1]
floor(A) Matrixelemente abrunden floor(-1.2) -2
ceil(A) Matrixelemente aufrunden ceil(-1.2) -1
round(A) Matrixelemente runden round(-1.7) -2
abs(A) Absolutwert jedes Matrixelements bilden abs([-3,1;-4,2]) [3,1;4,2]
modulo(A,x) Modulodivision modulo([8,3;1,15],3) [2,0;1,0]

Tabelle 1.3.1-3: Elementare Matrizenfunktionen

  • Hinweis: Alle elementaren Funktionen, wie abs, round, modulo, sin, cos, usw. werden elementweise auf eine übergebene Matrix angewendet.

Vordefinierte Konstanten

In Scilab sind einige Konstanten vordefiniert. Besonders interessant ist die imaginäre Zahl %i, denn ein Matrixelement kann auch komplexwertig sein.

Vordefinierte Konstante Beschreibung Wert
%pi Kreiszahl 3.1415927...
%e Eulerzahl 2.7182818...
%i Wurzel aus Minus eins i

Tabelle 1.3.1-4: Vordefinierte Konstanten

Funktion Beschreibung Beispiel Resultat
%i Wurzel aus Minus eins a=%i a=i
%i*%i Wurzel aus Minus eins im Quadrat a=%i*%i a=-1
a*%i+b Bildung einer komplexen Zahl x=2*%i+3 a=3+2i

Tabelle 1.3.1-5: Umgang mit imaginären und komplexen Zahlen.

Kontrollstrukturen

Kontrollstrukturen sind Verzweigungen mit if...else... und Schleifen mit for... oder while... Diese Art von Befehlen werden, wie alle Elemente der Skriptsprache, relativ langsam abgearbeitet. Deshalb sollte man sie wenn möglich durch schnellere Scilab-Funktionen oder Vektoroperationen ersetzen. Will man beispielsweise ein Array a mit 1000 Elementen mit Null initialisieren, so ist es geschickter und einfacher a= zeros(1,1000); zu schreiben, anstatt eine Schleife hierzu zu bilden. Manchmal sind aber Schleifen nicht vermeidbar. Oft kann man aber durch Verwendung eines Iterator-Ausdrucks der Form a:b:c auf Schleifen verzichten. a ist dabei Startwert, b Schrittweite und c Abbruchwert.

Funktion Beschreibung Beispiel Resultat
a:b In Einerschritten von a nach b iterieren x=1:5 x=[1,2,3,4,5]
a:b:c Mit Schrittweite b von a nach c iterieren x=2:-0.5:0.3 x=[2,1.5,1.0,0.5]
a:b:c Noch ein Beispiel A=[1:3;3:-1:1] A=[1,2,3;3,2,1]
linspace(a,b,n) n Äquidistante Schritte in [a,b] x=linspace(0,1,6) x=[0,0.2,0.4,0.6,0.8,1.0]

Tabelle 1.3.1-6: Ausdrücke mit Iteratoren.

Verwendung der for und der while - Schleife

Bild 1.3.1-5: Verwendung der for und der while - Schleife

  • Hinweis: Durch q=0; und p=0; wird werden die Variablen p und q überschrieben, falls sie vorher existiert haban sollten.
  • Wäre q beispielsweise eine 3x3 Matrix gewesen, hätte Scilab nach Ablauf der for-Schleife automatisch eine 3x8 Matrix daraus gemacht.
  • Die Verwendung der Variable i als Laufvariable kann Verwirrung stiften, da i auch die imaginäre Zahl ist.
  • Logische Operatoren

Die Verwendung von bedingten Verzweigungen setzt voraus, dass logische Operatoren zur Verfügung stehen, mit denen die Verzweigungsbedingugen formuliert werden können.

Operator(en) Beschreibung
~ Logisches NICHT
& Logisches UND
| Logisches ODER
%t Boolscher Wert WAHR / true
%f Boolscher Wert FALSCH / false
==,<,>,>=,<= Vergleichsoperatoren

Tabelle 1.3.1-7: Logische Operatoren

Verwendung von bedingten Verzweigungen.

Bild 1.3.1-6: Verwendung von bedingten Verzweigungen.