
% Beispiel 3.1  Definition von Vektoren und Matrizen

>> ZeilVekt=[1 5 -3]
ZeilVekt =
     1     5    -3
>> SpaltVekt= [2; 6; -4]
SpaltVekt =
     2
     6
    -4
>> spalt1=[1 2]'; spalt2=[3 4]';
>> mat22=[spalt1 spalt2]
mat22 =
     1     3
     2     4
>> mat23=[mat [5 6]']
mat23 =
     1     3     5
     2     4     6
>> t=[-1:0.5:2]   % implizite For-Schleife
t =
     -1   -0.5   0.0   0.5   1   1.5   2
>> M=[ones(2) [0 0]'] % Erzeugung von Werten durch eine Funktion
M =
     1     1     0
     1     1     0
     
     
% Beispiel 3.2  Elementzugriff auf Vektoren und Matrizen

>> mat23(2,1)
ans = 2
>> mat23(1, [1 3])
ans = 1     5
>> mat23(1, [1:3])
ans = 1     3     5
>> mat23(:,1)
ans = 1
      2
      
      
% Beispiel 3.3  Definition von Strukturen

>> person1.name=’Maier’;
>> person1.alter=31;
>> person1.groesse=1.85;
>> person2=struct('name', 'Huber', 'alter', 29, 'groesse', 1.90);


% Beispiel 3.4  Definition von Cell Arrays

>> aa=[1 2 3];         % einfaches Array
>> cc={'text' 3.5 aa}  % Cell Array
>> cc = 
    'text'    [3.5000]    [1x3 double]
>> cc{1}               % Elementzugriff
ans = text


% Beispiel 3.5  Matrixoperationen

>> v1 = [1 2]; v2 = [2 2]';
>> v3 = v1 + v2
??? Error using ==> plus
Matrix dimensions must agree.

>> v4 =  v1 * v2
v4 = 6
>> v5 = v2 * v1
v5 = 
     2     4
     2     4
  
     
% Beispiel 3.6  Elementweise Matrixoperation

>> v1.*v2
??? Error using ==> times
Matrix dimensions must agree.
>> mat1=[2 2; 2 2]; mat2=[3 3;3 3];
>> mat1*mat2
ans =
    12    12
    12    12
>> mat1.*mat2
ans =
     6     6
     6     6
     
% Beispiel 3.7  Berechnung von Einheitsvektoren aus drei Punkten

zvek=(p2-p1)/norm(p2-p1)
hilfvek1=(p3-p1)/norm(p3-p1); % definiert die Ebene des x-Vektors
hilfvek2=cross(zvek,hilfvek1);
yvek=hilfvek2/norm(hilfvek2)
xvek=cross(yvek,zvek)

% Beispiel 3.8  Berechnung der ersten Ableitung einer Parabel

t=0:0.01:2;
s=t.^2;
plot(t,s)   % Grafikausgabe
grad=gradient(s,0.01);
hold on     % bewirkt, dass die vorherige Grafik erhalten bleibt
plot(t,grad)

% Beispiel 3.9  Behandlung von Zeichenketten

A = ['abc 46 6 ghi'; 'def 7 89 jkl'];
B = sscanf(A, '%*s %d %d %*s', [2, inf])

B = 476
    869

sprintf('Zahl %4.2f', 63.567)
ans = Zahl 63.56

[token reststring] = strtok('koordinate: 10.5 20.6 30.7')
token = koordinate;
reststring = 10.5 20.6 30.7

ss={'max' 'minimax' 'maxmin'};
indizes = strmatch('max', ss)
indizes = 1
          3
          
% Beispiel 3.10  Definition von Funktionen

function [aus1 aus2]= fun_beispiel(ein1, ein2)
%  Hier erfolgt eine Beschreibung der Funktion, 
%  Eingabeparameter: Datentyp, Bedeutung
%  ...
%  Ausgabeparameter: Datentyp, Bedeutung
%  ...

%  Diese Leerzeile bewirkt, dass nur der davorstehende 
%  Kommentar mit dem help-Kommando angezeigt wird

%  Datum:   Autor:  
%  Aenderungen:
%  Datum:  Autor:  
%          Kurzbeschreibung der Veränderung

% Beispiel für einen Funktionskörper
 
if ein1 == 0
    return
end
var1=ein2;
aus1=ein1;
aus2=priv_fun_beispiel(var1);
end


function aus_priv=priv_fun_beispiel(ein_priv)
% Hier erfolgt eine Beschreibung der Funktion
 
% Beispiel für einen Funktionskörper

aus_priv=ein_priv;
end

% Beispiel 3.11  Abfangen einer Standardfehlermeldung

function test_ausnahme
v1=[1 1]; v2=[2 2];
try
    v3=v1*v2;
catch
    fprintf('Fehlermeldung abgefangen\n');
    s=lasterror;
    rethrow(s)
end

>>
Fehlermeldung abgefangen
identifier =MATLAB:innerdim
??? Error using ==> mtimes
Inner matrix dimensions must agree.

% Beispiel 3.12  Zweidimensionale Grafikausgabe

function grafik_2d_beispiel
subplot(2,1,1)          % obere Teilgrafik
X=0:0.2:2*pi;   
SIN=sin(X);
COS=cos(X);
hold on
plot(X,SIN,'R-o');
plot(X,COS,'G:x');
title ('Sinus-  und Kosinusfunktion im Interval [0 2*pi]');
xlabel('x-Achse'); ylabel('y-Achse');
axis([0 2*pi -1.5 1.5]);
legend('Sinuskurve','Kosinuskurve')
grid on
 
subplot(2,1,2)           % untere Teilgrafik
X_Parabel=-2:0.1:2;
PAR=X_Parabel .* X_Parabel; % elementweise Multiplikation
plot(X_Parabel,PAR);
title ('Parabel im Interval [-2 2]');
xlabel('x-Achse'); ylabel('y-Achse');
axis([-2 2 -1 5]);
legend('Parabel')
grid on


% Beispiel 3.13  Schnitt zweier Geraden in der Ebene

% g1:  x=a+k1*u;  g2: x=b+k2*v;   Spaltenvektoren

a=[2 0]’; u=[0 1]’;
b=[0 -1]’; v=[1 0]’;
A=[u -v]; r=b-a; % Systemmatrix und Störvektor
k=A\r;
s1=a+k(1)*u      % Schnittpunkte s1 und s2 sind gleich
s2=b+k(2)*v


% Beispiel 3.14  Abstand von zwei Geraden im Raum

% g1:  x=a+k1*u;  g2: x=b+k2*v;   nur Spaltenvektoren

a=[2 0 0]’; u=[0 0 1]’;
b=[0 0 0]’; v=[0 1 0]’;
A=[u -v]; r=b-a; % Systemmatrix und Störvektor
k=A\r;
s1=a+k(1)*u     % Punkte mit kürzesten senkrechten Abstand
s2=b+k(2)*v
diff=s2-s1;
d=norm(diff)    % Länge des Differenzvektors ergibt den Abstand


% Beispiel 3.15  Schnitt von Gerade und Ebene

% g:  x=u+k1*v;  E: dot((x-q),n)=0; dot(v,n)~=0;
 
u=[0 2 1]';  v=[1 0 0]';
q=[3 0 0]';  n=[1 0 0]';
ks=dot(q-u,n)/ dot(v,n);
s=u+ks*v


% Beispiel 3.16  Senkrechter Abstand von Punkt und Gerade im Raum

% g:  x=a+k*u; 

a=[1 0 2]'; u=[0 1 0]';
p=[2 2 1]'; 
kf=dot(p-a, u)/ dot(u,u);
f=a+kf*u;
d=norm(p-f) % senkrechter Abstand


% Beispiel 3.17  Hesse-Normalenform zur Berechnung des senkrechten Abstandes eines
%                Punktes von einer Ebene

% E:  (x-q)*n=0, |n|=1;    
 
q=[2 0 0]'; n=[3 0 0]'; % Ebene
p=[1 2 1]';             % Punkt ausserhalb der Ebene
n0=n/norm(n);
d=dot(p-q,n0)



% Beispiel 3.18  Schnitt zweier Ebenen


% E1: P1, P2, P3;    g1: x=p1+k*(p2-p1); g2: x=p1+k*(p3-p1);
% E2: Q1, Q2, Q3,    n=cross(q2-q1, q3-q1); (x-q1)*n=0;
% gs: x=as+k*us;
 
p1=[3 0 0]'; p2=[3 0 5]'; p3=[3 2 1]';
q1=[0 0 2]'; q2=[1 0 2]'; q3=[2 2 2]';
 
n=cross(q2-q1,q3-q1);
ks1=dot(q1-p1, n)/ dot(p2-p1, n);
s1=p1+ks1*(p2-p1);
ks2=dot(q1-p1, n)/ dot(p3-p1, n);
s2=p1+ks2*(p3-p1);
as=s1    % Hinführungsvektor der Schnittgeraden
us=s2-s1 % Richtungsvektor der Schnittgeraden


% Beispiel 3.19  Berechnung eines Winkels im Dreieck

a=3; b=3; c=3;   % gleichseitiges Dreieck
alpha=acos((b^2+c^2-a^2)/(2*b*c)); % Kosinussatz


% Beispiel 3.20  Berechnung des Winkels zwischen zwei Vektoren mit Drehsinn

% Vektoren v1, v2, Winkel alpha, Drehvektor dv
  
v1=[3 0 0]; v2=[0 3 0]; dv=[0 0 2];
zw=dv; zw=zw/norm(zw);
yw=cross(zw,xw);
W=[xw yw zw [0 0 0]’; [0 0 0 1]];
v2_trans_h=inv(W)*[v2;1];
alpha=atan2(v2_trans_h(2), v2_trans_h(1))



% Beispiel 3.21  Drehung um die z-Achse

function R = rotz(w)
    cw = cos(w); sw = sin(w);
    R =  [	cw  -sw 0   0
        	sw  cw  0   0
        	0   0   1   0
        	0   0   0   1];
        
            
            
% Beispiel 3.22  Drehung um eine Raumgerade
% gd: x=a+k*u
 
a=[1 0 0]'; u=[0 0 2]'; phi=pi/2;
p=[2 0 0]'; % Punkt P als Objekt

zd=u/norm(u);            % Drehachse
xd=cross([0 0 1]',z);    % xd parallel zu xy-Ebene
if norm(xd)>eps 
  xd=xd/norm(xd);
else
    xd=[1 0 0]';        % zd ist parallel zu z
end
yd=cross(zd,xd);
D=[xd yd zd a;[0 0 0 1]]; %Drehkoordinatensystem
p_h=[p;1];
p_h_d=D*rotz(phi)*inv(D)*p_h;
p_d=p_h_d(1:3)

>>
p_d =   % Ortsvektor des gedrehten Punktes P
     1
     1
     0

     
% Beispiel 3.23  Berechnung einer Differenztransformation

% Vorgegeben sind drei gemeinsame Punkte A, B, C 
% in den Koordinatensystemen K und L

ak=[2 0 1]'; bk=[2 1 1]'; ck=[2 0 2]';    % Punkte A,B,C in K
al=[-1 0 0]'; bl=[-1 1 0]'; cl=[-2 0 0]'; % Punkte A,B,C in L
 
% Definition des Koordinatensystems KMT über drei Punkte A,B,C
ukm=ak; 
zkm=(bk-ak)/norm(bk-ak);
ykm=cross(zkm, ck-ak); ykm=ykm/norm(ykm);
xkm=cross(ykm,zkm);
KMT=[xkm ykm zkm ukm;[0 0 0 1]];
 
% Definition des Koordinatensystems LMT über drei Punkte A,B,C
ulm=al; 
zlm=(bl-al)/norm(bl-al);
ylm=cross(zlm, cl-al); ylm=ylm/norm(ylm);
xlm=cross(ylm,zlm);
LMT=[xlm ylm zlm ulm;[0 0 0 1]];
 
>>
 KLT= KMT*inv(LMT)        % Differenztransformation KLT
 KLT =
     0     0     1     2
     0     1     0     0
    -1     0     0     0
     0     0     0     1

     
% Beispiel 3.24  Implementierung der inversen ZYZ-Eulertransformation

function [alpha beta gamma ]=inv_zyz_euler(OM,kf)
 
delta=0.0001; % Überprüfung von beta auf 0, Singularität
a=OM(1:3,3); o=OM(1:3,2); n=OM(1:3,1);
beta= atan2(norm([a(1) a(2)]), a(3));
if abs(beta)>delta                    % beta größer null
    alpha=atan2(a(2),a(1)); % kf=1
    gamma=  atan2(o(3),-n(3));
    if kf==2
       if alpha>=0
           alpha=alpha-pi;
       else
           alpha=alpha+pi;
       end
       beta=-beta;
       if  gamma>=0
           gamma=gamma-pi;
       else
           gamma=gamma+pi;
       end
    end;
   
else                          % beta gleich null
    alpha= atan2(n(2),n(1));
    if kf==2
       if alpha>=0
           alpha=alpha-pi;
       else
           alpha=alpha+pi;
       end
     end;
  
    beta=0; gamma=0;
end


% Beispiel 3.25  Berechnung eines Übergangspolynoms 3. Grades zwischen zwei Strecken

% Polynom P3(x)= p3*x^3 + p2*x^2 + p1*x + p0, 
% definiert durch vier Punkte A, B, C, D mit
% ax < bx < cx <dx

a=[0 0]'; b=[1 0.5]'; c=[2 2]'; d=[3 1.5]'; 
if not( a(1)<b(1) & b(1)<c(1) & c(1)<d(1) )
    error ('x-Komponenten der Punkte sind nicht aufsteigend')
end

schrittweite=0.01;
m1=(b(2)-a(2))/(b(1)-a(1));         % Steigung in B
m2=(d(2)-c(2))/(d(1)-c(1));         % Steigung in C

A=[b(1)^3   b(1)^2 b(1) 1;          % Bedingungsgleichungen
   c(1)^3   c(1)^2 c(1) 1;
   3*b(1)^2 2*b(1) 1    0;
   3*c(1)^2 2*c(1) 1    0 ];
k=[b(2) c(2) m1 m2]';
poly_para=A\k;
 
X1=[a(1) b(1)];                     %Strecke AB
Y1=[a(2) b(2)];
X2=b(1):schrittweite:c(1);          % Polynom
P3=polyval(poly_para,X2);   
X3=[c(1) d(1)];                     % Strecke CD
Y3=[c(2) d(2)];
hold on; grid on 
plot(X1, Y1); plot(X2, P3); plot(X3, Y3);
plot(a(1),a(2),'Ro',b(1),b(2),'Ro',…
     c(1),c(2),'Ro',d(1),d(2),'Ro');
title('Polynom 3.Grades als Übergangsfunktion');
xlabel('x-Achse'); ylabel('y-Achse');


% Beispiel 3.26  Berechnung der Jacobimatrizen zur Darstellung des differentiellen 
%                Zusammenhangs zwischen kartesischen Koordinaten und Polarkoordinaten

% vorgegebener Arbeitspunkt
p1=pi/6; p2=2;

% Kart. Koordinaten als Funktion der Polarkoordinaten
% und resultierende Jacobimatrix XP
x1=p2*cos(p1); x2=p2*sin(p1);
XP(1,1)=-p2*sin(p1); XP(1,2)=cos(p1);
XP(2,1)=p2*cos(p1); XP(2,2)=sin(p1);
XP

% Polarkoordinaten als Funktion der kartesischen Koordinaten
% und resultierende Jacobimatrix PX
p1_n=atan(x2/x1); p2_n=sqrt(x1^2+x2^2);
PX(1,1)=-x2/(x1^2*(1+(x2/x1)^2));
PX(1,2)=1/(x1*(1+(x2/x1)^2));
PX(2,1)=x1/sqrt(x1^2+x2^2);
PX(2,2)=x2/sqrt(x1^2+x2^2);
PX

% invertierte Jacobimatrix
Inv_XP=inv(XP)
>>
XP =
   -1.0000    0.8660
    1.7321    0.5000
PX =                 % gleich Inv_XP
   -0.2500    0.4330
    0.8660    0.5000




     





























     
     

