|
II-RA PROZESSRECHNER SS03 - Vorlesung mit Übung
|
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.
STARTScilab 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 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)
plot2d(z)
Eine einfache Alternative wären Liniendiagramme, etwa:
-->xbasc() -->plot2d3([1:1:10],z)
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.
STARTFolgende 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> <s,c,d,t,si > in F ===> Entweder Fall (i): Oder Fall (ii): |
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
Übungsaufgabe:
Testfragen: