## Osnovne računske operacije u maximi

3+5;

6/5-7/15;

(2+5)/(18-4*9);

potenciranje

2^5;

5^20;

(7/15)^10;

korjenovanje ide preko potencija

4^(2/3);

sqrt(5);

pretvaranje broja u decimalni zapis

11/15;

11/15,numer;

float(11/15);

11/15.0;

11.0/15;

11.0/15.0;

4^(2/3),numer;

float(4^(2/3));

4.0^(2/3);

sqrt(5),numer;

sqrt(5.0);

možemo brzo sve elemente matrice pretvoriti u decimalne brojeve

A:matrix([1/2,3^(2/5)],[5/6,1]);

A1:A,numer;

A1;

float(A);

## Broj pi i broj e

%pi;

%e;

%pi,numer;

float(%pi);

%e,numer;

float(%e);

## Dobivanje brojeva s većom preciznošću

bfloat(%pi),fpprec:50;

preciznost je samo trenutno stavljena na 100 znamenaka

bfloat(%pi),fpprec:100;

bfloat(%pi);

ako želimo da nam se ispišu sve znamenke

set_display(ascii);

bfloat(%pi),fpprec:100;

preciznost je gloabalno stavljena na 100 znamenaka tako dugo dok ju opet globalno ne promijenimo

fpprec:100;

broj pi na 100 znamenaka (zadnja dva znaka "b0" znače da treba množiti s 10^0, tj. s 1)

bfloat(%pi);

broj e na 100 znamenaka

bfloat(%e);

drugi korijen iz 2 na 100 znamenaka

bfloat(sqrt(2));

treći korijen iz 5 na 100 znamenaka

bfloat(5^(1/3));

vraćanje preciznosti na defaultnu vrijednost

fpprec:16;

vraćanje na standardni ispis

set_display(xml);

Pogledajmo detaljnije značenje slova b na kraju kod brojeva.
Na primjer, 100b2 zapravo znači 100*10^2 i to je broj 10000

100b2;

100b2,numer;

25.34b2;

25.34b2,numer;

25.34b-4;

25.34b-4,numer;

Kako brzo unijeti broj 45*10^20;

45b20;

45b20,numer;

45b20+3b21;

## Trigonometrijske funkcije

sinus

sin(2);

sin(2.0);

bfloat(sin(2.0)),fpprec:50;

sin(%pi);

sin(%pi/2);

sin(3*%pi/2);

kosinus

cos(2);

cos(2.0);

bfloat(cos(2.0)),fpprec:50;

cos(%pi);

cos(3*%pi/4);

tangens

tan(2);

tan(2.0);

tan(%pi/4);

tangens od pi/2 ne postoji

tan(%pi/2);

kotangens

cot(2);

cot(2.0);

cot(%pi/2);

kotangens od pi ne postoji

cot(%pi);

jedan kompliciraniji izraz za izračunati

2*sin(2.0)+3/4*cos(2.0^(1/3))-tan(0.5);

## Logaritamska funkcija

Jako važno: u maximi log predstavlja logaritam po bazi e, a ne po bazi 10.
Dakle, u maximi je log=ln.

log(%e);

kako izračunati logaritam po bazi 2 od 5

log(5.0)/log(2.0);

kako izračunati logaritam po bazi 10 od 5

log(5.0)/log(10.0);

## Spremanje objekata u varijablu

a:7;
b:8;

a;

b;

a^2+b^2;

sqrt(a^2+b^2);

Ukoliko želimo da maxima zaboravi vrijednost neke varijable

kill(a);

a^2+b^2;

U varijablu možemo spremiti takoreći bilo što: broj, neki izraz, matricu,...

izraz:x^2+5*x+3;

izraz+5*y;

## Određivanje kvocijenta i ostatka

7 pri dijeljenju s 5 daje kvocijent 1 i ostatak 2

mod(7,5);

quotient(7,5);

10237 pri dijeljenju s 543 daje kvocijent 18 i ostatak 463

mod(10237,543);

quotient(10237,543);

2^31 pri dijeljenju s 12 daje ostatak 8

mod(2^31,12);

power_mod je efikasnija naredba za veće potencije

power_mod(2,31,12);

možemo čak odjedanput odrediti ostatke pri dijeljenju nekim brojem svih elemenata matrice

B:matrix([34,21],[12,58]);

ostaci pri dijeljenju brojem 7 elemenata u matrici

mod(B,7);

B2:mod(B,7);

B2;

## Definiranje funkcije

f(x):=x+sin(x);

f(3);

f(3.0);

f(3),numer;

float(f(3));

bfloat(f(3)),fpprec:50;

Možemo funkciju primijeniti i na elemente već ranije definirane matrice B

f(B);

f(B),numer;

možemo definirati "čistu" funkciju pomoću naredbe lambda

g:lambda([x],x+sin(x));

g(3);

g(3.0);

## Tri osnovne naredbe za sređivanje izraza

izraz:(x+y)^5;

izraz;

expand(izraz);

izraz2:c^2+2*c*d+d^2;

factor(izraz2);

izraz3:(x+2)/(x+y)-2/(x^2+x*y);

ratsimp(izraz3);

factor(izraz3);

## Rješavanje nekih jednadžbi i nejednadžbi

solve(x^2+3*x-4=0,x);

solve(x^2+3*x+5=0,x);

to_poly_solve(x^2+3*x-4>=0,x);

to_poly_solve(x^2+3*x-4>0,x);

možemo učitati paket fourier_elim i preko njega riješiti neke nejednadžbe

