Polynomy a racionální funkce

Zde je uvedeno několik funkcí pro práci s polynomy a racionálními funkcemi. Nebudeme zvlášť popisovat každou z nich, ale použijeme pouze komentářů. Podrobnější informace lze nalést v helpu.

> p1:=2*x+3*x^2+5*x^3+4;

p1 := 2*x+3*x^2+5*x^3+4

> sort(p1,x); #seřazení podle mocnin x
sort(p1); # x není v našem případě nutno zadávat

5*x^3+3*x^2+2*x+4

5*x^3+3*x^2+2*x+4

> p2:=a*x^3+b*x^3+2*c*x^2+3*c*x^2+e*x^2+d*x-1:sort(p2,x);

a*x^3+b*x^3+5*c*x^2+e*x^2+d*x-1

> collect(%,x); # sort "neumí" vytknout koeficienty u jednotlivých mocnin x, což umí příkaz collect

(a+b)*x^3+(5*c+e)*x^2+d*x-1

> factor(p1);

(x+1)*(5*x^2-2*x+4)

> expand(%);

5*x^3+3*x^2+2*x+4

> nops(p1); #počet členů
### WARNING: degree(0,x) now returns -infinity
degree(p1); #stupeň polynomu
coeff(p1,x,2); #koeficient u x^2
lcoeff(p1); #koeficient u nejvyšší mocniny
tcoeff(p1); #koeficient u nejnižší mocniny

4

3

3

5

4

Racionální funkce jsou podílem polynomů, takže pro ně lze použít i stejných příkazů.

> rac:=p1/(3*x^4-4*x^2+6*x^3+10*x-15);

rac := (5*x^3+3*x^2+2*x+4)/(3*x^4-4*x^2+6*x^3+10*x-...

> sort(rac);
`citatel`=numer(rac);
`jmenovatel`=denom(rac);

(5*x^3+3*x^2+2*x+4)/(3*x^4+6*x^3-4*x^2+10*x-15)

citatel = 5*x^3+3*x^2+2*x+4

jmenovatel = 3*x^4+6*x^3-4*x^2+10*x-15

> factor(rac);
factor(numer(rac))/expand(denom(rac));
expand(numer(rac))/factor(denom(rac));

(x+1)*(5*x^2-2*x+4)/((x-1)*(x+3)*(3*x^2+5))

(x+1)*(5*x^2-2*x+4)/(3*x^4+6*x^3-4*x^2+10*x-15)

(5*x^3+3*x^2+2*x+4)/((x-1)*(x+3)*(3*x^2+5))

Velmi potřebná je funkce convert , kterou lze provést mnoho převodů mezi různými formami racionální funkce.

> convert(rac,parfrac,x); #převod na částečné (parciální) zlomky

7/16*1/(x-1)+55/64/(x+3)+1/64*(-37+71*x)/(3*x^2+5)

> convert(rac,parfrac,x,real);

.8593749996*1/(x+3.)+.4375000000/(x-1.)+.3333333333...

Argumentů ve funkci convert[parfrac] lze mít několik (viz help). Následují další ukázky funkce convert.

> convert(%,rational); #nechci pracovat s čísly v plovoucí čárce

55/64*1/(x+3)+7/16/(x-1)+1/3*(-7527639/13020781+71/...

> convert(rac,confrac,x);

5/3*1/(x+7/5-193/75*1/(x+1319/965-34645/37249*1/(x-...

Do této kapitoly patří i celočíselné dělění a zbytek po něm.

> `podil`=quo(denom(rac),numer(rac),x,'r');`zbytek`=r; #zbytek se uloží do r

podil = 3/5*x+21/25

zbytek = -459/25-193/25*x^2+148/25*x

> `zbytek`=rem(denom(rac),numer(rac),x,'q');`podil`=q; #podobně, ale obráceně

zbytek = -459/25-193/25*x^2+148/25*x

podil = 3/5*x+21/25

Pro tyto výpočty lze požít i obecnější alternativy v podobě příkazů Rem a Quo , využívající příkazu mod .