Processing math: 100%

MPZI_predavanje_02

2458 days ago by fresl

(„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)

       
x44x3y+6x2y24xy3+y4
                                
                            

                                
       
(x+y)(xy)
                                
                            

                                
       
x2y2
                                
                            

                                
       
(x+y)2(xy)
                                
                            

                                
       
x3+x2yxy2y3
                                
                            

                                
       
2x32xy2
                                
                            

                                


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)2sin(x)2)sin(y)
                                
                            

                                
       
sin(2x+y)
                                
                            

                                
       
2cos(x)cos(y)sin(x)+(cos(x)2sin(x)2)sin(y)
                                
                            

                                


expr.factor()   ili   factor (expr)

       
(x2+xy+y2)(xy)
                                
                            

                                
       
(x2+1)(x+1)(x1)
                                
                            

                                
       
x4+1
                                
                            

                                
       
x4+1
                                
                            

                                
  • „potpuna” faktorizacija u polinome drugoga stupnja,  (x2+2x+1)(x22x+1),  nije provedena, jer SageMath u faktorima dopušta samo cjelobrojne koeficijente i slobodne članove

 

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)(x22x+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
                                
                            

                                
       
2y2
                                
                            

                                
       
(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)  (ax)2+(by)2
                                
                            

                                
       
(a13)2+(b+13)2
                                
                            

                                
       
(ax)2+(by)2
                                
                            

                                

l je funkcija, dok je l(x,y) izraz — primjena funkcije l na varijable x i y.

       
(ay)2+(bx)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)  (x4)2+(y3)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:

       
       
(x4.00000000000000)2+(y3.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+an1xn1++a2x2+a1x+a0

ili

Pn(x)=a0+a1x++an2xn2+an1xn1+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+3x22x+1
                                
                            

                                
       
1
2.00000000000000
10.0000000000000
                                
                            

                                

Polinom se može zadati i izrazom oblika

Pn(x)=a(xbn1)(xbn2)(xb1)(xb0)nˇclanova

       
x  4(x+2)(x+1)(x1)(x2)
                                
                            

                                

Stupanj polinoma daje funkcija

       
x  4
                                
                            

                                
       
x  3
                                
                            

                                
       
x  4x420x2+16
                                
                            

                                
       
x  4
                                
                            

                                

Polinome možemo, kao i druge funkcije, zbrajati i množiti:

       
x  4(x+2)(x+1)(x1)(x2)4x3+3x22x+1
                                
                            

                                
       
x  4x44x317x22x+17
                                
                            

                                
       
x  4(4x33x2+2x1)(x+2)(x+1)(x1)(x2)
                                
                            

                                
       
x  16x7+12x6+72x556x424x3+28x232x+16
                                
                            

                                

Polinom možemo i podijeliti polinomom:

       
x  4(x45x2+4)4x33x2+2x1
                                
                            

                                

U općem slučaju pri dijeljenju polinoma polinomom dobivamo racionalnu funkciju, no rezultat dijeljenja može biti i polinom:

       
x  4(x45x2+4)x1
                                
                            

                                
       
4x3+4x216x16
                                
                            

                                

 

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:

       
x34
                                
                            

                                

... ili, ako znamo da ćemo s funkcijama p1 i p2 više puta baratati kao s polinomima:

       
4x3+3x22x+1
                                
                            

                                
       
4x420x2+16
                                
                            

                                

(strogo govoreći,  .polynomial()  funkciju pretvara u izraz)

       
x34
                                
                            

                                
       
794x212x+674
                                
                            

                                
       
True
                                
                            

                                

... jednim udarcem obje ...

       
(x34,794x212x+674)
                                
                            

                                

 

Parametar funkcije  .polynomial()  je skup brojeva kojem pripadaju koeficijenti polinoma:

       
4.00000000000000x3+3.00000000000000x22.00000000000000x+1.00000000000000
                                
                            

                                
       
4.00000000000000x4+0.000000000000000x320.0000000000000x2+0.000000000000000x+16.0000000000000
                                
                            

                                
       
x0.750000000000000
                                
                            

                                
       
19.7500000000000x20.500000000000000x+16.7500000000000
                                
                            

                                

 

Primjenom polinoma možemo riješiti ranije spomenuti problem „potpune” faktorizacije simboličkih izraza:

       
x4+1
                                
                            

                                
       
(x4+1)
                                
                            

                                
       
(x4+1)
                                
                            

                                
       
(x21.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+3x22x+1
                                
                            

                                
       
(1)(4x33x2+2x1)
                                
                            

                                
       
(4)(x334x2+12x14)
                                
                            

                                
       
(4.00000000000000)(x0.605829586188268)(x20.144170413811732x+0.412657297859847)
                                
                            

                                

Štoviše, ako su koeficijenti u skupu C, faktori će biti polinomi prvoga stupnja:

       
(4.00000000000000)(x0.605829586188268)(x0.07208520690586600.638326735148376i)(x0.0720852069058660+0.638326735148376i)
                                
                            

                                
       
(x0.7071067811865480.707106781186548i)(x0.707106781186548+0.707106781186548i)(x+0.7071067811865480.707106781186548i)(x+0.707106781186548+0.707106781186548i)
                                
                            

                                

Naime, u faktorizaciji  Pn(x)=a(xbn1)(xbn2)(xb1)(xb0)  slobodni članovi bi nul-točke su polinoma Pn, koje mogu biti realne ili parovi konjugirano kompleksnih brojeva.

Polinom  p1(x)=4x3+3x22x+1,  primjerice, ima jednu realnu (x0=0,605829586188268) i par konjugirano kompleksnih nul-točaka (rješenja kvadratne jednadžbe x20,144170413811732x+0,412657297859847=0):

       

Polinom  x4+1  nema realnih nul-točaka:

       

Polinom  p6(x)=3x33x213x+11  ima tri realne nul-točke:

       
(3.00000000000000)(x2.21004051400397)(x0.818055385815757)(x+2.02809589981972)
                                
                            

                                
       

I, kao posljednji primjer, polinom  p7(x)=x33x2+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)(x2)2