

%lznk

%testujemy /
A=[1 1 1;1 2 1]';b=[2 3 2]';
x=A\b %czy wyszedl x=[1;1]?

%testujemy rozwiazanie LZNK poprzez rozklad qr i ukl r. normalnych

[Q,R]=qr(A);
A-Q*R %czy zero?
Q'*Q %czy Id?
y=R(1:2,:)\(g=Q'*b)(1:2)
z=(A'*A)\(A'*b)
[norm(x-y),norm(z-x)]

%krzywa najlepiej pasujaca do pktóœ (xk,yk)
%tzn krzywa ax^2+b^y^2=1 
%minimalizujaca \sum_k |a*x*x+b*y*y-1|^2 

function [a,A,f]=npaskrzywa(x,y)
  A=[x.*x,y.*y]; %x,y ,kolumny! 
  f=ones(length(x),1);
  a=A\f;
end
M=10;
x=0.5*(rand(M,1)-0.5); %losowe pkty z [-0.5,0.5]
y=sqrt(1-2*x.*x);
d=randn(M,1);
y=sign(d).*y;

[a,A,f]=npaskrzywa(x,y)
norm(2*x.*x+y.*y-1,"inf")
 
s=linspace(-0.5,0.5,200);
plot(s, sqrt(1-a(1)*s.*s)/a(2),s, -sqrt(1-a(1)*s.*s)/a(2),x,y,"*")



%testujemy mnozenie przez m Householdera 
function Y=HouseX(X,w,a=w'*w)
 Y=X-((2/a)*w)*w'*X;
end  
M=10;
u=randn(M,1);v=randn(M,1);
u=u/norm(u);v=v/norm(v);
w=u-v;
Hv=HouseX(v,w);
norm(u-Hv)
Hu=HouseX(u,w);
norm(v-Hu)

u=randn(M,1);
w=u;w(1)=w(1)+sign(w(1))*norm(u);
HouseX(u,w)

%testujemy czy znak w doborze w(1) wazny
tol=1e1*eps(single(1));
for k=1:7,
  
u=[1;tol*randn(M-1,1)];
u=single(u);nu=norm(u);
w=u;w(1)=w(1)+sign(w(1))*nu;
v=HouseX(u,w);
w2=u;w2(1)=w2(1)-sign(w(1))*nu;
v2=HouseX(u,w2);
[tol norm(v(2:end)),norm(v2(2:end))]
tol*=10;
end
%dla tol ok 1e-4 mamy trzy rzedy utraty dokladnosci... co dla
%precyzji single jest sporo
