1 Osnovne računske operacije u maximi
(%i1) | 3+5; |
(%i2) | 6/5−7/15; |
(%i3) | (2+5)/(18−4·9); |
potenciranje
(%i4) | 2^5; |
(%i5) | 5^20; |
(%i6) | (7/15)^10; |
korjenovanje ide preko potencija
(%i7) | 4^(2/3); |
(%i8) | sqrt(5); |
pretvaranje broja u decimalni zapis
(%i9) | 11/15; |
(%i10) | 11/15,numer; |
(%i11) | float(11/15); |
(%i12) | 11/15.0; |
(%i13) | 11.0/15; |
(%i14) | 11.0/15.0; |
(%i15) | 4^(2/3),numer; |
(%i16) | float(4^(2/3)); |
(%i17) | 4.0^(2/3); |
(%i18) | sqrt(5),numer; |
(%i19) | sqrt(5.0); |
možemo brzo sve elemente matrice pretvoriti u decimalne brojeve
(%i20) | A:matrix([1/2,3^(2/5)],[5/6,1]); |
(%i21) | A1:A,numer; |
(%i22) | A1; |
(%i23) | float(A); |
2 Broj pi i broj e
(%i24) | %pi; |
(%i25) | %e; |
(%i26) | %pi,numer; |
(%i27) | float(%pi); |
(%i28) | %e,numer; |
(%i29) | float(%e); |
3 Dobivanje brojeva s većom preciznošću
(%i30) | bfloat(%pi),fpprec:50; |
preciznost je samo trenutno stavljena na 100 znamenaka
(%i31) | bfloat(%pi),fpprec:100; |
(%i32) | bfloat(%pi); |
ako želimo da nam se ispišu sve znamenke
(%i33) | set_display(ascii); |
(%i34) | bfloat(%pi),fpprec:100; |
preciznost je gloabalno stavljena na 100 znamenaka tako dugo dok ju opet globalno ne promijenimo
(%i35) | fpprec:100; |
broj pi na 100 znamenaka (zadnja dva znaka "b0" znače da treba množiti s 10^0, tj. s 1)
(%i36) | bfloat(%pi); |
broj e na 100 znamenaka
(%i37) | bfloat(%e); |
drugi korijen iz 2 na 100 znamenaka
(%i38) | bfloat(sqrt(2)); |
treći korijen iz 5 na 100 znamenaka
(%i39) | bfloat(5^(1/3)); |
vraćanje preciznosti na defaultnu vrijednost
(%i40) | fpprec:16; |
vraćanje na standardni ispis
(%i41) | 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
(%i42) | 100b2; |
(%i43) | 100b2,numer; |
(%i44) | 25.34b2; |
(%i45) | 25.34b2,numer; |
(%i46) | 25.34b−4; |
(%i47) | 25.34b−4,numer; |
Kako brzo unijeti broj 45*10^20;
(%i48) | 45b20; |
(%i49) | 45b20,numer; |
(%i50) | 45b20+3b21; |
4 Trigonometrijske funkcije
sinus
(%i51) | sin(2); |
(%i52) | sin(2.0); |
(%i53) | bfloat(sin(2.0)),fpprec:50; |
(%i54) | sin(%pi); |
(%i55) | sin(%pi/2); |
(%i56) | sin(3·%pi/2); |
kosinus
(%i57) | cos(2); |
(%i58) | cos(2.0); |
(%i59) | bfloat(cos(2.0)),fpprec:50; |
(%i60) | cos(%pi); |
(%i61) | cos(3·%pi/4); |
tangens
(%i62) | tan(2); |
(%i63) | tan(2.0); |
(%i64) | tan(%pi/4); |
tangens od pi/2 ne postoji
(%i65) | tan(%pi/2); |
kotangens
(%i66) | cot(2); |
(%i67) | cot(2.0); |
(%i68) | cot(%pi/2); |
kotangens od pi ne postoji
(%i69) | cot(%pi); |
jedan kompliciraniji izraz za izračunati
(%i70) | 2·sin(2.0)+3/4·cos(2.0^(1/3))−tan(0.5); |
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.
(%i71) | log(%e); |
kako izračunati logaritam po bazi 2 od 5
(%i72) | log(5.0)/log(2.0); |
kako izračunati logaritam po bazi 10 od 5
(%i73) | log(5.0)/log(10.0); |
6 Spremanje objekata u varijablu
(%i75) |
a:7; b:8; |
(%i76) | a; |
(%i77) | b; |
(%i78) | a^2+b^2; |
(%i79) | sqrt(a^2+b^2); |
Ukoliko želimo da maxima zaboravi vrijednost neke varijable
(%i80) | kill(a); |
(%i81) | a^2+b^2; |
U varijablu možemo spremiti takoreći bilo što: broj, neki izraz, matricu,...
(%i82) | izraz:x^2+5·x+3; |
(%i83) | izraz+5·y; |
7 Određivanje kvocijenta i ostatka
7 pri dijeljenju s 5 daje kvocijent 1 i ostatak 2
(%i84) | mod(7,5); |
(%i85) | quotient(7,5); |
10237 pri dijeljenju s 543 daje kvocijent 18 i ostatak 463
(%i86) | mod(10237,543); |
(%i87) | quotient(10237,543); |
2^31 pri dijeljenju s 12 daje ostatak 8
(%i88) | mod(2^31,12); |
power_mod je efikasnija naredba za veće potencije
(%i89) | power_mod(2,31,12); |
možemo čak odjedanput odrediti ostatke pri dijeljenju nekim brojem svih elemenata matrice
(%i90) | B:matrix([34,21],[12,58]); |
ostaci pri dijeljenju brojem 7 elemenata u matrici
(%i91) | mod(B,7); |
(%i92) | B2:mod(B,7); |
(%i93) | B2; |
8 Definiranje funkcije
(%i94) | f(x):=x+sin(x); |
(%i95) | f(3); |
(%i96) | f(3.0); |
(%i97) | f(3),numer; |
(%i98) | float(f(3)); |
(%i99) | bfloat(f(3)),fpprec:50; |
Možemo funkciju primijeniti i na elemente već ranije definirane matrice B
(%i100) | f(B); |
(%i101) | f(B),numer; |
možemo definirati "čistu" funkciju pomoću naredbe lambda
(%i102) | g:lambda([x],x+sin(x)); |
(%i103) | g(3); |
(%i104) | g(3.0); |
9 Tri osnovne naredbe za sređivanje izraza
(%i105) | izraz:(x+y)^5; |
(%i106) | izraz; |
(%i107) | expand(izraz); |
(%i108) | izraz2:c^2+2·c·d+d^2; |
(%i109) | factor(izraz2); |
(%i110) | izraz3:(x+2)/(x+y)−2/(x^2+x·y); |
(%i111) | ratsimp(izraz3); |
(%i112) | factor(izraz3); |
10 Rješavanje nekih jednadžbi i nejednadžbi
(%i113) | solve(x^2+3·x−4=0,x); |
(%i114) | solve(x^2+3·x+5=0,x); |
(%i115) | to_poly_solve(x^2+3·x−4>=0,x); |
(%i116) | 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
(%i117) | load(fourier_elim); |
(%i118) | fourier_elim(x^2+3·x−4>=0,[x]); |
(%i119) | fourier_elim((x+3)/(2·3−5)<=1,[x]); |
(%i120) | to_poly_solve((x+3)/(2·3−5)<=1,x); |
11 Dobivanje lijeve i desne strane zadane jednadžbe ili nejednadžbe
(%i121) | lhs(x^2+3·x=y+5·x^3); |
(%i122) | rhs(x^2+3·x=y+5·x^3); |
(%i123) | lhs(x+4>3+a); |
(%i124) | rhs(x+4>3+a); |
12 Postavljanje pitanja maximi
Da li je 2 strogo manje od 5
(%i125) | is(2<5); |
Da li je 3/4 veće ili jednako od 2
(%i126) | is(3/4>=2); |
Da li je pi^e veće od e^pi
(%i127) | is(%pi^%e>%e^%pi); |
(%i128) | %pi^%e,numer; |
(%i129) | %e^%pi,numer; |
13 Kompleksni brojevi
imaginarna jedinica
(%i130) | %i; |
(%i131) | %i^2; |
(%i133) |
z1:3+2·%i; z2:1/2−6/5·%i; |
realni i imaginarni dio
(%i134) | realpart(z1); |
(%i135) | imagpart(z1); |
(%i136) | realpart(z2); |
(%i137) | imagpart(z2); |
modul kompleksnog broja
(%i138) | abs(z1); |
(%i139) | abs(z2); |
osnovne računske operacije s kompleksnim brojevima
(%i140) | z1+z2; |
(%i141) | z1−z2; |
(%i142) | z1·z2; |
(%i143) | rectform(z1·z2); |
(%i144) | z1/z2; |
(%i145) | rectform(z1/z2); |
14 Supstitucija
(%i146) | izraz:x^2+2·x+y^3; |
(%i147) | izraz; |
uvrsti u izraz x=2
(%i148) | subst(2,x,izraz); |
(%i149) | subst(x=2,izraz); |
uvrsti u izraz x=2 i y=1/3
(%i150) | subst([x=2,y=1/3],izraz); |
15 Liste
lista kvadrata prvih 10 prirodnih brojeva
(%i151) | lista:makelist(i^2,i,1,10); |
treći element u listi
(%i152) | lista[3]; |
primijeni funkciju sinus na svaki element liste
(%i153) | map(sin,lista); |
(%i154) | map(sin,lista),numer; |
primijeni funkciju f(x)=x^(1/3)+5 na svaki element liste
(%i155) | map(lambda([x],x^(1/3)+5),lista); |
(%i156) | map(lambda([x],x^(1/3)+5),lista),numer; |
uzmi iz promatrane liste samo parne brojeve
(%i157) | sublist(lista,evenp); |
uzmi iz promatrane liste brojeve koji su između 15 i 80
(%i158) | sublist(lista,lambda([x],is(x>15 and x<80))); |
16 Numeričko rješavanje polinomijalnih jednadžbi
solve ne zna rješavati polinomijalne jednadžbe stupnja strogo većeg od 4
(%i159) | solve(x^5−3·x^2−4·x+5=0,x); |
Postoji naredba u maximi koja daje sva kompleksna rješenja polinomijalne jednadžbe
(%i160) | allroots(x^5−3·x^2−4·x+5=0); |
ako želimo samo realna rješenja (jednostruka preciznost, približno na 6 decimala)
(%i161) | realroots(x^5−3·x^2−4·x+5=0); |
(%i162) | realroots(x^5−3·x^2−4·x+5=0),numer; |
ako želimo samo realna rješenja (dvostruka preciznost, približno na 15 decimala)
(%i163) | realroots(x^5−3·x^2−4·x+5=0,1.0e−15); |
(%i164) | 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.
(%i165) | allroots(sin(x)+cos(x)=0); |
(%i166) | find_root(sin(x)+cos(x),1,5); |
17 Polinomijalne jednadžne 3. i 4. stupnja
solve zna riješiti jednadžbu 3. stupnja
(%i167) | solve(x^3+3·x^2−x+2=0,x); |
(%i168) | solve(x^3+3·x^2−x+2=0,x),numer; |
pomoću allroots su elegantnije napisana rješenja
(%i169) | allroots(x^3+3·x^2−x+2=0); |
solve zna riješiti jednadžbu 4. stupnja
(%i170) | solve(x^4+3·x^2−x−2=0,x); |
(%i171) | solve(x^4+3·x^2−x−2=0,x),numer; |
pomoću allroots su elegantnije napisana rješenja
(%i172) | allroots(x^4+3·x^2−x−2=0); |
18 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.
(%i173) | 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).
(%i174) | 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.
(%i175) | rj:sublist(rj, lambda([x],imagpart(x)=0)); |
(%i176) | rj,numer; |
Mogli smo sve napraviti u jednom koraku, ali namjerno je objašnjeno korak po korak da se lakše shvati ideja.
(%i177) | rj:solve(%e^(11/19·x)−5=0,x); |
(%i178) | sublist(map(rhs,rj), lambda([x],imagpart(x)=0)),numer; |