# Vzorce, funkcie a interakcie - SageMath v. 9.x (Python 3.0)
# Programové kódy: SageMath v.9.x(Python 3.0)
# Prerekvizity: diferenciálny počet, lineárna algebra, Python, LaTex
#
# Použitá literatúra:
# [1] R. E. Mezei, An introduction to SAGE programming, John Wiley,and Sons,2016
# ISBN: 978-1-119-12280-7.
#
# [2] Gregory V.Bard. Sage for Undergraduates:Second Edition,Compatible with Python3.
# American Mathematical Society,2022.ISBN978-1-4704-6155-3.
# URL https://bookstore.ams.org/mbk-143/ - Sage pre pokročilých
#
# [3] Paul, Zimmermann and Alexandre, Casamayou and Nathann, Cohen and Guillaume Con-
# nan and Thierry Dumont and Laurent Fousse and François Maltey and Matthias Meulien
# and Marc Mezzarobba and Clément Pernet and Nicolas M. Thiéry and Erik Bray and
# John Cremona and Marcelo Forets and Alexandru Ghitza and Hugh Thomas:
# Computational Mathematics with SageMath, 2018, ISBN978-1-611975-45-1.
# https://my.siam.org/Store/Product/viewproduct/?ProductId=30174951,
# https://www.sagemath.org/sagebook/english.html
#
# 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
# Lineárna rovnica - príkaz LatexExpr, symbolická matematika
var ( 'a , b ') ;
r=LatexExpr("f(x) = ax + b = 0 ")
print("Lineárna rovnica:")
show(r)
# Riešenie lineárnej rovnice - vzorec
var ( 'a , b ') ;
p=( a*x + b ) . solve ( x )
show(p)
# 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)
# Výpočet koreňov polynóma druhého stupňa - vzorec
var ( 'a , b , c ') ;
p=( a*x^2 + b*x + c ) . solve ( x )
show(p)
# Výpočet koreňov polynómu tretieho stupňa - vzorec
# Vzorec na riešenie kubickej rovnice objavili talianski matematici
# začiatkom 16. storočia. Bolo to prvýkrát, čo európska matematika
# výrazne prekonala výsledky starovekej aritmetiky a arabskej
# algebry
var ( 'a , b , c, d ') ;
r=LatexExpr("f(x) = ax^3 + bx^2 + cx +d = 0,\\quad x=?")
show(r)
p=( a*x^3 + b*x^2 + c*x + d ) . solve ( x )
show(p)
# Výpočet koreňov polynómu tretieho stupňa - vzorec
# Tento kód zistí dlžku výpočtu "vzorca" pre vyjadrenie
# koreňov polynómu 3. stupňa ax^3+bx^2+cx+d
import time
var ( 'a , b , c, d ') ;
%time p=( a*x^3 + b*x^2 + c*x + d ) . solve ( x )
# Absolútna hodnota - príkaz LatexExpr
r=LatexExpr("f(x) = |x|")
print("Absolútna hodnota :")
show(r)
# Riešenie rovnice s absolútnou hodnotou - symbolická matematika
var ( 'a') ;
p=( abs(x + a)) . solve ( x )
show(p)
# Výpočet funkčných hodnôt funkcie f(x)
f(x) = cos(x)^7
# výpočet funkčnej hodnoty f v bode x = pi/6
# výsledok je v SageMath formáte (zlomky,funkcie)
f(pi/6)
# Výpočet funkčných hodnôt funkcie f(x)
f(x) = cos(x)^7
# výpočet funkčnej hodnoty f v bode x = pi/6
# matematické vyjadrenie výsledku, zlomky a mocniny
show(f(pi/6))
# Výpočet funkčných hodnôt funkcie f(x)
f(x) = cos(x)^7
# výpočet funkčnej hodnoty f v bode x = pi/6
# decimálne vyjadrenie výsledku
f(pi/6).n()
# derivácia funkcie - I, SageMath formát
f(x) = cos(x)^7
f(x).diff()
# derivácia funkcie - II, Mat. formát
f(x) = cos(x)^7
show(f(x).derivative())
# derivácia funkcie - III, SageMath formát
f(x) = cos(x)^7
derivative(f(x))
# derivácia funkcie - IV, SageMath formát
f(x) = cos(x)^7
diff(f(x))
# derivácia funkcie - V, Mat. formát
show(diff(cos(x)^7))
# Derivácia funkcie f - LatexExpr
f(x)=x^2 - 7
r=LatexExpr("f(x)=")
q=LatexExpr(";f^{'}(x)=")
show(r, f(x), q, f(x).diff())
# Derivácia funkcie - interaktívny vstup
# funkcia typu @interact
# - slúži na tvorbu interaktívnych www stránok, pozri [2]
@interact
def derivative_interact(
f = input_box(default = x^2-7, label = "f(x) = " ),
auto_update=True):
q=LatexExpr("f^{'}(x)=")
show(q,f.diff())
# Neurčitý integrál funkcie - I, SageMath formát
f(x) = cos(x)^7
f(x).integrate(x)
# Neurčitý integrál funkcie - II, Mat. formát
show(integrate(cos(x)^7, x))
# Neurčitý integrál - použitie knižnice "indefinite_integral"
from sage.symbolic.integration.integral import indefinite_integral
f(x)=x^3-3*x^2+2*x
r=LatexExpr("\\int(")+latex(f(x))+LatexExpr(") dx=")
q=indefinite_integral(f(x),x)
show(r+latex(q)+" + C")
# Neurčitý integrál - interaktívne vsupy
from sage.symbolic.integration.integral import indefinite_integral
@interact
def integral(
f = input_box(default = x^3-3*x^2+2*x),auto_update=False):
f(x)=f
r=LatexExpr("\\int(")+latex(f(x))+LatexExpr(")dx=")
q=indefinite_integral(f(x),x)
show(r+latex(q)+" + C")
# Určitý integrál funkcie f(x), SageMath formát
f(x) = cos(x)^7
f(x).integrate(x, 0, pi/3)
# Určitý integrál funkcie f(x), výstup: zlomky a symboly
f(x) = cos(x)^7
show(f(x).integrate(x, 0, pi/3))
# Určitý integrál funkcie f(x), výsledok - decimálny formát
f(x) = cos(x)^7
show(f(x).integrate(x, 0, pi/3).n())
# Určitý integrál funkcie- decimálne vyjadrenie výsledku,
# zápis integrálu pomocou LaTex
f(x) = cos(x)^7
a=0
b=pi/3
r=LatexExpr("\\int_a^{b}(")+latex(f(x))+LatexExpr(") dx=")
q=f(x).integrate(x, 0, pi/3).n()
show(r+q)
# riešenie rovníc - príkaz "solve"
solve ( exp ( x ) == -1/2 , x )
# riešenie rovníc - príkaz "solve"
p = solve ( exp ( x ) == -1/2 , x )
show(p)
# Riešenie sústavy rovníc - jedno riešenie
#definovanie premenných, x je default premenná
var("y")
#solve([equations], variables to solve for)
solve ([x+y==8, x-2*y==0] , x, y )
# Riešenie sústavy rovníc - jedno riešenie
#definovanie premenných, x je default premenná
var("y")
#solve([equations], variables to solve for)
p = solve ([x+y==8, x-2*y==0] , x, y )
show(p)
# Riešenie sústavy rovníc - nekonečne veľa riešení
# definovanie premenných
var("y z")
#then solve([equations], variables to solve for)
solve ([x+y==8, x-2*z==0] , x, y,z )
# Riešenie sústavy rovníc - nekonečne veľa riešení
# v riešení r3 je voľná premenná, ľubovoľné reálne číslo
# definovanie premenných
var("y z")
#then solve([equations], variables to solve for)
p=solve ([x+y==8, x-2*z==0] , x, y,z )
show(p)
# Riešenie sústavy rovníc - sústava nemá riešenie
# definovanie premenných
var("y z")
#then solve([equations], variables to solve for)
solve ([x+y==8, x-2*z==0, x-2*z==1] , x, y,z )
# Keď Sage nevie nájsť presné riešenie
# Sage did not find the exact solution
p=solve(x^5+x==8,x)
show(p)
# Keď Sage nevie nájsť riešenie, koreň, v tom prípade treba použiť
# numerickú metódu na nájdenie koreňa. Pred výpočtom treba zistiť
# interval separácie (kde sa nachádza jeden koreň funkcie)
# Nakreslenie funkcie
f(x)=x^5+x-8
a=-2
b= 2
p = plot(f, x, a,b, color = "blue", thickness = 2, \
fillcolor = "red", fill = false)
p.show()
# Približné riešenie úlohy pomocou funkcie find_root()
#
find_root(x^5+x==8, -2, 2)
# Kreslenie funkcií
# Elementárne funkcie a interakcie
# f(x)=ux+v - priamka (polynóm prvého stupňa)
# f(x)=px^2 + qx + r - kvadratická funkcia (polynóm druhého stupňa)
# f(x)=|x| - absolútna hodnota
# f(x)= sqrt(x) - druhá odmocnina
# f(x)= 2^x - exponenciálna funkcia
# f(x)= log(x) - logaritmická funkcia
# f(x)= sin(x), cos(x) - trigonometrické funkcie
#
# 26.09.2017, P.Szabó
@interact
def funkcie(
f = input_box(default = x^5+x-8) ,
a = input_box(default = -2) ,
b = input_box(default = 2),auto_update=False):
f(x)=f
#plot the function
p = plot(f, x, a,b, color = "blue", thickness = 2, \
alpha = 0.9, fillcolor = "red", fill = false)
p.show()
# Aplikácie derivácie - aproximácia matematickej funkcie
# pomocou Taylorovho polynómu.
# Taylorov polynóm 7. stupňa okolo bodu x0=0
f(x)=cos(x)^7
#taylor polynomial of degree 7, around c=0
f(x).taylor(x, 0, 7)
# Taylorov polynóm 7. stupňa okolo bodu x0=0
f(x)=cos(x)^7
#taylor polynomial of degree 7, around c=0
show(f(x).taylor(x, 0, 7))
# input : funkcia f
# output : derivácia n-tého rádu funkcie f (n=4) (n-tá derivácia)
f(x)=cos(x)^7
n=4
r=LatexExpr('('+latex(f(x))+')^{(n)}'+' = ')
q=diff(f(x),x,n)
show(r+latex(q))
# input : funkcia f
# output : derivácia n-tého rádu funkcie f
@interact
def integral(
f = input_box(default = x^3-3*x^2+2*x),
n = slider(vmin = 1, vmax = 20, default = 1, step_size=1),
auto_update=False):
f(x)=f
r=LatexExpr('('+latex(f(x))+')^{(n)}'+' = ')
q=diff(f(x),x,n)
show(r+latex(q))
# Taylorov koeficient funkcie f(x) v bode a, pre n=4
f(x)=e^x
a=0
n=4
r=LatexExpr('('+latex(f(x))+')^{(n)}'+' = ')
q(x)=diff(f(x),x,n)
s=q(x)
show(r+s+';A_n='+'\\frac{f(a)^{(n)}}{n!}='+q(a)/factorial(n)+';n='+n)
# input : funkcia f
# input : bod a
# input : n- n-tá derivácia funkcie f v bode a
# output :
# output : An - Taylorov koeficient funkcie f(x) v bode a
@interact
def integral(
f = input_box(default = e^x,label = 'f(x) ='),
a = input_box(default = 0, label = 'a ='),
n = slider(vmin = 1, vmax = 20, default = 1, step_size=1, label = 'n-tá d. ='),
auto_update=False):
f(x)=f
r=LatexExpr('('+latex(f(x))+')^{(n)}'+' = ')
q(x)=diff(f(x),x,n)
s=q(x)
show(r+s+';A_n='+q(a)/factorial(n)+';n='+n)
# Taylorov rad funkcie f okolo bodu a=0 s presnosťou x^8, vlasnosť funkcie
# f(x).series
f=sin(x).series(x,8)
show(f)
# Taylorov polynóm(rad) funkcie f okolo bodu a=0 s presnosťou x^10,
# vlastnosť funkcie f(x).taylor
f = sin(x)
show(f.taylor(x, 0, 10))
# Taylorov polynóm p2, p4 funkcie f okolo bodu a=0
f(x)=e^x
a=0
b=3
around=0
degrees=[2 , 4]
p = plot(f(x), x, a, b, color = "red", legend_label = "$f(x) = "+str(f(x))+"$" )
for n in degrees:
t(x)=f(x).taylor(x,around,n)
p += plot(t(x), x, a, b,
color = "blue",
legend_label = "$p_"+str(n)+"(x)="+str(t(x))+"$")
p.show()
# Taylorov polynóm ľubovoľnej spojitej funkcie pomocou interaktívnych vstupov
@interact
def TaylorPlotInteract(
f = input_box(default = e^x),
a = input_box(default = 0),
b = input_box(default = 3),
around = input_box(default = 0),
degrees = input_box(default = [1 , 2]),
auto_update=False):
f(x) = f
p = plot(f(x), x, a, b,
color = "red",
legend_label = "$f(x) = "+str(f(x))+"$" )
for n in degrees:
t(x)=f(x).taylor(x,around,n)
p += plot(t(x), x, a, b,
color = "blue",
legend_label = "$p_"+str(n)+"(x)="+str(t(x))+"$")
p.show()
# Geometrická interpretácia derivácie
# Dotyčnica funkcie f(x) v bode x0 (f(x)=sin(x))
f(x)=sin(x)
x0=pi/3
p1 = plot(f(x), x,-pi,pi)
#then we compute and plot the tangent line at x0
df(x) = diff(f(x))
m = df(x0)
p2 = plot( m*(x-x0)+f(x0) , x,-pi,pi, color = "red")
#we plot the tangent point
p3 = list_plot([(x0, f(x0))], size = 50, color="red")
(p1+p2+p3).show(title = "y = "+ str(sin(x)))
# Geometrická interpretácia derivácie
# Dotyčnica funkcie f(x) v bode x0, f(x) je ľubovoľná funkcia
# Použitie technológie Interact
@interact
def TangentInteract2(
f = input_box(default=sin(x) ),
x0 = slider(vmin=-pi, vmax=pi, step_size=pi/12,
default=0, label="Select the point x0"),
tancolor = selector(values = ["red", "blue", "yellow",
"purple", "green"],
label = "Tangent line's color:",default = "red" )):
#here comes the body of the interact:
#first we plot the function:
p1 = plot(f(x), x,-pi,pi)
#then we compute and plot the tangent line at x0
df(x) = diff(f(x))
m = df(x0)
p2 = plot( m*(x-x0)+f(x0) , x,-pi,pi, color = tancolor)
#for a better view,
#we plot the tangent point
p3 = list_plot([(x0, f(x0))], size = 50, color=tancolor)
(p1+p2+p3).show()