Kreslení pomocí grafů funkcí
20.07.06
Nedávno jsem si ve škole připomněl, jak šikovná je funkce absolutní hodnota. Když nějakou funkci f(x) dáte do absolutní hodnoty (tedy získáte funkci |f(x)| ), to co je pod osou x se "překlopí" nad osu x. Pokud nedáte celou funkci do absolutní hodnoty, ale místo toho dáte do absolutní hodnoty pouze všechny výskyty proměnné x (tedy získáte funkci f(|x|) ), způsobí to podobně efektní věc, a to že graf bude osově souměrný podle osy y, a to tak, že se zachová to, co je napravo od osy y.

Pro názornost jsem to nakreslil:
Pokud má člověk náladu, může si s funkcemi |f(x)| a f(|x|) docela vyhrát a kreslit pomocí nich nejrůznější tvary grafů. To mě přivedlo k nápadu, že určitě existují i další funkce pro "kreslení" pomocí grafů. První funkce, která mě napadla a kterou jsem si chtěl zkonstruovat funguje tak, že pro x<0 má hodnoty jako funkce g(x) a pro x>=0 má hodnoty jako funkce h(x).

Od začátku mi bylo jasné, že budu muset použít funkci signum, ta k tomu přímo vybízí :) (Funkce signum (psáno sgn x ) pro x<0 má hodnotu y=-1, pro x=0 má hodnotu y=0 a pro x>0 má hodnotu y=1.)

Jako první cíl si dejme to, abychom vykreslili g(x) na záporné poloose a zbytek aby byl roven nule, o hodnotu v bodě 0 se zatím nebudeme zajímat. Jednou z možných cest je vynásobit g(x) něčím, co nabývá hodnoty jedna pro x<0 a hodnoty nula pro x>0. K tomu účelu nám poslouží tento výraz:
-(sgn x - 1) / 2
Analogicky vytvoříme výraz, kterým budeme násobit h(x). Tentokrát bude nabývat hodnoty jedna pro x>0 a hodnoty nula pro x<0 :
(sgn x + 1) / 2
Čímž dostáváme funkci:
y = -(sgn x - 1) / 2 * g(x) + (sgn x + 1) / 2 * h(x)
Teď je ještě zapotřebí ošetřit hodnotu v bodě 0. Mě osobně se nejvíc líbila varianta, že v bodě nula má funkce hodnotu jako funkce h(x). Je tedy zapotřebí vynásobit g(x) něčím, co má v bodě 0 hodnotu 0 a na záporné poloose hodnotu 1. O kladnou poloosu se nemusíme starat, tu nám jako nulovou jistí dříve přidávaný výraz. K našim účelům nám tak akorát pasuje následující výraz:
-sgn x
Dále potřebujeme něco přinásobit k funkci h(x). Protože výraz
(sgn x + 1) / 2
má pro x=0 hodnotu 1/2, musíme násobit něčím, co má pro x=0 hodnotu 2 a pro x>0 hodnotu 1. (Tentokrát se nemusíme starat o zápornou poloosu.) Kýžený výraz je následující:
2 - sgn x
Čímž dostáváme výslednou funkci:
y = sgn x * (sgn x - 1) / 2 * g(x) + (2 - sgn x) * (sgn x + 1) / 2 * h(x)
Mám radši tento zkrácený tvar (Ještě podotknu, že při zkracování jsem použil toho, že (sgn x)ˆ2 = |sgn x| ):
y = ( |sgn x| - sgn x ) / 2 * g(x) + ( sgn x - |sgn x| + 2 ) / 2 * h(x)
Jednoduchou úpravou docílíme toho, aby hraniční bod byl jiné číslo než 0. Jednoduše všechny výrazy sgn x nahradíme výrazem sgn(x-m), kde m je hraniční bod na ose x mezi funkcemi g(x) a h(x):
y = (|sgn(x-m)|-sgn(x-m))/2 * g(x) + (sgn(x-m)-|sgn(x-m)|+2)/2 * h(x)
Ještě zbývá říci, jak zkonstruovat funkci, která se skládá z libovolného počtu funkcí. Provedení je velmi jednoduché. Mějme například tři funkce: g(x), h(x), i(x). A tři intervaly, ve kterých se budou jednotlivé funkce "vykreslovat": (-nekonečno,m) , (m,n) , (n,nekonečno).

Nejdříve zkonstruujeme funkci e(x), kterážto bude složeninou funkcí g(x) a h(x), jejich hraniční bod bude bod m:

e(x) = (|sgn(x-m)|-sgn(x-m))/2 * g(x) + (sgn(x-m)-|sgn(x-m)|+2)/2 * h(x)
Nakonec vytvoříme funkci f(x), která bude složeninou funkcí e(x) a i(x), jejich hraniční bod bude bod n:
f(x) = (|sgn(x-n)|-sgn(x-n))/2 * e(x) + (sgn(x-n)-|sgn(x-n)|+2)/2 * i(x)
Čímž dostáváme požadovanou trojitou funkci.

Na závěr se ještě chci zmínit o "chybě" v této vykreslovací funkci. Představme si, že máme funkce g(x) a h(x), které chceme vykreslit. Obě funkce jsou na námi požadovaných intervalech definovány. Jenže pokud funkce g(x) není definována v nějakém bodě intervalu, kde chceme vykreslit funkci h(x), pak v tomto bodě bude naše vykreslovací funkce nedefinována.


Tady k tomu můžete napsat komentář
Jméno:
Opište text v rámečku: