# Polynomy a racionální funkce

## Polynomy

p1:-3*x+7*x^2-3*x^3+7*x^4;

polynomialp(p1,[x]);

coeff(p1,x,4);

coeff(p1,x);

load(powers)$

powers(p1,x);

### Sčítání a násobení polynomů

p2:5*x^5+3*x^3+x^2-2*x+1;

2*p1-3*p2+3;

expand(%);

2*p1-3*p2+3, expand;

p1*p2;

expand(%);

Maxima neprovádí roznásobení automaticky.

(3*x+5)^10;

expand(%);

expr:(x+1)^2*(y+1)^3;

expand(expr);

expand(expr,2);

expr:(x+1)^-2*(y+1)^3;

expand(expr,p,n) provede roznásobení jen u členů, jejichž mocniny jsou od -n do p.

expand(expr,2,2);

Členy polynomu jsou automaticky setříděny sestupně vzhledem ke stupni. 

### Dělení se zbytkem, největší společný dělitel

q : quotient(p2,p1);

r : remainder(p2,p1);

is (p2=expand(q*p1+r));

divide(p2,p1);

gcd(p2,p1);

pol:expand(p2*p1);

factor(pol);

gfactor pracuje s oborem komplexních čísel

gfactor(pol);

p:x^2+1;

factor(p);

gfactor(p);

pol:8*x^3-12*x;

factor(pol);

grind;

### Polynomy více proměnných

pol:6*x*y^5+12*y^4+14*y^3*x^3 -15*x^2*y^3 + 9*x^3*y^2 - 30*x*y^2 - 
35*x^4*y + 18*y*x^2 +21*x^5;

ordergreat(x,y);

6*x*y^5+12*y^4+14*y^3*x^3 -15*x^2*y^3 + 9*x^3*y^2 - 30*x*y^2 - 
35*x^4*y + 18*y*x^2 +21*x^5;

unorder();

factor(pol);

collectterms(pol, x);

collectterms(pol,y);

## Racionální funkce

r:(x^2+3*x+2)/ (x^2+5*x+6);

Maxima neprovádí zjednodušení automaticky.

num(r);denom(r);

rat(r);

(x^(100)-1)/(x-1);

rat(%);

f:161*y^3+333*x*y^2+184*y^2+162*x^2*y+144*x*y+77*y+99*x+88$

g:49*y^2+28*x^2*y+63*x*y+147*y+36*x^3+32*x^2+117*x+104$

racfce:f/g;

rat(racfce);

Rozklad na parciální zlomky.

q:(x^3+x^2-x+1)/p1;

partfrac(q, x);

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

partfrac(%, x);

### Příklady na manipulaci s racionálními funkcemi

power:(x+1)^(-2);

expand(power);

Narozdíl od Maplu se expandují í záporné mocniny.

r1:(x+1)^2/((x^2+x)*x);

expand(r1);

r2:expand(num(r1))/expand(denom(r1));

factor(r2);

(x-1)*(x+2)/((x+1)*x)+(x-1)/(1+x)^2;

rat(%);

Expand použité na racionální funkci ji převede na součet zlomků.

expand((x^2+2*x+2)/(x^2-2*x+2));

ratsimp(%);

## Zjednodušování výrazů

Příkazy rat, ratsimp a radcan slouží ke zjednodušování výrazů.

x+y/(x+2)+ z/(x^2+4);

Příkaz ratsimp aplikovaný na součet zlomků provede převod na společného
jmenovatele.

ratsimp(%);

Při aplikaci na polynom upraví polynom do tzv. "collected form".

ratsimp(x*(x+2)+(x-3)*(x+4));

Pro úpravy výrazů s obecnými exponenty, logaritmy a odmocninami používámé příkaz radcan.

expr : (exp(x)-1)/(exp(x/2)+1);

%, ratsimp;

%, radcan;

logexpr : log((x+2)*(x-2)) + log(x);

logexpr, ratsimp;

logexpr, radcan;

%, logcontract;

logexpr, logcontract;

(log(x+x^2)-log(x))^n/(log(1+x)^(n/2));

radcan(%);

Úpravy výrazů s odmocninami

sqrt(2)*sqrt(3), expand;

sqrt(2)*sqrt(3), radcan;

sqrt(2)*sqrt(3), rootscontract;

sqrt(6)*sqrt(3);

sqrt(6)*sqrt(3), radcan;

sqrt(6)/sqrt(3);

sqrt(6)/sqrt(3), radcan;

Systémová proměnná radexpand může být nastavena na hodnotu true (implicitní nastavení), 
all nebo false. Nastavení určuje způsob automatického zjednodušování výrazů s odmocninami.

V implictním případě se sqrt(x^2) zjednoduší na abs(x). Maxima implicitně pracuje 
se všemi symboly jako s reálnými čísly. To můžeme změnit nastavením proměnné domain 
na hodnotu complex.

sqrt(x^2);

domain : complex$

sqrt(x^2);

domain : real$

radexpand;

sqrt(16*x^2);

radexpand: all$

sqrt(16*x^2);

radexpand : false;

sqrt(16*x^2);

(x+2*sqrt(x)+1)/(1+sqrt(x));

radcan(%);

### Úpravy výrazů s goniometrickými funkcemi

trigsimp(tan(x));

sin(x+y), trigexpand;

x + 3*cos(x)^2 - sin(x)^2, trigreduce;

trigrat(sin(3*a)/sin(a+%pi/3));

rtt(e):= radcan (trigrat (trigsimp (e)));

Manuál programu Maxima doporučuje při zjednodušování výrazů s goniometrickými
funkcemi postupně aplikovat příkazy trigreduce, ratsimp a radcan.

e : sin(x+y), trigexpand;

rtt(e);

e : tan(x+y), trigexpand;

rtt(e);

tan(%pi/8);

load(spangl);

tan(%pi/8);