

#zad 1 eps maszynowy
#a) znalezc k takie ze 2^{-k+1}+1=1 w fl ale 2^{-k}+1>1
disp("zad 1 eps maszynowy");
k=0;a=1;
while(a+1>1)
 k++;
 a/=2;
end
k--
a*2
#porownujemy z eps 
b=eps
a-b

#b t osamo dla 1000

k=0;a=1;
while(a+1000>1000)
 k++;
 a/=2;
end
k--
a*2
#porownujemy z eps 
b=eps(1000)
a-b

#zad 2 wykres (x-a)+a na [0,1] dla coraz wiekszych a np a=5^k k=1,..,30
disp("zad 2 wykres y=(x+a)-a dla a=5^k k=1,..,30 ")
x=linspace(0,1,1000);
k=1;
a=5;
for k=1:30,
 podpis=[";k=", num2str(k), ";"];
 plot(x,(x-a)+a,podpis);
 k++;a*=5;
if(k>17)
 pause(1);
endif 
end


#zad 3 wykres (x-2)^4 oblicznej na 2 sposoby
# jako (x-2)(x-2)(x-2)(x-2)
# i z rozwiniecia w dwumian Newtona x^4-8x^3+24x^2+32x+16
# na [a-2,a+2] dla a=1e-2,1e-3,1e-4
disp("wykresy (x-2)^4 liczony na 2 sposoby");
a=1e-2;
for k=1:3,
 x=linspace(2-a,2+a,1000);
 y1=(x-2).*(x-2);y1=y1.*y1;
 y2=16-32.*x;
 xx=x.*x;y2=y2+24*xx;
 xx=x.*xx;y2=y2-8.*xx;
 y2=y2+xx.*x;
 podpis=[";((x-2)^4 na |x-1e-",num2str(k),"|;"]  ;
 plot(x,y1,podpis,x,y2,";x^4-..;");
 pause(1);
 a=a/10;
endfor



#z4 exp(x) z rozwiniecia w szereg - porownac z exp(x) - f octave'a
disp("exp(x) z rozwiniecia")
function y=nexp(x,N=1000)
#liczy sume szeregu rozwiniecia e^x
#y=\sum_{k>=0} x^k/k!

y=1;xx=1;

for k=1:N,
 xx=xx.*x/k; #x^k/k=x^(k-1)/(k-1)!*(x/k)!
 y=y+xx;
endfor
endfunction

t=-100:10:100;
y=exp(t);
ny=nexp(t);
#bb blad bezwgledny bw wzgledny 
bb=(y-ny)
bw=bb./y

#korygujemy nasza funkcje

function y=nexp1(x,N=1000)
#liczy sume szeregu rozwineicia e^x
#y=\sum_{k>=0} x^k/k! dla x>=0
#y=1/nexp(-x) x<0
x1=abs(x); #x1=|x|
y=1;
yp=1;xx=1;
for k=1:N,
 xx=xx.*x1/k; #x^k/k=x^(k-1)/(k-1)!*(x/k)!
 y=y+xx;
endfor

y=(1./y).*(x<0)+y.*(x>=0);
endfunction

t=-100:10:100;
y=exp(t);
ny1=nexp1(t);
#bb1 blad bezwgledny bw1 wzgledny 
bb1=(y-ny1)
bw1=bb1./y
#druga funckja liczy duzo lepiej 
#mozmy sprawdzic zaleznosc od N
x=1;y=exp(x);
for N=10:30:1000,
 ny=nexp1(x,N);
 printf("[N=%d] BB=%g BW=%g\n",N,y-ny,(y-ny)/y);
end 
#zalezy ale tylk ona poczatku dla N <= ok 20
#sprwdzmy dokladnie
for N=10:30,
 ny=nexp1(x,N);
 printf("[N=%d] BB=%g BW=%g\n",N,y-ny,(y-ny)/y);
end 
#moze dla innych x b zalezy?
x=100;y=exp(x);
for N=10:30:1000,
 ny=nexp1(x,N);
 printf("[N=%d] BB=%g BW=%g\n",N,y-ny,(y-ny)/y);
end 



