B12

Contents

Called Functions

A45

A45
v0 =

    41
    42
    17


A =

    0.9000    0.0200    0.1300
    0.0400    0.9000    0.0700
    0.0600    0.0800    0.8000


m =

    12


v =

  Columns 1 through 7

   41.0000   39.9500   39.2922   38.9073   38.7097   38.6383   38.6496
   42.0000   40.6300   39.5244   38.6265   37.8928   37.2897   36.7913
   17.0000   19.4200   21.1834   22.4662   23.3975   24.0720   24.5591

  Columns 8 through 12

   38.7132   38.8076   38.9184   39.0355   39.1525
   36.3773   36.0318   35.7421   35.4984   35.2926
   24.9096   25.1606   25.3395   25.4661   25.5549

A46

A46for(5)
A46rek(5)

% an ist monoton
n  = 1;
an = 3;
while an < 1000
    an = A46for(n);
    n  = n+1;
end
n
ans =

    3.3735


ans =

    3.3735


n =

    55

A47

Test zur Genauigkeit

dims = [1:160];  err = 0* dims;
errmod = 0*dims; errref = 0*dims;

for dim = dims
  A = randn(dim);
  [Q,R] = modgramschmidt(A);
  errmod(dim) = max(max(abs(Q*Q'-eye(dim))));
  [Q,R] = qr(A);
  errref(dim) = max(max(abs(Q*Q'-eye(dim))));
end

semilogy(dims,errmod,'o',dims,errref,'rx')
shg

A48

load('Flugplan.mat')
% von
k=3;
% nach
j=10;

[n,f]=flug_suche(A,k,j);

disp(['Flug von ', num2str(k),' nach ', num2str(j)])
disp(['Besteht  aus ',num2str(n),' Flügen.'])
disp(['Route ',num2str(f)])
Flug von 3 nach 10
Besteht  aus 4 Flügen.
Route 3   2   6   8  10
A45
function A45
v0 = [41;42;17]
A  = [0.90 0.02 0.13;
      0.04 0.90 0.07;
      0.06 0.08 0.80]
m = 12
v = zeros(3,m);
w = zeros(3,m);
v(:,1) = v0;
w(:,1) = round(v0);
for i = 2:m
    v(:,i) = A*v(:,i-1);
    w(:,i) = round(v(:,i));
    if sum(w(:,i)) < 100
        k = find(v(:,i)-w(:,i)==max(v(:,i)-w(:,i)));
        w(k,i) = w(k,i) +1;
    elseif sum(w(:,i)) > 100
        k = find(v(:,i)-w(:,i)==min(v(:,i)-w(:,i)));
        w(k,i) = w(k,i)-1;
    end
end
v
bar(w','stacked')
xlabel('Zeit(Monate)','FontSize',16)
ylabel('Wähler','FontSize',16)
A46for
function an=A46for(n)

a = zeros(max(2,n),1);
a(1) = 3;
a(2) = 1;
for i = 3:n
    a(i) = 1.1 * a(i-1) + abs(sin(a(i-2)));
end
an = a(n);

end
A46rek
function an=A46rek(n)

if n == 1
    an = 3;
elseif n == 2
    an = 1;
else
    an = 1.1 * A46rek(n-1) + abs(sin(A46rek(n-2)));
end

end
flug_suche
function [n, f] = flug_suche(A,k,j)
% [n, f] = flug_suche(A,k,j)
% Sucht eine Route von k nach j bei gegebenem Flugplan A
% n = Anz. Flüge
% f = Vektor aller Zwischenstops [k ... j].
A1 = A;
maxn = length(A);
if k==j %Nichts zu tun.
    n=0;
    f=[j];
else
    %Zähle Flüge.
    n = 1;
    while A1(k,j) == 0
        A1 = A1*A;
        n = n+1;
        if n>maxn
            n = inf;
            f = inf;
            return
        end
    end
    %Bestimme Flugplan
    C{1,1} = k;     % C{1,:} Flugpläne
    C{2,1} = k;     % C{2,:} Letzter Flughafen

    for s=1:n  % Es sind min. n Flüge notwendig.
        m=1;
        for i=1:size(C,2)   %Schleife über alle Flugpläne.
            T = find(A(C{2,i},:));  %Mögliche Flüge vom Letzter Flughafen.
            for I=1:length(T)       %Schleife über Mögliche Flüge.
                D{1,m}=C{1,i};      % D{1,:} Flugpläne
                D{2,m}=T(I);        % D{2,:} Letzter Flughafen
                m=m+1;
            end
        end
        C=D;
        for i=1:size(C,2)
            C{1,i}=[C{1,i} C{2,i}]; %Ergänze Flugplan.
        end
    end
    I=find([C{2,:}]==j);    %Wähle den richtigen Plan.
    f=C{1,I};
end
end
modgramschmidt
% Modifizierte Gram-Schmidt Orthogonalisierung
function [Q,R] = modgramschmidt(A)
% Eingabe: Matrix A (n x m)
% Ausgabe: Matrix Q (n x m) mit orthonormalen Spalten
%          Matrix R (m x m) obere Dreiecksmatrix

[n,m] = size(A);

Q = zeros(n,m);
R = zeros(m,m);
for j = 1:m
   Q(:,j) = A(:,j);
   % Orthogonalisiere Q(:,j) gegen Q(:,1),...,Q(:,j-1)

   % Berechne die Koeffizienten R(i,j) mit aktuellem Q(:,j) statt A(:,j)
   R(1:j-1,j) = Q(:,1:j-1)'*Q(:,j);
   Q(:,j) = Q(:,j) - Q(:,1:j-1)*R(1:j-1,j);

   % Normiere Q(:,j)
   R(j,j) = norm(Q(:,j));
   Q(:,j) = Q(:,j)/R(j,j);
end