load(fourier_elim);

fourier_elim(x^2+3*x-4>=0,[x]);

fourier_elim((x+3)/(2*3-5)<=1,[x]);

to_poly_solve((x+3)/(2*3-5)<=1,x);

## Dobivanje lijeve i desne strane zadane jednadžbe ili nejednadžbe

lhs(x^2+3*x=y+5*x^3);

rhs(x^2+3*x=y+5*x^3);

lhs(x+4>3+a);

rhs(x+4>3+a);

## Postavljanje pitanja maximi

Da li je 2 strogo manje od 5

is(2<5);

Da li je 3/4 veće ili jednako od 2

is(3/4>=2);

Da li je pi^e veće od e^pi

is(%pi^%e>%e^%pi);

%pi^%e,numer;

%e^%pi,numer;

## Kompleksni brojevi

imaginarna jedinica

%i;

%i^2;

z1:3+2*%i;
z2:1/2-6/5*%i;

realni i imaginarni dio

realpart(z1);

imagpart(z1);

realpart(z2);

imagpart(z2);

modul kompleksnog broja

abs(z1);

abs(z2);

osnovne računske operacije s kompleksnim brojevima

z1+z2;

z1-z2;

z1*z2;

rectform(z1*z2);

z1/z2;

rectform(z1/z2);

## Supstitucija

izraz:x^2+2*x+y^3;

izraz;

uvrsti u izraz x=2

subst(2,x,izraz);

subst(x=2,izraz);

uvrsti u izraz x=2 i y=1/3

subst([x=2,y=1/3],izraz);

## Liste

lista kvadrata prvih 10 prirodnih brojeva

lista:makelist(i^2,i,1,10);

treći element u listi

lista[3];

primijeni funkciju sinus na svaki element liste

map(sin,lista);

map(sin,lista),numer;

primijeni funkciju f(x)=x^(1/3)+5 na svaki element liste

map(lambda([x],x^(1/3)+5),lista);

map(lambda([x],x^(1/3)+5),lista),numer;

uzmi iz promatrane liste samo parne brojeve

sublist(lista,evenp);

uzmi iz promatrane liste brojeve koji su između 15 i 80

sublist(lista,lambda([x],is(x>15 and x<80)));

## Numeričko rješavanje polinomijalnih jednadžbi

solve ne zna rješavati polinomijalne jednadžbe stupnja strogo većeg od 4

solve(x^5-3*x^2-4*x+5=0,x);

Postoji naredba u maximi koja daje sva kompleksna rješenja polinomijalne jednadžbe

allroots(x^5-3*x^2-4*x+5=0);

ako želimo samo realna rješenja (jednostruka preciznost, približno na 6 decimala)

realroots(x^5-3*x^2-4*x+5=0);

realroots(x^5-3*x^2-4*x+5=0),numer;

ako želimo samo realna rješenja (dvostruka preciznost, približno na 15 decimala)

realroots(x^5-3*x^2-4*x+5=0,1.0e-15);

realroots(x^5-3*x^2-4*x+5=0,1.0e-15),numer;

Za rješavanje nepolinomijalnih jednadžbi moramo koristiti find_root naredbu.
To je detaljnije objašnjeno u drugom dokumentu

allroots(sin(x)+cos(x)=0);

find_root(sin(x)+cos(x),1,5);

## Polinomijalne jednadžne 3. i 4. stupnja

solve zna riješiti jednadžbu 3. stupnja

solve(x^3+3*x^2-x+2=0,x);

solve(x^3+3*x^2-x+2=0,x),numer;

pomoću allroots su elegantnije napisana rješenja

allroots(x^3+3*x^2-x+2=0);

solve zna riješiti jednadžbu 4. stupnja

solve(x^4+3*x^2-x-2=0,x);

solve(x^4+3*x^2-x-2=0,x),numer;

pomoću allroots su elegantnije napisana rješenja

allroots(x^4+3*x^2-x-2=0);

## Kako dobiti samo realna rješenja

Kada očekujemo samo realna rješenja jednadžbe, maxima nas ponekad može iznenaditi jer ona zna pronaći i kompleksna rješenja koja možda uopće ne očekujemo. Takav slučaj se može javiti kod eksponencijalne jednadžbe jer je eksponencijalna funkcija definirana za kompleksne brojeve. Ovdje nećemo ulaziti u detalje te definicije, nego nas samo zanima kako iz dobivenih rješenja uzeti samo ona koja su realna.

rj:solve(%e^(11/19*x)-5=0,x);

Rješenja smo spremili u varijablu rj koja predstavlja listu.
Najprije pomoću naredbe map primijenimo funkciju rhs na svaki element liste kako bismo maknuli znakove jednakosti i ponovo spremimo u istu varijablu jer nam stara lista više ne treba (možemo spremiti i u neku novu varijablu, ali na ovaj način štedimo memoriju).

rj:map(rhs,rj);

Sada pomoću sublist naredbe uzmemo samo one lemente iz liste čiji su imaginarni dijelovi jednaki nula (to su zapravo realna rješenja jednadžbe). U ovom slučaju imamo samo jedno realno rješenje.

rj:sublist(rj, lambda([x],imagpart(x)=0));

rj,numer;

Mogli smo sve napraviti u jednom koraku, ali namjerno je objašnjeno korak po korak da se lakše shvati ideja.

rj:solve(%e^(11/19*x)-5=0,x);

sublist(map(rhs,rj), lambda([x],imagpart(x)=0)),numer;