A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
Gimre #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;