(„Lijepi” ispis svih rezultata, bez poziva funkcije show(), može se dobiti tako da se na vrhu radnog lista označi kvadratić kraj riječi Typeset.)
Izrazi, funkcije, polinomi
Simbolički izrazi
Izrazi su nizovi operanada i operatora koji opisuju matematičke operacije (u izrazima se mogu pojaviti i zagrade za promjenu prioriteta operacija). Operatori su simboli koji označavaju matematičke operacije ili nazivi matematičkih funkcija (sa zagradama ili s točkom i zagradama), dok su operandi izrazi na koje se primjenjuju operatori tvoreći složenije izraze. Temeljni su operandi konstante i varijable.
U izrazu
x + 2*y – sin(z)
operatori su +, *, – i sin(). Ako se operacije istoga prioriteta izvode slijeva na desno, operandi operatora + su varijabla x i izraz 2*y, operatora * konstanta 2 i varijabla y, operatora – izrazi x + 2*y i sin(z), te operatora sin() varijabla z.
U izrazu
A.solve_right (b)
operator je .solve_right(), dok su operandi A i b.
Varijable (osim varijable x), koje će se upotrebljavati u simboličkim izrazima, treba uvesti funkcijom var():
(y,z)
|
(a,b,c)
|
Neke su od funkcija koje se upotrebljavaju za preoblikovanje („pojednostavnjenje”) izraza:
expr.collect (s)
x3y2+x3+x2y+xy2+x2+by+a+3x
|
(y2+1)x3+x2(y+1)+(y2+3)x+by+a
|
x3y2+x3+x2(y+1)+xy2+by+a+3x
|
x3+(x3+x)y2+x2+(x2+b)y+a+3x
|
expr.expand() ili expand (expr)
x4−4x3y+6x2y2−4xy3+y4
|
(x+y)(x−y)
|
x2−y2
|
(x+y)2(x−y)
|
x3+x2y−xy2−y3
|
2x3−2xy2
|
expr.combine()
−x+y4z+x2z+y3z
|
3x+y12z
|
expr.expand_trig()
sin(2x+y)
|
cos(y)sin(2x)+cos(2x)sin(y)
|
2cos(x)cos(y)sin(x)+(cos(x)2−sin(x)2)sin(y)
|
sin(2x+y)
|
2cos(x)cos(y)sin(x)+(cos(x)2−sin(x)2)sin(y)
|
expr.factor() ili factor (expr)
(x2+xy+y2)(x−y)
|
(x2+1)(x+1)(x−1)
|
x4+1
|
x4+1
|
simplify (expr) ili expr.simplify(), expr.simplify_full() ili expr.full_simplify()
n
|
cos(12π+πn)
|
−sin(πn)
|
[nxisxinteger]
|
0
|
[]
|
cos(πn)
|
cos(πn)
|
|
(−1)n
|
[nxisxinteger,nxisxodd]
|
−1
|
Traceback (click to the left of this block for traceback) ... ValueError: Assumption is inconsistent Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_38.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("YXNzdW1lIChuLCAnZXZlbicp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/tmp/tmpKEtN2j/___code___.py", line 2, in <module> exec compile(u"assume (n, 'even')" + '\n', '', 'single') File "", line 1, in <module> File "/opt/SageMath/local/lib/python2.7/site-packages/sage/symbolic/assumptions.py", line 550, in assume x.assume() File "/opt/SageMath/local/lib/python2.7/site-packages/sage/symbolic/assumptions.py", line 242, in assume raise ValueError("Assumption is inconsistent") ValueError: Assumption is inconsistent |
[nxisxinteger]
|
[nxisxinteger,nxisxeven]
|
1
|
[]
|
[nxisxeven]
|
1
|
|
(x2+√2x+1)(x2−√2x+1)
|
x4+1
|
Napomena: postoji cijela familija funkcija simplify...: .simplify_factorial(), .simplify_log(), .simplify_rational(), .simplify_real(), .simplify_trig(), .canonicalize_radical(). Funkcija .simplify_full() poziva redom funkcije .simplify_factorial(), .simplify_rectform(), .simplify_trig(), .simplify_rational() i .expand_sum().
Varijable u izrazima mogu se zamijeniti drugim varijablama ili im se mogu pridružiti vrijednosti:
√x2+y2
|
5
|
ili:
5
|
ili:
5
|
ili:
5
|
ali ne:
__main__:3: DeprecationWarning: Substitution using function-call syntax and unnamed arguments is deprecated and will be removed from a future release of Sage; you can use named arguments instead, like EXPR(x=..., y=...) See http://trac.sagemath.org/5930 for details.5 __main__:3: DeprecationWarning: Substitution using function-call syntax and unnamed arguments is deprecated and will be removed from a future release of Sage; you can use named arguments instead, like EXPR(x=..., y=...) See http://trac.sagemath.org/5930 for details. |
√x2+z2
|
√2√y2
|
√(a+x)2+y2
|
√2√(a+x)2
|
√2√(a+x)2
|
Funkcije
Nove se funkcije u SageMath-u definiraju slično kao u matematici:
f(x) = izraz za definiciju
g(x,y) = izraz za definiciju
Na primjer, funkcija koja izračunava udaljenost točke (x,y) od fiksne točke (a,b) je
(x,y) ↦ √(a−x)2+(b−y)2
|
√(a−13)2+(b+13)2
|
√(a−x)2+(b−y)2
|
l je funkcija, dok je l(x,y) izraz — primjena funkcije l na varijable x i y.
√(a−y)2+(b−x)2
|
0
|
Varijablama, koje u funkcijskom izrazu označavaju konstante, vrijednosti možemo pridružiti pomoću funkcije subs(); na primjer, funkcija koja izračunava udaljenost od točke (4,3) je
(x,y) ↦ √(x−4)2+(y−3)2
|
5
|
5.00000000000000
|
√2
|
1.41421356237310
|
... dok je funkcija koja izračunava udaljenost od ishodišta:
(x,y) ↦ √x2+y2
|
5
|
1.41421356237310
|
Napomena: za pridruživanje vrijednosti ne mogu se upotrijebiti samo () kao u „običnim” izrazima; zagradama se funkcija „pretvara” u izraz:
|
√(x−4.00000000000000)2+(y−3.00000000000000)2
|
5.00000000000000
|
Implicitno, u SageMath-u su novouvedene funkcije definirane, ovisno o broju varijabli, na nekom od skupova C, C×C, …, Cn, s vrijednostima u skupu C, iako njihova definicija katkad ima smisla samo u skupu R (primjerice, naša funkcija ℓ nije udaljenost u skupu C2):
√−2
|
(x,y) ↦ √x¯x+y¯y
|
√2
|
Grafovi funkcija jedne varijable crtaju se funkcijom plot():
![]() |
![]() |
![]() |
![]() |
(Funkciju plot() ćemo detaljnije obraditi na sljedećem predavanju i na vježbama.)
Grafovi funkcija dviju varijabli crtaju se funkcijom plot3d():
![]() ![]() |
![]() ![]() |
(O njoj više na četvrtomu predavanju i na vježbama.)
Polinomi
Polinomi su posebna, za primjene vrlo važna vrsta funkcija.
Polinomi jedne varijable, označene obično sa x ili t, dani su izrazom koji je od te varijable i određenoga broja konstanata sastavljen konačnim brojem množenja, zbrajanja i oduzimanja (dijeljenje varijablom nije dopušteno); uzastopna množenja varijable zamjenjuju se potenciranjem pozitivnim cijelim brojem. Opći je oblik polinoma
Pn(x)=anxn+an−1xn−1+⋯+a2x2+a1x+a0
ili
Pn(x)=a0+a1x+⋯+an−2xn−2+an−1xn−1+anxn;
n je zadani nenegativni broj koji određuje stupanj polinoma, tako da koeficijent an mora biti različit od nule, dok ostali mogu biti i jednaki nuli.
Polinome zadajemo odgovarajućim izrazima:
x ↦ −4x3+3x2−2x+1
|
1−2.0000000000000010.0000000000000
|
Polinom se može zadati i izrazom oblika
Pn(x)=a(x−bn−1)(x−bn−2)⋯(x−b1)(x−b0)⏟nˇclanova
x ↦ 4(x+2)(x+1)(x−1)(x−2)
|
Stupanj polinoma daje funkcija
x ↦ 4
|
x ↦ 3
|
x ↦ 4x4−20x2+16
|
x ↦ 4
|
Polinome možemo, kao i druge funkcije, zbrajati i množiti:
x ↦ 4(x+2)(x+1)(x−1)(x−2)−4x3+3x2−2x+1
|
x ↦ 4x4−4x3−17x2−2x+17
|
x ↦ −4(4x3−3x2+2x−1)(x+2)(x+1)(x−1)(x−2)
|
x ↦ −16x7+12x6+72x5−56x4−24x3+28x2−32x+16
|
Polinom možemo i podijeliti polinomom:
x ↦ −4(x4−5x2+4)4x3−3x2+2x−1
|
U općem slučaju pri dijeljenju polinoma polinomom dobivamo racionalnu funkciju, no rezultat dijeljenja može biti i polinom:
x ↦ 4(x4−5x2+4)x−1
|
4x3+4x2−16x−16
|
Postoje i neke operacije koje su specifične za polinome, kao što je, primjerice, dijeljenje analogno cjelobrojnom dijeljenju, odnosno dijeljenju s ostatkom:
−3−2
|
True
|
Takvo dijeljenje nije primjenjivo na opće funkcije:
Traceback (click to the left of this block for traceback) ... TypeError: unsupported operand parent(s) for //: 'Callable function ring with argument x' and 'Callable function ring with argument x' Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_45.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cDIgLy8gcDE="),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/tmp/tmp_Vrc02/___code___.py", line 2, in <module> exec compile(u'p2 // p1 File "", line 1, in <module> File "sage/structure/element.pyx", line 1834, in sage.structure.element.Element.__floordiv__ (build/cythonized/sage/structure/element.c:13454) File "sage/structure/element.pyx", line 1869, in sage.structure.element.Element._floordiv_ (build/cythonized/sage/structure/element.c:13775) TypeError: unsupported operand parent(s) for //: 'Callable function ring with argument x' and 'Callable function ring with argument x' |
Moramo, stoga, SageMath-u „reći” da su naše funkcije polinomi:
−x−34
|
... ili, ako znamo da ćemo s funkcijama p1 i p2 više puta baratati kao s polinomima:
−4x3+3x2−2x+1
|
4x4−20x2+16
|
(strogo govoreći, .polynomial() funkciju pretvara u izraz)
−x−34
|
−794x2−12x+674
|
True
|
... jednim udarcem obje ...
(−x−34,−794x2−12x+674)
|
Parametar funkcije .polynomial() je skup brojeva kojem pripadaju koeficijenti polinoma:
−4.00000000000000x3+3.00000000000000x2−2.00000000000000x+1.00000000000000
|
4.00000000000000x4+0.000000000000000x3−20.0000000000000x2+0.000000000000000x+16.0000000000000
|
−x−0.750000000000000
|
−19.7500000000000x2−0.500000000000000x+16.7500000000000
|
Primjenom polinoma možemo riješiti ranije spomenuti problem „potpune” faktorizacije simboličkih izraza:
x4+1
|
(x4+1)
|
(x4+1)
|
(x2−1.41421356237310x+1.00000000000000)⋅(x2+1.41421356237310x+1.00000000000000)
|
Dakle, polinomi se ispravnim odabirom brojevnoga skupa koeficijenata uvijek mogu rastaviti na faktore tako da su svi faktori polinomi prvoga ili drugog stupnja:
x ↦ −4x3+3x2−2x+1
|
(−1)⋅(4x3−3x2+2x−1)
|
(−4)⋅(x3−34x2+12x−14)
|
(−4.00000000000000)⋅(x−0.605829586188268)⋅(x2−0.144170413811732x+0.412657297859847)
|
Štoviše, ako su koeficijenti u skupu C, faktori će biti polinomi prvoga stupnja:
(−4.00000000000000)⋅(x−0.605829586188268)⋅(x−0.0720852069058660−0.638326735148376i)⋅(x−0.0720852069058660+0.638326735148376i)
|
(x−0.707106781186548−0.707106781186548i)⋅(x−0.707106781186548+0.707106781186548i)⋅(x+0.707106781186548−0.707106781186548i)⋅(x+0.707106781186548+0.707106781186548i)
|
Naime, u faktorizaciji Pn(x)=a(x−bn−1)(x−bn−2)⋯(x−b1)(x−b0) slobodni članovi bi nul-točke su polinoma Pn, koje mogu biti realne ili parovi konjugirano kompleksnih brojeva.
Polinom p1(x)=−4x3+3x2−2x+1, primjerice, ima jednu realnu (x0=0,605829586188268) i par konjugirano kompleksnih nul-točaka (rješenja kvadratne jednadžbe x2−0,144170413811732x+0,412657297859847=0):
![]() |
Polinom x4+1 nema realnih nul-točaka:
![]() |
Polinom p6(x)=3x3−3x2−13x+11 ima tri realne nul-točke:
(3.00000000000000)⋅(x−2.21004051400397)⋅(x−0.818055385815757)⋅(x+2.02809589981972)
|
![]() |
I, kao posljednji primjer, polinom p7(x)=x3−3x2+4 ima jednu jednostruku realnu i jednu dvostruku realnu nul-točku (štoviše, nul-točke su cjelobrojne, pa za faktorizaciju funkciju ne treba „pretvarati” u polinom); u dvostrukoj je nul-točki os x tangenta grafa polinoma:
(x+1)(x−2)2
|
![]() |
|