II-RA-HOME

  1. Einführung

  2. Elementare Operationen in scilab

  3. Modellierung in scilab

  4. Fortsetzung

  5. Testfragen und Übungen


II-RA PROZESSRECHNER SS03 - Vorlesung mit Übung
Modellierungsbeispiel - Einsatz von scilab

   Achtung : Skript  nicht vollständig  !!
                        

AUTHOR: Gerd Döben-Henisch
DATE OF FIRST GENERATION: April-2, 2003
DATE OF LAST CHANGE: April-6, 2003
EMAIL: Gerd Döben-Henisch



1. Einführung


In der vorausgehenden Vorlesung sowie in den Übungen wurde am Beispiel der Synapse gezeigt, wie man Auschnitte aus der Synapse --einmal einen Ionenkanal, dann eine Ionenpumpe-- mit den Mitteln der Systemtheorie analysieren und formal modellieren kann. In der heutigen Vorlesung und in der Übung lautet das Thema, diese zuvor vorgenommenen Modellierungen mit den Mitteln von scilab zu reformulieren und damit einem ersten Test zugänglich zu machen.

START



2. Elementare Operationen in scilab


Scilab bietet eine Kommandoshell an, auf der man eine Reihe von Befehlen direkt eingeben und dann sofort ausführen kann. Ist man unsicher bezgl. der Bedeutung eines Befehls, dann kann man mittels

 apropos Zeichenkette

alle Informationen auflisten lassen, in denen Zeichenkette vorkommt. Findet man in dieser Liste Befehlsnamen, die zielführend erscheinen, kann man diese gezielter abfragen mit:

 help Befehlsname


scilab

Scilab Umgebung



Für grössere Programme ist die direkte eingabe über die Kommandoshell allerdings zu umständlich. In diesem Fall kann man mittels eines Editors Programmdateien erstellen, die die Extension '.sci' haben. Solche Programmdateien kann man dann mit dem Befehl

 exec('Pfad/progr-datei.sci',-1)

laden und automatisch starten. Enthält eine Datei nur Funktionsefinitionen, kann man diese auch mit dem Befehl

 getf(file-name [,opt])
 

laden und 'bereithalten'. Hat man irgendwelche Daten erzeugt, dann kann man diese auch mittels dem Befehl

write('path/datei-name.dat',var-name)

in eine datei schreiben. Quelle ist die Variable, in der die Daten abgespeichert sind. Entsprechend kann man solcherart abgespeicherte Daten auch wieder aus einer Datei auslesen und in einer Datei entsprechenden Formats abspeichern:

var-name=read('path/datei-name.dat',rows,cols)

Beim Abspeichern in die Variable gibt man die Anzahl der benötigten Zeilen und Spalten an.

Zur visualisierung stehen eine grosse Zahl von Befehlen zur Verfügung. Hier ein einfaches Beispiel:

 -->z=[1:1:10],for k=1:1:10, z(k)=k^3/2, end

z=[1:1:10] := Es wird ein Vektor mit Werten von 1...10 angelegt.

for k=1:1:10, z(k)=k^3/2, end := In einer Schleife mit Index k von 1 ... 10 werden die einzenen Werte des Vektors z mit dem Faktor '3/2' potenziert. Damit bekommt z die folgenden Werte:

0.5    4.    13.5    32.    62.5    108.    171.5    256.    364.5    500.

Eine Umsetzung in einen Graph erhält man mit dem einfachen 2-D-Plotbefehl:

-->plot2d(z)


ex0

plot2d(z)



Eine einfache Alternative wären Liniendiagramme, etwa:

-->xbasc()

-->plot2d3([1:1:10],z)

 


ex1

plot2d3([1:1:10],z)



Der befehl 'xbasc()' ist nur notwendig, wenn man nicht will, dass die beiden Graphen nicht übereinandergeschrieben werden. Bisweilen ist das Übereinanderschreiben sinnvoll.

START



3. Modellierung in scilab


Folgende einfache systemtheoretische Modellierung war u.a. in der vorausgehenden Vorlesung erarbeitet worden (hier verkürzte Wiedergabe):


PUMP(p) iff p=<< SUB, CAP, DIR, THETA,SINT >, F>
F: SUB x CAP x DIR x THETA x SINT ---> SINT
F(<s,c,d,t,si >)=si'
wobei <s,c,d,t,si > den System-Input darstellt und si' den System-Output. Als eine mögliche Konkretisierung der Berechnungsvorschrift für die Funktion F wurde folgendes Schema angegeben:

<s,c,d,t,si > in F ===>

Entweder Fall (i):
Wenn d='in' & si < t dann si=si+c

Oder Fall (ii):
Wenn d='out' & si > t dann gilt: Entweder (si-c) < dann si=0 oder si=si-c


Hier die Umsetzung des systemtheoretischen Modells in eine einfache Funktionsdefinition:

 //----------------------------
//
// pumpe.sci
//
//---------------------------------

function [si]=pump(s,c,d,t,si)

if d == 0 & si < t then, si=si+c, disp('PUMPING INWARDS')

elseif d == 1 & si > t then
   if (si-c) <= 0 then,  si=0 ,  disp('PUMPING OUTWARDS')
   else  si=si-c,  disp('PUMPING OUTWARDS')
   end

else disp('NOTHING TO DO')
end

[si]=return(si)

endfunction
 

Einfache Tests wären die folgenden:

Schwellwert unter aktuellem Wert bei Richtung 'inwärts' führt zu keiner Aktivierung:

 -->s='Ka+', c=50, d=0, t=120, si=130, [si]=pump(s,c,d,t,si)
 s  =

 Ka+
 c  =

    50.
 d  =

    0.
 t  =

    120.
 si  =

    130.

 NOTHING TO DO
 si  =

    130.
 

Überschreitung des Schwellwertes bei richtung 'auswärts' führt zur aktivierung der Pumpe, die den Betrag c=50 nach aussen pumpt.

 -->s='Ka+', c=50, d=1, t=120, si=130, [si]=pump(s,c,d,t,si)
 s  =

 Ka+
 c  =

    50.
 d  =

    1.
 t  =

    120.
 si  =

    130.

 PUMPING OUTWARDS
 si  =

    80.

 
START



4. Testfragen und Übungen


Übungsaufgabe:

Testfragen:


START