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;