% ########################################################################
% # Erste Schritte in Octave
% ########################################################################

% # Diese Datei ist ein Octave-Skript.

% ##################################################
% # Kommentare
% ##################################################
%  <-- so beginnt ein Kommentar. Alles ab diesem Zeichen bis zum Ende der Zeile wird nicht interpretiert.
%  Alles (ausser den Kommentaren) in dieser Datei ist zum Eintippen in die Octave-Konsole gedacht.

% ##################################################
% # Elementare Linux-Kommandos,
% # welche man auf der Octave-Kommandozeile
% # verwenden kann.
% ##################################################
%  Ausgabe des aktuellen Verzeichnis 
pwd % #(print working directory)

% Hilfe zu einem Befehl anzeigen lassen
help pwd

% man kann auch 'doc' an Stelle von 'help' aufrufen

%  Auflistungen der Dateien und Verzeichnisse im aktuellen Verzeichnis
ls %  oder auch 'dir'
%  oder mit Optionen: l fuer langes Listenformat
ls -l %(-l in der Regel nicht unter Windows)

%  change directory
cd .

% Octave beenden: z.B. 'quit', 'exit' oder Tastenkombination Str+d

% Mit der Pfeil-nach-oben-Taste holt man sich uebrigens wie ueblich
% die zuletzt verwendeten Befehle zurueck.

% ##################################################
% # Matrizen und Vektoren
% ##################################################
%  So sieht eine Variablendefinition aus 
x=2 %  "x = 2" wird auf der Konsole ausgegeben und ist ein Ausdruck mit dem Wert 2
% Zum Vergleich:
y=2; % y wird der Wert 2 zugewiesen, ohne dass etwas auf der Konsole ausgegeben wird.

% Ein paar Beispielrechnungen
z= x+y
z= x/y
z= 2^(x+y)
z= pi; %pi ist eine vordefinierte Konstante in Octave (so wie auch 'e', 'i',...)
z
z= z+2 % Erst wird die rechte Seite berechnert, also z gelesen und um 2 erhoeht.
       % Dann wird dieses Ergebnis in der Variablen z gespeichert.
       % Der alte Wert von z ist nicht mehr im Speicher!

% Ausgabeformat fuer Zahlen auf 'lang' setzen
format long
% Ausgabeformat auf 'kurz' setzen
format short

% Zeilenuebergreifende Kommandos:
z= 2+3+4+5+...
6 % Man beachte das geaenderte Prompt ">" der Komandozeile, was uns zeigt, dass Octave nach Input verlangt.

% Vektoren und Matrizen definieren
% Liegender Vektor
v= [1 2 3]
% v= [1,2,3]

% Stehend
w= [ 4; 5; 6; 7]
% Sehr nuetzlich
u= 4:7 % Zahlen von 4 bis 7 in 1er Schritten. Die eckigen Klammern darf man hier weglassen.
u= 4:0.5:7 % Schrittweite = 0.5

% Matrizen
A = [1 2 3; 4 5 6; 7 8 9]
% Nuetzlich: eingebaute Funktionen
B= ones(2,3) % Nur 1sen
C= zeros(3,4) % Nur 0en
D= rand(2,2) % Zufallszahlen
E= eye(3) % Einheitsmatrix
diag([1:10])
% Man sollte auch mal ones(2), zeros(4), rand(2) oder eye(4,3) ausprobieren

% Zugriff auf einzelne Matrixelemente
A(2,3) = 4
% Zugriff auf Spalten und Zeilen
A(:,1)
A(2,:)
A([1 3],:)

% Transponieren
v'
A'

% Matrix/Vektor-Dimensionen auslesen
size(A)
length(v)
numel(v)

% Matrix-Vektor-Multiplikation
C*w
A*v'
v'*v

% Wenn die Dimensionen stimmen, kann man auch mal +,- ausprobieren
% Komponentenweise Operatoren
2*A
A.*2
A.*A
A./A
A.^A
A^2
A.^2
A=rand(3,3);
A^(-1)
v.*v

% ##################################################
% # Loeschen von Variablen
% ##################################################
% Loeschen einer Variablen
clear A;
% Loeschen aller Variablen
clear;

% ##################################################
% # Information ueber die zur Zeit verwendeten
% # Variablen (und Funktionen) einholen
% ##################################################
who
who -variables
whos
whos -variables

% ##################################################
% # Mathematische Standardfunktionen
% ##################################################
sqrt(2)
sin(pi/2)
exp(pi/2)
log(2)
% auch Vektoren als Argumente sind erlaubt,
% die Funktion wird elementweise angewendet:
log(1:20)
log10(3)
log2(2)
% max, min, mean, sum und vieles mehr

% ##################################################
% Autovervollstaendigung mit zwei mal Tab-Taste.
% ##################################################
% Anfangsbuchstaben eines Befehls auf der Konsole eintippen, dann zwei mal Tab-Taste
% und es erscheint eine Liste mit moeglichen Befehlen, die so beginnen.


% ##################################################
% # Logische Operatoren
% ##################################################
% Literale
a=true;
b=false;
a&b
a&&b
a|b
%usw.

x=2
y=4
% Vergleiche
x==2
y==3
x<y
x<=y
x==y

A=[1 2 ; 3 4];
B=[-1 5 ; 3 9];
A<B % elementweiser Vergleich
% etc.


% ##################################################
% # Kontrollstrukturen
% ##################################################

% ##################################################
% # if-Anweisung
% ##################################################

% if Bedingung 1,
% Anweisungsfolge 1
% elseif Bedingung 2,
% Anweisungsfolge 2
% else Bedingung 3,
% Anweisungsfolge 3
% endif

x=1;
if x>0
  x=x+1
else
  x=0
endif

% ##################################################
% # while-Konstrukt
% ##################################################

% while Bedingung
% Anweisungen
% end

while (false)
  x=0;
endwhile

% ##################################################
% # for-Schleifen
% ##################################################
x=0;
for i=0:100 %<-- also i=0,1,2,...,100
	x=x+(0.5)^i;
endfor
x %<-- hier sollte jetzt eine 2 ausgegeben werden

% Das Eintippen von laengeren Programmen auf der Octave-Konsole ist nicht sehr sinnvoll.
% Daher verwendet man Skripte so wie diese Datei!

% Um dieses Skript auszufuehren, muss man auf der Octave-Konsole "basics" eintippen,
% also den Namen dieser Datei ohne ".m"!!!
% Es werden dann alle Befehle in dieser Datei hintereinander interpretiert und ausgefuehrt.

% Mit Strg+c koennt ihr Octave aus einer Endlosschleife holen.
% So eine kriegt man z.B. wenn man das Kommentarzeichen in folgender Zeile loescht und danach
% in octave "basics" tippt (und diese Datei sollte im Verzeichnis sein)
% basics

