In [1]:
# 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 
In [2]:
# Lineárna rovnica - príkaz LatexExpr, symbolická matematika 
var ( 'a , b ') ;
r=LatexExpr("f(x) = ax + b = 0 ")
print("Lineárna rovnica:")
show(r)
Lineárna rovnica:
In [3]:
# Riešenie lineárnej rovnice - vzorec
var ( 'a , b ') ;
p=( a*x + b ) . solve ( x )
show(p)
In [4]:
# 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)
Polynóm druhého stupňa:
In [5]:
# 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)
In [10]:
# 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)
In [7]:
# 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 )
CPU times: user 62 ms, sys: 15 ms, total: 77 ms
Wall time: 57.9 ms
In [8]:
# Absolútna hodnota - príkaz LatexExpr 
r=LatexExpr("f(x) = |x|")
print("Absolútna hodnota :")
show(r)
Absolútna hodnota :
In [9]:
# Riešenie rovnice s absolútnou hodnotou - symbolická matematika
var ( 'a') ;
p=( abs(x + a)) . solve ( x )
show(p)
In [10]:
# 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)
Out[10]:
27/128*sqrt(3)
In [11]:
# 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))
In [12]:
# 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()
Out[12]:
0.365354467221560
In [13]:
# derivácia funkcie - I,  SageMath formát 
f(x) = cos(x)^7
f(x).diff()
Out[13]:
-7*cos(x)^6*sin(x)
In [14]:
# derivácia funkcie - II, Mat. formát
f(x) = cos(x)^7
show(f(x).derivative())
In [15]:
# derivácia funkcie - III, SageMath formát
f(x) = cos(x)^7
derivative(f(x))
Out[15]:
-7*cos(x)^6*sin(x)
In [16]:
# derivácia funkcie - IV, SageMath formát
f(x) = cos(x)^7
diff(f(x))
Out[16]:
-7*cos(x)^6*sin(x)
In [17]:
# derivácia funkcie - V, Mat. formát
show(diff(cos(x)^7))
In [18]:
# 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())
In [19]:
# 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())
In [15]:
# Neurčitý integrál funkcie - I, SageMath formát
f(x) = cos(x)^7
f(x).integrate(x)
Out[15]:
-1/7*sin(x)^7 + 3/5*sin(x)^5 - sin(x)^3 + sin(x)
In [21]:
# Neurčitý integrál funkcie - II, Mat. formát
show(integrate(cos(x)^7, x))
In [22]:
# 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")
In [23]:
# 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")
In [24]:
# Určitý integrál funkcie f(x), SageMath formát 
f(x) = cos(x)^7
f(x).integrate(x, 0, pi/3)
Out[24]:
1181/4480*sqrt(3)
In [25]:
# 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))
In [26]:
# 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())
In [27]:
# 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)
In [28]:
# riešenie rovníc -  príkaz "solve"
solve ( exp ( x ) == -1/2 , x )
Out[28]:
[x == I*pi + log(1/2)]
In [29]:
# riešenie rovníc - príkaz "solve"
p = solve ( exp ( x ) == -1/2 , x )
show(p)
In [30]:
# 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 )
Out[30]:
[[x == (16/3), y == (8/3)]]
In [31]:
# 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)
In [32]:
# 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 )
Out[32]:
[[x == r1, y == -r1 + 8, z == 1/2*r1]]
In [33]:
# 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)
In [34]:
# 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 )
Out[34]:
[]
In [35]:
# Keď Sage nevie nájsť presné riešenie
# Sage did not find the exact solution
p=solve(x^5+x==8,x)
show(p)
In [16]:
# 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()
In [37]:
# Približné riešenie úlohy pomocou funkcie find_root()
# 
find_root(x^5+x==8, -2, 2)
Out[37]:
1.456023377174738
In [38]:
# 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()
In [39]:
# 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)
Out[39]:
-3787/720*x^6 + 133/24*x^4 - 7/2*x^2 + 1
In [40]:
# 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))
In [41]:
# 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))
In [42]:
# 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))
In [43]:
# 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)
In [44]:
# 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)
In [45]:
# 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)
In [46]:
# 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))
In [47]:
# 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()
In [48]:
# 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()
In [49]:
# 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)))
In [50]:
# 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()