function nicla=bisek_sturm(a,b,c,d,katera)
%BISEK_STURM vrne niclo
%z indeksom 'katera' na intervalu [c,d]
%nicla=BISEK_STURM(a,b,c,d,katera)
%a je stolpec koeficientov
%b je kvadriran stolpec originalnih b-jev z 0 na zacetku
%c in d krajisci intervala
%nicla je priblizek za niclo s polno natancnostjo
nicla=(c+d)/2;
while (nicla~=c) & (nicla~=d)
    if katera>predznaki(a,b,nicla);
        c=nicla;
    else
        d=nicla;
    end
    nicla=(c+d)/2;
end
function P=kar_poli(a,b);
%KAR_POLI vrne koeficiente polinoma, podanega z rekurzijo
%P=KAR_POLI(a,b);
%a je stolpec koeficientov (dim. n)
%b je stolpec koeficientov (dim. n-1)
n=length(a);
if n==1
    P=[-1 a(1)];
else
    T=zeros(3,n+1);
    T(1,end)=1;
    T(2,[end-1:end])=[-1 a(1)];
    for i=2:n
        T(3,:)=a(i)*T(2,:)-b(i-1)^2*T(1,:)-[T(2,2:end),0];
        T([1,2],:)=T([2,3],:);
    end
end
P=T(3,:);
function spr=predznaki(a,b,x)
%PREDZNAKI vrne stevilo sprememb predznakov
%v Sturmovem zaporedju polinomov
%stevilo sprememb predznakov pove, koliko lastnih
%vrednosti simetricne tridiagonalne matrike je 
%manjsih ali enakih x
%a stolpec koeficientov (dim n)
%b je stolpec koeficientov (na prvem mestu 0, dim n)
%elementi b so ze kvadrati originalnih b-jev
%x je vrednost v kateri racunamo polinome
p0=1;
p1=1;
spr=0;
n=length(a);
for k=1:n
    p2=(a(k)-x)*p1-b(k)*p0;
    if sgn(p2)~=sgn(p1)
        spr=spr+1;
    end
    p0=p1;
    p1=p2;
end
function p=sgn(x)
%SGN je popravljeni predznak
%p=SGN(x)
if x>=0
    p=1;
else
    p=-1;
endfunction nicle=sturm(a,b,seznam)
%STURM vrne dolocene nicle polinoma,
%podanega z rekurzijo p_0(x)=1;p_1(x)=(a_1-x);
%p_{k+1}(x)=(a_{k+1}-x)*p_k(x)-b_k^2*p_{k-1}(x)
%nicle=STURM(a,b,seznam)
%a je stolpec koeficientov (dim n)
%b je stolpec koeficientov (dim n-1)
%seznam je seznam indeksov nicel,
%ki jih zelimo
st=length(seznam);
nicle=zeros(st,1);
%vse nicle so med c in d (sledi iz teorije simetricnih tridiag matrik)
%-norm(A,inf) in norm(A,inf)
d=max(abs(a)+abs([0;b])+abs([b;0]));
c=-d;
b=[0;b.^2];%pripravimo b za ostale podprograme
for k=1:st;
    nicle(k)=bisek_sturm(a,b,c,d,seznam(k));
end
PK    \Gm5W    
  bisek_sturm.mUT	 %XE%XEUx d mON0+n6"Z!
Bžҋsd;APwv";ae9ل˺T.
FXg'7wz/4-DE/@0iv^0_ Dg[R`mY1It}3=jrX
>o.*K*
cA!~[ϵLZ @문dQ8X3]\\[TGNo!wn=AT~,&!9y83PK    \Gm5VF    
  kar_poli.mUT	 %XE%XEUx d 1O0J Aق<0"[*'7J	`u}DAn;7l©J>W7Ϗo	!t[_{	!(q;3؝4{q
_a; ɦ?SFGMdY+"%qCEVG[Z!5`TJ3K',0&]Te:&L*fp_DH/Q[hesiT˟9_PK    \Gm5U  8    predznaki.mUT	 %XE%XEUx d }Qj0Ǎan)(ec;oܵ;$=齤lԜGp[mzui&42\)vQq.djoىŚ3¨!
i"ĆP\

cg'j=J0(Cpb䦇>ZWP5Dݚ5l@*P3ˢI X86z8	Tnv\#FY뷢^Cq5J9t0תƲ
Ca6cqŮt+5IWyNNI}鮏*4?7PK    \Gm5VU   c     sgn.mUT	 %XE%XEUx d K+K.S(-NӨR
vSJU(/(J,JT((JMK
3*l
xК+58  PK    \Gm5 S{  k    sturm.mUT	 %XE%XEUx d n0[{{Cn;
!KLI	{QN
~"?>8R)ۄ/_%:FC9oeTZ:<JX!9ǕN´f0E9ݵ
?0O9&G<tn73pBH/R.M\a0]_[
)rMbR4'Rt!~xO"潤_-yAqq ҂V#d1GRp$`%+S,v^ZrT뵮hU9	<}7ݾ)^iXޟCH0*,1JuuN/?84L	Q#:]W PK    \Gm5W    
 
            bisek_sturm.mUT %XEUx  PK    \Gm5VF    
 
        S  kar_poli.mUT %XEUx  PK    \Gm5U  8   
          predznaki.mUT %XEUx  PK    \Gm5VU   c    
        &  sgn.mUT %XEUx  PK    \Gm5 S{  k   
          sturm.mUT %XEUx  PK      U  h    