CoCalc Shared Files10. Sagetex / P3b.texOpen in CoCalc with one click!
Author: Ivica Nakić
1
\documentclass{beamer}
2
\usetheme{CambridgeUS}
3
4
\usepackage[croatian]{babel}
5
\usepackage[utf8]{inputenc}
6
\usepackage[T1]{fontenc}
7
\usepackage[autostyle]{csquotes}
8
\usepackage{sagetex}
9
\usepackage{amsmath}
10
\usepackage{url}
11
\usepackage{fancybox}
12
\usepackage{wasysym}
13
\usepackage{listings}
14
\usepackage{verbatim}
15
\usepackage{multirow}
16
\usepackage{graphicx}
17
18
\newcommand{\A}[1]{#1&\texttt{\string#1}\hspace*{1ex}}
19
20
21
\hypersetup{plainpages=false,bookmarksopen,linkcolor=violet,%
22
pdfpagemode=FullScreen,colorlinks=true%
23
}
24
\hypersetup{pdftitle={Prezentacije}}
25
\hypersetup{baseurl={http://www.math.hr}}
26
\hypersetup{pdfsubject={LaTeX}}
27
\hypersetup{pdfauthor={Ivica Nakić}}
28
29
\lstset{language=[LaTeX]TeX,extendedchars=true,backgroundcolor=\color{gray!20},identifierstyle=,stringstyle=\rmfamily,%
30
columns=flexible,showstringspaces=false,keywordstyle=\color{violet}\bfseries}
31
32
\lstset{literate=%
33
{Š}{{\v{S}}}1
34
{Đ}{{\Dj{}}}1
35
{Č}{{\v{C}}}1
36
{Ć}{{\'C}}1
37
{Ž}{{\v{Z}}}1
38
{š}{{\v{s}}}1
39
{đ}{{\dj{}}}1
40
{č}{{\v{c}}}1
41
{ć}{{\'c}}1
42
{ž}{{\v{z}}}1
43
}
44
45
\lstdefinestyle{SageInput}{style=DefaultSageInput,numbers=none}
46
\lstdefinestyle{SageOutput}{style=DefaultSageOutput,numbers=none}
47
48
\title{\LaTeX{} --- Sage i Sage\TeX}
49
\subtitle{}
50
\author{Ivica Nakić \\ \texttt{nakic@math.hr}}
51
\institute[PMF--MO]{Matematički odsjek Prirodoslovno--matematičkog fakulteta}
52
\date[2016/17]{Matematički softver, 2016/17}
53
54
55
\begin{document}
56
57
\begin{frame}
58
\maketitle
59
\end{frame}
60
61
\begin{frame}
62
\frametitle{Pregled}
63
\tableofcontents
64
\end{frame}
65
66
\section{Sage}
67
68
\begin{frame}
69
\frametitle{Što je Sage?}
70
\href{http://www.sagemath.org}{Sage} je matematička aplikacija sa sučeljem u programskom jeziku Python. Sage u sebi sadrži cijeli niz biblioteka (napisanih u raznim programskim jezicima) za razna područja matematike. Python biblioteke koje smo dosad obradili (Numpy, Scipy, Matplotlib, Sympy, Cython) su također ugrađene, ali unutar Sagea imamo pristup i R-u, Fortranu, C-u, C++-u,\ldots
71
\pause
72
73
Sadrži biblioteke za algebru, algebarsku geometriju, aritmetičku geometriju, diferencijalni i integralni račun, kombinatoriku, linearnu algebru, teoriju grafova, teoriju grupa, teoriju brojeva,\ldots
74
\pause
75
76
Sage je nastao 2005.\ godine, trenutno je u 7.6 inačici.
77
\end{frame}
78
79
\begin{frame}
80
\frametitle{Python vs.\ Sage}
81
Iako u Sageu programiramo u Pythonu, postoje dvije razlike koje treba držati na umu:
82
\begin{itemize}
83
\item potenciranje se može pisati i pomoću simbola \textasciicircum{} (xor operacija se piše s \textasciicircum\textasciicircum),
84
\item Sage koristi Python 2, mi inače radimo u Pythonu 3 (no dijeljenje integera funkcionira kao u Pythonu 3).
85
\end{itemize}
86
Ove razlike su dobijene korištenje pre-parsera.
87
88
\end{frame}
89
90
\begin{frame}[fragile]
91
\frametitle{Sage kao kalkulator}
92
Neki jednostavni primjeri koda u Sageu:
93
94
\begin{sageblock}
95
4 * (10 // 4) + 10 % 4 == 10
96
3^2*4 + 2%5
97
sqrt(3.4)
98
sin(pi/3)
99
exp(2)
100
sin(10).n(digits=5)
101
N(sin(10),digits=10)
102
sqrt(pi).numerical_approx()
103
numerical_approx(pi, prec=200)
104
\end{sageblock}
105
106
\end{frame}
107
108
\begin{frame}[fragile]
109
\frametitle{Neki tipovi varijabli su promijenjeni}
110
\begin{sagecommandline}
111
sage: a = 5
112
sage: type(a)
113
\end{sagecommandline}
114
\begin{sagecommandline}
115
sage: a = 5/3
116
sage: type(a)
117
\end{sagecommandline}
118
\begin{sagecommandline}
119
sage: a = 'hello'
120
sage: type(a)
121
\end{sagecommandline}
122
\end{frame}
123
124
\begin{frame}[fragile]\frametitle{Rješavanje jednadžbi}
125
Ako izvršimo sljedeći kod (slično kao i u Sympy-ju)
126
\begin{sageblock}
127
x = var('x')
128
solve(x^2 + 3*x + 2, x)
129
\end{sageblock}
130
za rješenje ćemo dobiti $\sage{solve(x^2 + 3*x + 2, x)}$.
131
132
Analogno,
133
\begin{sageblock}
134
x, b, c = var('x b c')
135
solve([x^2 + b*x + c == 0],x)
136
\end{sageblock}
137
nam daje $\sage{solve([x^2 + b*x + c == 0],x)}$.
138
\end{frame}
139
140
\begin{frame}[fragile]\frametitle{Rješavanje jednadžbi}
141
Sustav nelinearnih jednadžbi:
142
\begin{sageblock}
143
var('x y p q')
144
eq1 = p+q==9
145
eq2 = q*y+p*x==-6
146
eq3 = q*y^2+p*x^2==24
147
solve([eq1,eq2,eq3,p==1],p,q,x,y)
148
\end{sageblock}
149
\begin{sagesilent}
150
s = solve([eq1,eq2,eq3,p==1],p,q,x,y)
151
\end{sagesilent}
152
Rješenja su \[\sage{s[0]},\] \[\sage{s[1]}.\]
153
\end{frame}
154
155
\begin{frame}[fragile]\frametitle{Rješavanje jednadžbi}
156
Numeričko nalaženje rješenja:
157
\begin{sagecommandline}
158
sage: phi = var('phi')
159
sage: find_root(cos(phi)==sin(phi),0,pi/2)
160
\end{sagecommandline}
161
Rješavanje nejednadžbi:
162
\begin{sagecommandline}
163
sage: solve(x^2+x-1 > 0, x)
164
\end{sagecommandline}
165
\end{frame}
166
167
\begin{frame}[fragile]\frametitle{Nalaženje korijena polinoma}
168
\begin{sageverbatim}
169
sage: (x^3+2*x+1).roots(x)
170
\end{sageverbatim}
171
\begin{sagesilent}
172
s = (x^3+2*x+1).roots(x)
173
\end{sagesilent}
174
Korijeni su
175
\begin{gather*}
176
\sage{s[0]},\\ \sage{s[1]},\\ \sage{s[2]}.
177
\end{gather*}
178
\end{frame}
179
180
181
\begin{frame}[fragile]\frametitle{Nalaženje korijena polinoma II}
182
\begin{sageverbatim}
183
sage: (x^3+2*x+1).roots(x, ring=RR)
184
\end{sageverbatim}
185
daje $\sage{(x^3+2*x+1).roots(x, ring=RR)}$.
186
\begin{sageverbatim}
187
sage: (x^3+2*x+1).roots(x, ring=CC)
188
\end{sageverbatim}
189
\begin{sagesilent}
190
s = (x^3+2*x+1).roots(x, ring=CC)
191
\end{sagesilent}
192
daje
193
$\sage{s[0]}$, $\sage{s[1]}$, $\sage{s[2]}$.
194
\end{frame}
195
196
\begin{frame}[fragile]
197
\frametitle{Deriviranje}
198
\begin{sagecommandline}
199
sage: diff(sin(x^2), x, 4)
200
\end{sagecommandline}
201
\begin{sagecommandline}
202
sage: x, y = var('x,y')
203
sage: f = x^2 + 17*y^2
204
sage: f.diff(y)
205
\end{sagecommandline}
206
\end{frame}
207
208
\begin{frame}[fragile]\frametitle{Integriranje, parcijalni razlomci}
209
\begin{sagecommandline}
210
sage: integral(x*sin(x^2), x)
211
sage: integral(x/(x^2+1), x, 0, 1)
212
\end{sagecommandline}
213
Za numeričko integriranje postoji funkcija \texttt{integral\_numerical}.
214
215
\begin{sagecommandline}
216
sage: f = 1/((1+x)*(x-1))
217
sage: f.partial_fraction(x)
218
\end{sagecommandline}
219
220
%Ako nemamo problema s automatskim kreiranjem varijabli možemo %koristiti:
221
%\begin{sageverbatim}
222
%automatic_names(True)
223
%\end{sageverbatim}
224
\end{frame}
225
226
\begin{frame}[fragile]\frametitle{Pojednostavljivanje}
227
\begin{sagecommandline}
228
sage: simplify(arccos(sin(pi/3)))
229
sage: simplify(exp(i*pi/6))
230
\end{sagecommandline}
231
\begin{sagecommandline}
232
sage: a = var('a')
233
sage: y = cos(x+a) * (x+1)
234
sage: y.subs(a=-x)
235
sage: y.subs(x=pi/2, a=pi/3)
236
\end{sagecommandline}
237
\end{frame}
238
\begin{frame}[fragile]
239
\frametitle{Pojednostavljivanje, simboličke funkcije}
240
\begin{sagecommandline}
241
sage: y, z = var('y, z')
242
sage: f = x^3 + y^2 + z
243
sage: f.subs_expr(x^3 == y^2, z==1)
244
\end{sagecommandline}
245
\begin{sagecommandline}
246
sage: f(x)=(2*x+1)^3
247
sage: f(-3)
248
sage: f.expand()
249
\end{sagecommandline}
250
\begin{sagecommandline}
251
sage: ((x+y+sin(x))^2).expand().collect(sin(x))
252
\end{sagecommandline}
253
\end{frame}
254
255
\begin{frame}[fragile]\frametitle{Pojednostavljivanje, simboličke funkcije}
256
\begin{sagecommandline}
257
sage: u = sin(x) + x*cos(y)
258
sage: v = u.function(x, y)
259
sage: v
260
\end{sagecommandline}
261
\begin{sagecommandline}
262
sage: f = (e^x-1) / (1+e^(x/2))
263
sage: f.simplify_exp()
264
\end{sagecommandline}
265
\begin{sagecommandline}
266
sage: f = cos(x)^6 + sin(x)^6 + 3 * sin(x)^2 * cos(x)^2
267
sage: f.simplify_trig()
268
\end{sagecommandline}
269
\end{frame}
270
271
\begin{frame}[fragile]\frametitle{Pojednostavljivanje}
272
\begin{sagecommandline}
273
sage: f = cos(x)^6
274
sage: f.reduce_trig()
275
sage: f = sin(5 * x)
276
sage: f.expand_trig()
277
sage: n = var('n')
278
sage: f = factorial(n+1)/factorial(n)
279
sage: f.simplify_factorial()
280
sage: f = sqrt(abs(x)^2)
281
sage: f.simplify_radical()
282
\end{sagecommandline}
283
Ostale naredbe: \texttt{factor}, \texttt{factor\_list}, \texttt{combine}, \texttt{simplify\_full},\ldots
284
\end{frame}
285
286
\begin{frame}[fragile]\frametitle{Uvjeti na varijable}
287
\begin{sagecommandline}
288
sage: assume(x > 0)
289
sage: bool(sqrt(x^2) == x)
290
sage: forget(x > 0)
291
sage: bool(sqrt(x^2) == x)
292
sage: n = var('n')
293
sage: assume(n, 'integer')
294
sage: sin(n*pi).simplify()
295
\end{sagecommandline}
296
297
298
\end{frame}
299
300
\begin{frame}[fragile]\frametitle{Rješavanje ODJ}
301
302
\begin{sagecommandline}
303
sage: t = var('t')
304
sage: x = function('x',t)
305
sage: DE = diff(x, t) + x - 1
306
sage: desolve(DE, [x,t])
307
\end{sagecommandline}
308
\begin{sagecommandline}
309
sage: x = var('x')
310
sage: y = function('y', x)
311
sage: desolve(diff(y,x,x) + x*diff(y,x) + y == 0, y, [0,0,1])
312
\end{sagecommandline}
313
\end{frame}
314
315
\begin{frame}[fragile]\frametitle{Sume, redovi}
316
\begin{sagecommandline}
317
sage: k, n = var('k, n')
318
sage: sum(k, k, 1, n).factor()
319
sage: sum(k * binomial(n, k), k, 0, n)
320
sage: n, k, y = var('n, k, y')
321
sage: sum(binomial(n,k) * x^k * y^(n-k), k, 0, n)
322
sage: a, q, k, n = var('a, q, k, n')
323
sage: sum(a*q^k, k, 0, n)
324
\end{sagecommandline}
325
\end{frame}
326
327
\begin{frame}[fragile]\frametitle{Sume, redovi}
328
\begin{sagecommandline}
329
sage: a, q, k, n = var('a, q, k, n')
330
sage: sum(a*q^k, k, 0, n)
331
sage: assume(abs(q) < 1)
332
sage: sum(a*q^k, k, 0, infinity)
333
\end{sagecommandline}
334
\end{frame}
335
336
\begin{frame}[fragile]\frametitle{Limesi}
337
\begin{sagecommandline}
338
sage: limit((x**(1/3) - 2) / ((x + 19)**(1/3) - 3), x = 8)
339
sage: f(x) = (cos(pi/4-x)-tan(x))/(1-sin(pi/4 + x))
340
sage: limit(f(x), x = pi/4)
341
sage: limit(f(x), x = pi/4, dir='minus')
342
sage: limit(f(x), x = pi/4, dir='plus')
343
sage: u(n) = n^100 / 100^n
344
sage: limit(u(n), n=infinity)
345
\end{sagecommandline}
346
347
\end{frame}
348
349
\begin{frame}[fragile]\frametitle{Razvoj funkcije u red}
350
\begin{sagecommandline}
351
sage: taylor((1+arctan(x))**(1/x), x, 0, 3)
352
sage: (ln(2*sin(x))).series(x==pi/6, 3)
353
sage: (ln(2*sin(x))).series(x==pi/6, 3).truncate()
354
sage: f = arctan(x).series(x, 10)
355
sage: f
356
sage: (16*f.subs(x==1/5) - 4*f.subs(x==1/239)).n()
357
\end{sagecommandline}
358
\end{frame}
359
360
\section{Sage\TeX}
361
362
\begin{frame}\frametitle{Sage\TeX}
363
Ovaj \LaTeX{} dokument je kreiran uz pomoć paketa Sage\TeX{} koji omogućava da u jednom dokumentu imamo k\^od i za \LaTeX{} i za Sage.
364
365
Korištenje ovog paketa je automatizirano na Sagemath oblku, za korištenje na vlastitom računalu svakako je potrebno imati i \TeX{} distribuciju i Sage.
366
367
Naredbe koje se koriste za ispisivanje i procesiranje Sage k\^oda su:
368
369
\begin{itemize}
370
\item \textcolor{violet}{\textbackslash sage}
371
\item \textcolor{violet}{\textbackslash sageplot}
372
\item \textcolor{violet}{\textbackslash sagestr}
373
\item \textcolor{violet}{\textbackslash percent}
374
\end{itemize}
375
376
Okoline koje se koriste za ispisivanje i procesiranje Sage k\^oda su:
377
\begin{itemize}
378
\item \textcolor{violet}{sageblock}
379
\item \textcolor{violet}{sagesilent}
380
\item \textcolor{violet}{sageverbatim}
381
\item \textcolor{violet}{comment}
382
\item \textcolor{violet}{sagecommandline}
383
\end{itemize}
384
\end{frame}
385
386
\begin{frame}[fragile]\frametitle{\textbackslash sage, sagestr, percent}
387
Rezultat naredbe
388
\begin{lstlisting}
389
$\sage{matrix([[1, 2], [3,4]])^2}$
390
\end{lstlisting}
391
je
392
\[\sage{matrix([[1, 2], [3,4]])^2}\]
393
394
Naredba \textcolor{violet}{\textbackslash sagestr} je analogna naredbi \textcolor{violet}{\textbackslash sage}, samo što ne vraća \LaTeX{} k\^od.
395
396
Naredba \textcolor{violet}{\textbackslash percent} služi za unošenje znaka \% u naredbe \textcolor{violet}{\textbackslash sage} i \textcolor{violet}{\textbackslash sageplot}.
397
\end{frame}
398
399
\begin{frame}[fragile]\frametitle{\textbackslash sageplot}
400
Naredba \textcolor{violet}{\textbackslash sageplot} služi za ubacivanje slika:
401
\begin{lstlisting}
402
\sageplot[angle=30, width=8cm][png]{plot(sin(x), 0, pi), axes=False}
403
\end{lstlisting}
404
\begin{center}
405
\sageplot[angle=30, width=8cm][png]{plot(sin(x), 0, pi), axes=False}
406
\end{center}
407
\end{frame}
408
409
\begin{frame}[fragile]\frametitle{sageblock}
410
Tekst unutar okoline \textcolor{violet}{sageblock} će biti ispisan te izvršen. Npr.\ k\^od
411
\begin{lstlisting}
412
\begin{sageblock}
413
var('x')
414
f(x) = sin(x) - 1
415
g(x) = log(x)
416
h(x) = diff(f(x) * g(x), x)
417
\end{sageblock}
418
\end{lstlisting}
419
će biti ispisan kao
420
\begin{sageblock}
421
var('x')
422
f(x) = sin(x) - 1
423
g(x) = log(x)
424
h(x) = diff(f(x) * g(x), x)
425
\end{sageblock}
426
\end{frame}
427
428
\begin{frame}[fragile]\frametitle{sageblock, sagesilent, sageverbatim, comment}
429
Nadalje, sljedeći će k\^od
430
\begin{lstlisting}
431
Vrijedi $h(2) = \sage{h(2)}$, gdje je $h$ derivacija produkta
432
funkcija $f$ i $g$.
433
\end{lstlisting}
434
biti ispisan kao
435
\begin{block}{}
436
Vrijedi $h(2) = \sage{h(2)}$, gdje je $h$ derivacija produkta funkcija $f$ i $g$.
437
\end{block}
438
Okolina \textcolor{violet}{sagesilent} radi isto što i \textcolor{violet}{sageblock}, ali ne ispisuje k\^od. \textcolor{violet}{sageverbatim} ispisuje k\^od ali ga ne izvršava. \textcolor{violet}{comment} niti ispisuje niti izvršava k\^od te služi za upisivanje Sage komentara u \LaTeX{} k\^od.
439
\end{frame}
440
441
\begin{frame}[fragile]\frametitle{sagecommandline}
442
Ovu naredbu ćemo ilustrirati primjerom:
443
Sljedeći k\^od
444
\begin{lstlisting}
445
\begin{sagecommandline}
446
sage: 1+1
447
sage: factor(x^2 + 2*x + 1)
448
\end{sagecommandline}
449
\end{lstlisting}
450
ispisuje:
451
\begin{sagecommandline}
452
sage: 1+1
453
sage: factor(x^2 + 2*x + 1)
454
\end{sagecommandline}
455
\end{frame}
456
\begin{frame}
457
\frametitle{Zadaci za vježbanje}
458
\begin{itemize}
459
\item Riješite sustav
460
\[x^2 = y^2, \; x^3=y^3+5. \]
461
\item Izračunajte $\int x^n dx$, $n\in\mathbb{N}$.
462
\item Izračunajte $\int_2^3 t^{20}\mathrm{e}^t dt$ simbolički i numerički.
463
\item Izračunajte gradijent od $g(x,y)=xy+\sin x^2 +\mathrm{e}^{-x}$.
464
\item Izračunajte $(7!)!$. Koliko znamenaka ima taj broj?
465
\item Izračunajte $\int_0^1 \int_0^y x\mathrm{e}^{y^2} dx\,dy$.
466
\item Riješite Cauchyjevu zadaću
467
\[ \frac{d^2 y}{dx^2}+y=x,\; y(10)=2,\, \frac{dy}{dx}(10)=1. \]
468
\item Ubacite sva rješenja u PDF dokument koristeći Sage\TeX.
469
\end{itemize}
470
\end{frame}
471
\end{document}