% Einige Lösungsvorschläge - ohne Gewähr!!!
% =========================================
% 1(a) --- function y = piwurz(x)
A=sqrt(x.^2+3); B=sqrt(pi);
C=abs(A+B); D=abs(A-B);
if any(any(C>16*D)) warning('Stellenverluste.'); end;
y=1./(C-D);
% 1(b) ---
% obere Formel: |x| < 5 ==> Bitverluste. Genauer:
% untere Formel: 0,2 < |x| < 0,6 ==> Bitverluste
% 2(a) --- C=A'*B'*B*A; D=B*A; D=D'*D;
C_Flops=6*M^3; D_Flops=4*M^3;
disp('C ist aufwändiger');
% 2(b) --- P = -log10(abs(C-D)./abs(C+D))-1;
% 3(a) ---
% x,y Spaltenvektoren
B = [ones(size(x)) x.^2 sqrt(1-x.^2)];
c = B\y;
u = min(min(x)); v = max(max(x));
t = linspace(u,v,1001);
z = c(1) + c(2)*t.^2 + c(3)*sqrt(1-t.^2);
plot(t,z,'g',x,y,'r.');
% 3(b) ---
% Die in 3(a) errechnete Funktion ist nur eine Näherung,
% die nicht exakt durch die Knoten geht. Deshalb: trapz S = sortrows([x y],1);
I = trapz(S(:,1),S(:,2));
% 4(a) ---
% x,y Spaltenvektoren
B = [x.^2 y.^2]; e = ones(size(x));
c = B\e; a=1/sqrt(c(1)); b=1/sqrt(c(2));
A = pi*a*b;
% 4(b) --- global x y
c = fminsearch(@fqsum,[a b]);
% mit function-m-file:
function my = fqsum(c) global x y
a = c(1); b=c(2);
w = 1-(x/a).^2-(y/b).^2;
my= w'*w;
% 5(a) --- n=(2:N)';
% Tridiag. (N-1)x(N-1)-System mit den Diagonalen c d a:
c = -(1:N)'; d = 2*(n.^2-1); a = c-2;
% Rechte Seite:
b = zeros(size(c)); b(1) = -c(1); b(end) = -a(end);
% Lösung:
y = progonki(c,d,a,b);
% 5(b) --- h = (b-a)/N; x = a+(n-1)*h;
t = a:h/20:b; z = spline(x,y,t);
plot(t,z,'b',x,y,'r.');
% 6(a) --- function f = sinfak(x)
f = sin(pi*gamma(x+1));
% Aufruf:
I = quadl(@sinfak,0,3,[],1.e-15);
% 6(b) --- f3 = inline('gamma(x+1)-3'); x3=fzero(f3,2.5);
f4 = inline('gamma(x+1)-4'); x4=fzero(f4,2.5);
f5 = inline('gamma(x+1)-5'); x5=fzero(f5,2.5);