Gimre 2011. okt. 12. 13:05 | válasz | #526
Sziasztok! Egy kis segitségre lenne szükségem. Itt van ez a module csak az a baj, hogy vmiért nem müködik én képtelen vagyok rájönni, hogy hol a hiba. Aki tud az kérem segítsen ebben. Elõre is köszönöm. Itt a program: polyops:=module() export leen, height, qnorm, boundRoots , boundRootsDense; options package; leen := proc (p::(polynom(constant)), x::name) convert(map(abs, [coeffs(expand(p), x)]), `+`) end proc; height := proc (p::(polynom(constant)), x::name) max(coeffs(collect(p, x, distributed, abs), x)) end proc; qnorm := proc (p::(polynom(constant)), x::name) sqrt(convert(map(z->z*conjugate(z) , [coeffs(expand(p), x)]), `+`)) end proc; boundRoots := proc (p::(polynom(constant)), x::name) local q, d, s, n, t, b, b1, b2, b3, bb4; q := collect(p, x, distributed, evalf); d := degree(q, x); s := lcoeff(q, x); n := nops(q); if d = ldegree(q, x) then RETURN(0) end if; if s <> 1. then q := expand(q/s) end if; b1 := 1+polyops:-height(q-x^d, x); b2 := max(1., len(q-x^d, x)); b := min(b1, b2); b3 := 0; bb4 := (n*abs(lcoeff(t, x)))^(1./(d-degree(t, x))); for t in q-x^d while b3 < b do b3 := max(b3, bb4); end do; userinfo(3, polyops, [b1, b2, b3]); min(b, b3); end proc; boundRootsDense:=proc(p::polynom(constant), x::name) local q, d, s, k, b, b4, b5; q:=collect(p,x, distributed,evalf); if ldegree(q)>0 then q:=expand(q/(x^(ldegree(q)))); end if; if type(q, constant) then RETURN(0); end if; d:=degree(q,x); s:=lcoeff(q,x); if s<> 1. then q:=expand(q/(s)) end if; b:=polyops:-boundRoots(q,x); b4:=convert([abs(coeff(q,x,0)),seq(abs(coeff(q,x,k-1)-coeff(q,x,k)),k=1..d)],`+`); if nops(q)<d+1 then b5:=infinity; elif type(q, polynom(positive,x)) then b5:=max(seq((coeff(q, x, k-1))/(coeff(q, x, k))), k=2..d); else b5: =max(abs((coeff(q, x, 0))/(coeff(q, x, 1))), seq(2*abs((coeff(q, x, k-1))/(coeff(q, x,k))), k=2..d); end if; end if; userinfo(3, polyops, [b, b4,b5]); min(b, b4 b5); end proc; end module;