%% Vorlesung 11.10.2024
% Vektoren und Matrizen
%   (change font size in editor: Preference -> Fonts)
%   <http://www.zeit.de/2014/42/sebastian-betz-code-talks-entwicklerkonferenz-hamburg/seite-2 „In der IT-Branche liegt die Zahl ...“>
close all; clc; clear;

%% Zeilenvektor (dreimal derselbe Vektor)
x = [1 , 3 , 5 , 7, 9];        % Elementaufzaehlung mit ","
x = 1:2:9                      % Doppelpunktnotation (wenn moeglich)
                               % ab 1 bis 9 mit Schrittweite 2
x = linspace(1,9, 5);          % 5 aequidistante Elemente aus dem Intervall [1,9]

size(x)                        % Dimensionen
length(x)                      % Anzahl der Vektorelemente

%% Spaltenvektor

y = [2;4;6;8;10]; % Spaltenvektor mit ";"
y = (2:2:10).'    % Zeilenvektor mit .'  in Spaltenvektor umwandeln, 
                  %   hier waere auch die Zuweisung y = y.'  moeglich gewesen.  

size(y)           % Dimensionen
length(y)         % Anzahl der Vektorelemente

%% Elementweise Operation:  .^ ./  .* 
x = linspace(0,10,51);
y = exp(sin(x).^2)+x./(1+x);           % Elementweise Operationen
plot(x,y)
% aber  +  -
z = x+y;                               % elementweise addition

%% dynamisch wachsender Vektor
clear
x = [];                             %               0x0
x = [x , 1];                        % Skalar        1x1
x = [x , 3:2:9];                    % Zeilenvektor  1x5

%% Generiere Vektor aus zwei Vektoren
y = 2:2:10;                 % Zeilenvektor  1x5
whos 
x = [x, y];                 % Vektoren (Matrizen) muessen gleiche Zeilenanzahl haben!
size(x)
%% Indizes
z = x(2:2:end)              % auf jedes 2. Element zugreifen
z = x(y)                    % aequivalent ueber Indexvektor y

%% Loeschen von Vektorelementen
v = z                       % wir benoetigen z weiter unter nochmal
v(2) = []                   % 2. Element aus Vektor v entfernen
v(1:2) = []                 % die ersten beiden Elemente aus Vektor v entfernen
v(:) = []                   % alle Vektorelemente entfernen ( v = [] geht auch)

clear v                     % Entferene Varianle v aus Workspace

%% generiere Matrix ueber Elementliste, zeilen-/spaltenweiser Zugriff
A = [3 ,-2, 5, 4 ; 2, 4, 0, 1; 0, -1, 3, 2]   
size(A)                     % 3x4 Matrix

B = A(2,:)                  % 2. Zeile der Matrix
B = A(2,1:end);             %    dasselbe
B = A(2,1:1:end);           %    dasselbe

C = A(:,3)                  % 3. Spalte der Matrix

%% Generiere Matrix durch Kombination von Vektoren (Matrizen)
whos y z
A = [ y; z]                     % 2x5 Vektoren (Matrizen) muessen gleiche Spalten anzahl haben!
B = [ y.', z.']                  % 5x2 Vektoren (Matrizen) muessen gleiche Zeilenanzahl haben!
A = [A; y]                       % 3x5 Vektoren (Matrizen) muessen gleiche Spaltenanzahl haben!
%                                  Zweite Zeile von A als neue 4. Zeile anfuegen
A = [A ; A(2,:)]                 % 4x5
%                                  4.Spalte von A als neue 1.Spalte
A = [ A(:,4) , A ]               % 4x6
%                                  Loeschen der ehemals 4. Spalte (jetzt
%                                  die 5. Spalte
A(:,5) = []                      % 4x5
%                                  obige 2 Anweisungen in einem Schritt
A = [ A(:,4), A(:,1:3), A(:,5:end)]
%                                  genaus dasselbe, aber mit Index-Vektor
A = A(:,[4, 1:3, 5:end])


%% Loeschen von Zeilen/Spalten einer Matrix

%                                  Loesche jede 2. Zeile
A(1:2:end,:) = []                % 2x5

%                                  Losche die beiden letzten Spalten
A(:,end-1:end) = []              % 2x3





