# Základné aritmetické operácie - základy programovania
# Programové kódy: SageMath v.9.x(Python 3.0)
# Prerekvizity: základy programovania
#
# Použitá literatúra:
# [1] R. E. Mezei, An introduction to SAGE programming, John Wiley,and Sons,2016
# ISBN: 978-1-119-12280-7.
#
# E-kurz: P. Szabó: Numerická matematika, 2022
# Spúšťanie programov:
# 1) Otvoriť lokalitu https://sagecell.sagemath.org/
# 2) Kopírovať obsah príkladu In[n] do SageMath boxu
# 3) Kliknutie na "Evaluate"
# Príloha publikácie:
# [4] Peter Szabó a Eva Baranová: Integrálny počet a numerická matematika, 2022, TUKE
# ISBN:978-80-553-4185-9
# Modifikované: 10.12.2022
# komentár, napíš "Hello world!"
print ("Hello World!")
# Verzia systému Sage Math
version()
# Základné aritmetické operácie
6+4, 6-4, 6*4, 6/4
# desatinné (racionálne) čísla
# operácia 4-tá mocnina - celé čísla
6**4
# operácia 4-tá mocnina
6^4
--4
# Celočíselné delenie
6//4
# Zvýšok po celočíselnom delení
6%4
# Príklad: 2015 hodín je koľko dní ?
2015//24
# Ak je teraz 19:00 hodín,
# koľko hodín bude o 2015 hodín?
(2015-5)%24
# priorita operátorov +,-,*,/,^, ()
# plus, mínus, krát, deleno, umocnené na, zátvorky
6+4^2
# priorita operátorov zátvorky
(6+4)^2
# priorita operátorov 2
(((2-4)*(4-3)+4)^10)/(2^20)
# priorita operátorov 3
2+2*2-2 , 2+(2*2)-2 , (2+2)*2-2 , (2+2)*(2-2)
# reálne čísla - čísla s pohyblivou čiarou
2.0^200
# celé čísla
2^200
# zlomky a desatinné čísla - racionálne čísla
6/4
# zlomky a desatinné čísla - desatinné čísla
6/4.0
# zlomky a desatinné čísla
6/4.n()
# zlomky a desatinné čísla - 100 bitová presnosť
6/4.n(digits=5)
# zaokruhlenie čísel
round(1/4, 2), round(1/4, 5), round(1/4, 1)
round(pi, 2), round(pi , 10)
# konštanta pi-iracionálne číslo (nekonečne veľa čislic za des. bodkou)
pi.n(5), pi.n(digits=30)
# konštanta e-iracionálne číslo (nekonečne veľa čislic za des. bodkou)
e.n(10), e.n(digits=40)
# konštanta golden_ratio - iracionálne číslo
golden_ratio.n(), golden_ratio.n(digits=30)
# Nekonečno
infinity
# Nekonečno (písmená oo)
# Dlhé riadky, zalomenie riadku opačná lomka \
(((2-4)* \
(4-3)+ \
4)^10)/(2^20)
# reťazce a čísla - reťazce píšeme do úvodzoviek ""
print ("4+6")
# reťazce a čísla - čísla, premenné píšeme bez úvodzoviek ""
print (4+6)
# reťazce a čísla - príklad
print ("4+6 = ", 4+6)
# Knižnica zabudovaných funkcií
# druhá odmocnina sqrt
sqrt(72)
# vyjadrenie pomocou desatinných číslic
# n(12) - presnosť na 100 bitov - sqrt(72) je iracionálne číslo
sqrt(72).n(100)
# testovanie či dané číslo je prvočíslo
(2^50-1).is_prime()
# rozklad čísel na súčin prvočísel (existuje jednoznačný rozklad)
(2^50-1).factor()
# rozklad čísel na súčin prvočísel (2)
(10000).factor()
# najväčší spoločný deliteľ
gcd(6,4)
# najmenší spoločný násobok
lcm(6,4)
# absolute value - absolútna hodnota
abs(-2015)
# natural logarithm - prirodzený logaritmus
ln(e^2)
#NOTE: log also denotes the natural logarithm
# that is log base e
# log(x) tiež označuje prirodzený logaritmus
log(e^2)
# Príklad výpočtu prirodzeného logaritmu
log(10.0)
# Funkcia log(x,n) označuje logaritmus pri základe n
log(32, 2)
# log pri základe 10
log(1000, 10)
# výpočet logaritmu s reálnym argumentom
log(1024.0, 2)
# trigonometrické funkcie
sin(pi/4)
# operácie s trigonometrickými funkciami
( sin(pi/9)+cos(0)-tan(pi/4) ).n()
# delitele
(123^4-7).divisors()
# zápis matematického výrazu pomocou LaTeX
p=latex(sqrt(2))
p
# zápis matematického výrazu pomocou LaTeX
q=latex(pi*sqrt(72))
q
# Zobrazenie matematického výrazu pomocou LaTeX
p=latex(sqrt(2))
q=latex(sqrt(72)*pi)
show(p,';',q)
p=latex(sin(pi/4))
show(p)
show(pi,' ; ', infinity,' ; ', sqrt(72))
# Polynóm druhého stupňa - príkaz LatexExpr
var ( 'a , b , c ') ;
r=LatexExpr("f(x) = ax^2+ bx + c ")
print("Polynóm druhého stupňa:")
show(r)
# Konvertovanie celého čísla z desiatkovej sústavy na binárne
a = 18
a.binary()
# Konvertovanie celého čísla z desiatkovej sústavy na binárne
# Jednotlivé číslice čísla v binárnej (dvojkovej) sústave
# v opačnom poradí
a = 18
a.digits(2)
# Konvertovanie celého čísla z desiatkovej sústavy do trojkovej
# sústavy. Jednotlivé číslice čísla v trojkovej sústave
# 18 = 2*3^2 +0*3^1+0*3^0
a = 18
a.digits(3)
# Konvertovanie celého čísla z desiatkovej sústavy do osmičkovej
# (hexa) sústavy. Jednotlivé číslice čísla v osmičkovej sústave
# v opačnom poradí, číslice osmičkovej sústavy [0,1,2,3,4,5,6,7]
# 17 = 2*8^1 + 1*8^0
a = 17
a.digits(8)
# Konvertovanie celého čísla z des. sústavy do šestnástkovej
# sústavy. Šestnástková sústava obsahuje znaky
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15]
# 31=1*16^1+15*16^0, 31 (10) = 1F (16)
a = 31
a.digits(16)
# Konvertovanie celého čísla z binárnej do desiatkovej sústavy
a=int("10001",2)
print(a)
# Konvertovanie celého čísla z osmičkovej do desiatkovej sústavy
a=int("27",8)
print(a)
# Konvertovanie celého čísla zo šestnástkovej do des. sústavy
a=int("FF",16)
print(a)
# Vytvorenie a zápis grafického súboru sin.png
# Create a Portable Network Graphics (png) file and save it to computer
p = plot(sin(x), x, -2*pi, 2*pi)
p.save("sin.png")
# dva grafy a ďalšie možnosti graf. výstupu
# two graphs + legend_label
p = plot(sin(x), x, -2*pi, 2*pi, color = "blue", \
axes_labels =[ "x","sin(x)"], \
ticks = pi/3, tick_formatter=pi, \
legend_label = "sin(x)" )
q = plot(sin(6*x), x, -2*pi, 2*pi, color = "red", \
linestyle = "dotted", \
legend_label = "$sin(6 \\cdot x)$" )
(p+q).show()
# pole grafov
graph1 = plot(sin(x), (x, -4*pi, 4*pi))
graph2 = plot(sin(6*x), (x, -4*pi, 4*pi))
graph3 = plot(sin(12*x), (x, -4*pi, 4*pi))
empty = plot(x,x, -1,1)
show(graphics_array( \
[[graph1, graph2,empty], \
[empty ,empty, graph3]], 2, 3))
plot(tan(x), -2*pi, 2*pi, detect_poles="show", gridlines="minor").show(ymin = -10, ymax = 10)