Vyšetřování průběhu funkce pomocí programu MatLab 1. Co budeme potřebovat ? K práci budeme potřebovat následující příkazy pro (a) (b) (c) (d)
zadání jednotlivých výrazů symbolicky (obecně) řešení rovnice f(x)=0, symbolický (obecný) výpočet první a druhé derivace funkce f(x), tedy zjískání předpisu pro f '(x) a f ''(x), výpočet limity.
Všechny nadále uvedené příkazy (a další) je možno nalézt v Symbolic Math Toolbox. Tak se nazývá skupina příkazů, které s daty pracijí symbolicky. To znamená, že pracijí s algebraickou podobou výrazů (tedy s písmenky) a ne s jejich funkčními hodnotami (tedy ne s konkrétními čísly). 2. Co k tomu využijeme? Odpovídající příkazy k předchozímu výčtu (a) až (c) uvedeme pro konkrétní případ funkcí 2
f x =a⋅x b⋅xc
,
1 g x=2⋅x 2 4 x
,
h a =sina⋅x .
(a) Zavedení symbolických proměnných a jejich následné použití při definici funkce:
>> syms a b c x >> f = a*x^2 + b*x + c , g = 2 * x^2 + 1 / x + 4 , (b) Nalezení nulových bodů funkcí f, g a h je vlastně úkolem nalézt řešení rovnic g x=0 h a =0 . a
h = sin (a*x )
K tomuto účelu použijeme
>> nul_g = solve (g) >> nul_h = solve (h) (c) Derivace vyhodnocujeme následujícím způsobem. Jména proměnných (vždy na levé straně rovnosí) volíme vhodně, například:
>> prvni_derivace_f_podle_x >> prvni_derivace_g_podle_x
= =
diff ( f , x ) diff ( g ) '--> není potřeba zadávat diff ( g ,x ) , protože v předpisu fukce g je jen jediná neznámá a to x diff ( h , a )
>> prvni_derivace_h_podle_a
=
>> druha_derivace_f_podle_x >> druha_derivace_g_podle_x >> druha_derivace_h_podle_a
= diff ( f , x , 2 ) = diff ( g , 2 ) = diff ( h , a ,2 )
(d) Výpočet limity a uložení výsledku pod zvolenými názvy lim_f = lim x 0 f x , lim_g = lim x t g x
, lim_h = lim a ∞ h a >> lim_f = limit (f,x,0) >> lim_g = limit (g,x,t) >> lim_h = limit (g,a,inf ) Limita funkce f v bodě 0 zprava je >> lim_f_zprava = limit (f,x,0, 'right') a zleva >> lim_f_zleva = limit (f,x,0, 'left')
:
3. Konkrétní příklad Pro teoretický podklad odkazuji na přednášky z matematiky. Postup dále uvedený není univerzální, ale ukazuje příklad využití příkazů v programu MatLab k zjednodušení práce při vyšetřování průběhu funkce.Konkrétní kroky postupu se mohou lišit v závislosti na vyšetřované funkci. Zadání: Vyšetřete průběh funkce
−x 2x−1 . f x = x
Řešení: (1.) Symbolické zadání funkce f , symbolické vyhodnocení její první a druhé derivace Zavedeme symbolickou proměnnou x: >> syms x Z důvodu, který bude zřejmý v kroku (2), si nejdříve zvlášť definujeme funkce v čitateli i ve jmenovateli označené g1 a g2. Až potom definujeme funkci f jako podíl g1(x) a g2(x) : >> g1 = -x^2 + x - 1 ; >> g2 = x ; >> f = g1 / g2 ; Dále si nechejme vypočítat první a druhou derivaci funkce f . První derivaci označíme df a druhou ddf : >> df = diff(f,x)
df = (-2*x+1)/x-(-x^2+x-1)/x^2 >> ddf = diff(f,x,2) ddf = -2/x-2*(-2*x+1)/x^2+2*(-x^2+x-1)/x^3 Případně si můžeme nechat vyjádření df a ddf zjednodušit následujícím způsobem >> df = simplify(df) df =
-(x^2-1)/x^2 >> ddf = simplify(ddf) ddf =
-2/x^3 (2.) Základní vlastnosti: body nespojitosti a definiční obor Jelikož funkce f je racionální (lomená) potřebujeme nejdříve nalézt body nespojitosti. To jsou nulové body fukce ve jmenovateli. Budeme tedy hledat řešení rovnice g2 x=0 , které si označíme zero_g2: >> zero_g2 = 0 Tento výsledek můžeme rovnou napsat, protože g2 x= x . (Jinak bysme použili příkaz solve) Funkce v čitateli f je definována na celé reálné ose, tedy definiční obor funkce f je celá reálná osa až na bod 0 :
Df =−∞ , 0 ∪ 0 , ∞
(3.) Nulové body - průsečíky f s x-ovou osou Nulový bod nalezneme jako všechna reálná řešení rovnice >> zero_f = solve(f)
f x =0 tedy :
zero_f = [ 1/2-1/2*i*3^(1/2)] [ 1/2+1/2*i*3^(1/2)] Vidíme, že v obou dvou případech jde o komplexní číslo (objevuje se tam imaginární jednotka i ) . Proto můžeme říci, že funkce f nemá průsečíky s osou x (pracujeme totiž v reálném oboru). (4.) Kladnost a zápornost funkce f Protože nenáme žádný reálný nulový bod funkce, budeme studovat jen dva intervaly −∞ , 0 a 0 ,∞ . Hodnoty funkce budou stejné vždy v celém intervalu. Takže postačí jen dosadit libovolnou hodnotu z každého z těchto intervalů. Zvlome například -1 a 1. Opět si můžeme pomoci MalLabovským příkazem: >> subs(f,-1)
ans = 3 >> subs(f,1) ans = Tedy
-1 f(x) > 0 pro f(x) < 0 pro
−∞ , 0 0 ,∞ .
a
(5.) Stacionární body a monotónnost funkce f Stacionární body nalezneme jako nulové body df první derivace funkce f , tedy řešení rovnice >> zero_df = solve (df)
df x =0 :
zero_df = [ 1] [ -1] Máme tedy dva stacionární body. Funkce f bude vždy rostoucí nebo klesající na celém intervalu z následujícího výčtu −∞ ,−1 , −1 , 0 , 0 ,1 a 1 , ∞ . Kladné hodnoty první derivace značí rostoucí funkci a záporné funkci klesající. Proto opět jako v kroku (4.) zvolíme z každého intervalu nějakého zástupce, například -2, -0.5, 0.5, 2 . Tedy >> subs(df,-2) ans = -0.7500 >> subs(df,-0.5) ans = 3 >> subs(df,0.5) ans = 3 >> subs(df,2) ans = -0.7500 Vidíme, že funkce f je rostoucí (df(x) > 0 ) na intervalech a −1 , 0 a 0 ,1 a klesající (df(x) < 0 ) na −∞ ,−1 a 1 , ∞ . (6.) Inflexní body, konvexnost a konkávnost funkce f ddf x =0 : Inflexní body nalezneme jako nulové body ddf druhé derivace funkce f , tedy řešení rovnice >> zero_ddf = solve (ddf) Warning: Explicit solution could not be found. > In E:\MATLAB6p5\toolbox\symbolic\solve.m at line 136 In E:\MATLAB6p5\toolbox\symbolic\@sym\solve.m at line 49
zero_ddf = [ empty sym ] Protože druhá derivace je tvaru
ddf =
−2 vidíme, že MatLab píše správně, že množina řešení dovnice 3 x
ddf x =0
je prázdná („empty“). Funkce f nemá inflexní body. Funkce f bude vždy konvexní nebo konkávní na celém intervalu ze stejného výčtu jako v (5.) : −∞ ,−1 , −1 , 0 , 0 ,1 ,a 1 , ∞ . Kladné hodnoty druhé derivace značí konvexní funkci a záporné funkci konkávní. Proto opět jako v kroku (4.) a v kroku (5.) zvolíme z každého intervalu nějakého zástupce, například -2, -0.5, 0.5, 2 . Pak >> subs(ddf,-2)
ans = 0.2500 >> subs(ddf,-0.5) ans = 16 >> subs(ddf,0.5) ans = -16
>> subs(ddf,2) ans = -0.2500 Závěr předchozího vyhodnocení je tedy ten, že funkce f je konvexní (ddf(x) > 0 ) na intervalech −∞ ,−1 a a konkávní (ddf(x) < 0 ) na 0 ,1 a 1 , ∞ .
−1 , 0
(7.) Lokální extrémy funkce f Stacionární body mohou být lokálním extrémem funkce.Pokud v inflexním bodě je hodnota druhé derivace kladná, jde o lokální mimimum, pokud je záporná, pak je lokální maximum. Stacionární body jsme nalezli v (5.). Jsou to 1 a -1, tedy >> subs(ddf,-1)
ans =
2 >> subs(ddf,1) ans =
-2 Tedy bod x = -1 je ostrým lokálním minimem a bod x = 1 je ostrým lokálním maximem. Navíc si můžeme vyhodnotit funkční hodnoty v těchto extremálních bodech: >> subs(f,-1) ans =
3 >> subs(f,1) ans =
-1
(8.) Asymptoty fumkce f (8a.) Vertikální asymptoty Chování funkce v bodech nespojitosti, tj. x = -1 a x = 1. Pro x 0 zleva je limita f rovna, >> lim_0_zleva = limit (f,x,0,'left')
lim_0_zleva = inf podobně pro je x 0 zpava limita f rovna >> lim_0_zprava = limit (f,x,0,'right') lim_0_zprava = - inf Vertikální asymptotou (tedy tzv. asymtotou bez směrnice) je tedy x = 0 . (8b.) Asymptoty v bodech ∞ a −∞ Jde o chování funkčních hodnot pro x rostoucí nade vše meze. Pro x ∞ je limita f rovna. >> lim_plus_inf = limit (f,x,inf)
lim_plus_inf = -inf >> lim_minus_inf = limit (f,x,-inf) lim_minus_inf = inf Vyšetříme tedy, zda má funkce f asymptoty v
−∞ a ∞ . Pokud budou hodnoty limit
k =lim x ∞ f
x x
a
q=lim x ∞ f x−k⋅x nějaká konečná reálná čísla, pak je asymptotou v bodě ∞ přímka tvaru p x =k⋅xq . Podobná podmínka platí pro bod −∞ . >> k_1 = limit (f/x,x,inf) k_1 =
-1 >> q_1 = limit (f - k*x , x ,inf) q_1 =
1 Vidíme tedy, že funkce f má v bodě ∞ asymptotu p x =−x1 . Podobně budeme postupovat v případě bodu −∞ : >> k_2 = limit (f/x,x,- inf) k_2 = -1 >> q_2 = limit (f - k*x , x ,- inf) q_2 = I v bodě
1 −∞ má funkce f asymptotu
p x =−x1 .
(9.) Porovnání vlastního náčrtku s vykreslením pomocí programu MatLab.
>> ezplot(f) Případně můžeme do grafu přidat asymptotu a vyznačit extrémy: >> p = - x + 1 ; >> extremy = [-1 1] ; hodnoty = [subs(f,-1) subs(f,1)] >> ezplot(f),hold on,plot(extremy,hodnoty,'or'),hold on,fplot(p,[-6 6],'g')