1.1 Úvod Vyšetření průběhu funkce zadané předpisem Napsal jsem funkci v Matlabu, která dokáže vyšetřit funkci, kde. K vyšetření takové funkce jsem používal diferenciálního počtu zejména funkcí symbolického toolboxu (derivace, limity) a v neposlední řadě také pro přehledný výstup funkce pro formátování výstupu do konzole. Nejprve se zdálo, že program nebude příliš rozsáhlý, ale po ošetření všech možných konců, aby byl bezchybný, se ukázalo, že délka zdrojového kódu dokonce překročí hodnotu 250 řádků. I přesto se mi podařilo ošetřit většinu vstupů a dovést program úspěšně do konce. 1.2 Teorie Vyšetřování takové funkce bude silně záviset jednak na kořenech obou polynomů v čitateli a jmenovateli a také na hodnotě jednotlivých koeficientů. Nejprve bych chtěl rozebrat jednotlivé případy, které jsem podobným způsobem ošetřoval v programu. 1.2.1Významné body Do významných bodů spadají průsečíky s horizontální osou, stacionární a inflexní body. Existence těchto bodů silně závisí na jednotlivých koeficientech kvadratické lomené funkce: a) koeficienty a=d=0 V tomto případě se vynulují členy s x 2. To znamená, že již nepůjde o podíl kvadratických trojčlenů, ale pouze o podíl dvou lineárních funkcí, to znamená, že funkce bude mít právě jednu svislou asymptotu právě v bodě, pro který bude lineární člen ve jmenovateli roven nule. b) koeficienty c=f=0 Zde dojde k podobné situaci jako v případě a). S nulovými konstantními koeficienty bude možné jak z čitatele tak jmenovatele vytknout x a pokrátit jej. Půjde opět o lineární lomenou funkci s právě jednou asymptotou. V definičním oboru této funkce však nebude hodnota 0. Nyní bych chtěl popsat, jak souvisí chování této konkrétní funkce s kořeny kvadratického polynomu v čitateli a jmenovateli. c) kořeny kvadratického trojčlenu ax 2 +bx+c = 0 V případě, že existují reálné kořeny této rovnice, znamená to, že funkce může měnit znaménko právě v tomto bodě. Navíc, není-li tento bod stacionární, musí zde nutně přejít z kladného kvadrantu do záporného. 1
d) kořeny kvadratického trojčlenu dx 2 +ex+f Existence reálných kořenů takovéto rovnice určí, kolik asymptot bude funkce mít. Pro dva různé reálné kořeny x 1,x 2 existují dvě svislé asymptoty, jejichž rovnice jsou právě popsány křivkami x=x 1 a x=x 2. Pro jeden dvojnásobný kořen bude existovat jedna svislá asymptota, kterou popisují všechny body v rovině, kde se x-ová souřadnice rovná tomuto bodu. V tomto případě bude také existovat buď globální maximum, nebo globální minimum. V závislosti na tom, jaká je hodnota limity v tomto bodě (která bude vždy existovat a její hodnota bude buď + nebo - ) se může určit existence extrému. Jediný nediskutovaný případ je, když neexistují žádné reálné kořeny. V tomto případě pak bude zaručena spojitost funkce na celém jejím definičním oboru tak jako existence obou extrémů jak minima, tak maxima. 1.2.2Globální extrémy Pro naši funkci může nastat opět více případů. Jestliže má funkce alespoň jednu svislou asymptotu, znamená to, že určitě nebude mít minimum nebo maximum. V případě dvou svislých asymptot bude mít ve jmenovateli kvadratický člen dva různé kořeny, a tudíž nebude existovat maximum ani minimum. Když bude mít kvadratická rovnice pouze imaginární kořeny, implikuje to nutně existenci globálního i lokálního maxima. 1.2.3Omezenost Omezenost funkce se v programu snadno otestuje pomocí existence lokálních maxim a minim. V případě lokálního maxima je vždy omezená shora a v případě minima je omezená zdola. Z hlediska kořenů kvadratické rovnice ve jmenovateli to znamená, že bude omezená jen v případě imaginárních kořenů. 1.3 Popis jednotlivých úkonů programu Funkce Vysetrifunkci() na vstupu dostane zmiňované koeficienty, se kterými pak pracuje. V případě, kdy je jeden kvadratický člen násobkem druhého, jde o konstantní funkci a program svoji činnost ukončí. V ostatních případech jde buď o lineární lomenou funkci, nebo o čistě podíl polynomů stupně 2, a proto ji můžeme vyšetřovat dál. Množina všech bodů, které budeme chtít vyšetřovat, sestává z průsečíků s osou x, stacionárních bodů, inflexních bodů a bodů nespojitosti. Zároveň do ní patří i plus a mínus nekonečno. Pro tyto body je postupně vyšetřováno znaménko funkčního předpisu, první a druhé derivace. Na konci je testováno, jestli funkce má nějaké svislé asymptoty a v kladném případě jsou vypsány jejich rovnice. Také je testována existence globálního maxima a minima. Pokud existují, jsou vypsány body, ve kterých funkce daného extrému nabývá. Na konci je testována omezenost funkce. Pro přehlednost je vykreslen graf této funkce funkcí ezplot(), aby byla vidět korespondence vypočtených dat s jejím opravdovým průběhem. 2
1.4 Program function []=Vysetrenifunkce(a,b,c,d,e,f); koef = a/d; % aby se nejednalo o konstantni funkci if (d==0)&&(e==0)&&(f==0) fprintf('neplatny vstup\n'); if ((a/d==koef)&&(b/e==koef)&&(c/f==koef)) ((a==0)&&(b==0)&&(d==0)&&(e==0)) fprintf('jedna se o funkci konstantni\n'); return; ; syms x real; y = (a*x^2+b*x+c)/(d*x^2+e*x+f); fprintf(['\nprobiha vysetrovani funkce ',char(y), '\n\n']); %body nespojitosti, ve kterych mohou byt svisle asymptoty asymptoty = solve(d*x^2+e*x+f,x); JSOUasymptoty = 0; %zjistuje existenci asymptot if size(asymptoty,1) == 0 JSOUasymptoty = 0; JSOUasymptoty = 1; %body, ve kterych se funkce protina s osou x prusecikysx = solve(a*x^2+b*x+c); %body podezrele z extremu stacionarnibody = solve(diff(y)); %inflexni body inflexnibody = solve(diff(diff(y))); body = [prusecikysx' stacionarnibody' inflexnibody' asymptoty']; body = body(imag(body)==0); body = sort(body); body = unique(body); body = [-inf body inf]; pbodu = size(body,2); %pocet vyznamnych bodu %hodnoty ze zadani funkce body(2,i) = subs(limit(y,x,body(1,i),'left')); 3
%znamenka prvni derivace if ((subs(limit(diff(y),x,body(1,i),'left')))>0)&&(abs((subs(limit(diff(y),x,b ody(1,i),'left'))))>10e-50) body(3,i) = 1; if (subs(limit(diff(y),x,body(1,i),'left'))<0)&&(abs((subs(limit(diff(y),x,bod y(1,i),'left'))))>10e-50) body(3,i) = -1; body(3,i) = 0; %znamenka druhe derivace if subs(limit(diff(diff(y)),x,body(1,i),'left'))>0 body(4,i) = 1; if subs(limit(diff(diff(y)),x,body(1,i),'left'))<0 body(4,i) = -1; body(4,i) = 0; fprintf('vyznamne body '); fprintf('%8.3f\t',subs((body(1,i)))); if i==1 fprintf('\t'); fprintf('funkcni hodnoty'); fprintf('%8.3f\t',subs((body(2,i)))); if i==1 fprintf('\t'); fprintf('prvni derivace '); if body(3,i)==1 fprintf(' + \t'); if body(3,i)==-1 fprintf(' - \t'); fprintf(' 0 \t'); ; fprintf('druha derivace '); 4
if body(4,i)==1 fprintf(' + \t'); if body(4,i)==-1 fprintf(' - \t'); fprintf(' 0 \t'); ; ezplot(y); % vykresleni grafu funkce na obrazovku grid on; title(['graf funkce ',char(y)],'fontweight','bold','fontsize',15); xlabel('\it x'); ylabel('\it y'); fprintf('existence asymptot:\t'); %vypis asymptot fprintf('ano\n '); if (d~=0) fprintf(['\t\t\t\t\t vodorovna asymptota y=',num2str(a/d), '\n']); if (d==0)&&(a==0)&&(e~=0) fprintf(['\t\t\t\t\t vodorovna asymptota y=',num2str(b/e),'\n']); if JSOUasymptoty == 1 if asymptoty(1,1)==asymptoty(2,1) fprintf(['\t\t\t\t\t svisla asymptota x=',char(asymptoty(1,1))]); fprintf(['\t\t\t\t\t svisla asymptota x=',char(asymptoty(1,1)),'\n']); fprintf(['\t\t\t\t\t svisla asymptota x=',char(asymptoty(2,1)),'\n']); fprintf('\n\n'); fprintf('globalni maximum: '); %vypis maxima, pokud existuje jemax = 0; if (JSOUasymptoty==1)&&(asymptoty(1,1)~=asymptoty(2,1)) fprintf('ne'); if (JSOUasymptoty==1)&&(asymptoty(1,1)==asymptoty(2,1)) if (subs(limit(y,x,asymptoty(1,1),'left'))==subs(limit(y,x,asymptoty(1,1),'rig ht')))&&(subs(limit(y,x,asymptoty(1,1),'left'))==inf) fprintf('ne'); fprintf('ano'); jemax =1; fprintf('ano,'); jemax = 1; 5
if jemax==1 for i=2:pbodu-1 if ((subs(body(3,i))==0)&&(subs(body(4,i))<0)) fprintf([' v bode ' char(body(1,i))]); break; fprintf('globalni minimum: '); %vypis minima, pokud existuje jemin = 0; if (JSOUasymptoty==1)&&(asymptoty(1,1)~=asymptoty(2,1)) fprintf('ne'); if (JSOUasymptoty==1)&&(asymptoty(1,1)==asymptoty(2,1)) if (subs(limit(y,x,asymptoty(1,1),'left'))==subs(limit(y,x,asymptoty(1,1),'rig ht')))&&(subs(limit(y,x,asymptoty(1,1),'left'))==-inf) fprintf('ne'); fprintf('ano'); jemin =1; fprintf('ano,'); jemin = 1; if jemin==1 for i=2:pbodu-1 if ((subs(body(3,i))==0)&&(subs(body(4,i))>0)) fprintf([' v bode ' char(body(1,i))]); break; fprintf('omezena funkce: '); if (jemax==1)&&(jemin==1) fprintf('omezena shora i zdola'); if (jemax==1)&&(jemin==0) fprintf('omezena shora'); if (jemax==0)&&(jemin==1) fprintf('omezena zdola'); fprintf('ne'); %vypis omezenosti funkce 6
1.5 Ukázka výstupů na obrazovku Chtěl bych ukázat, že můj program si umí poradit s většinou druhů vstupů v závislosti na počátečních koeficientech. 1.5.1 nemá reálné řešení Jako příklad vezmu funkci f:, takto vypadá výstup do konzole: Graf funkce vykreslený funkcí ezplot(): Je vidět, že tato funkce opravdu nemá svislé asymptoty a nabývá na svém definičním oboru jak globálního maxima, tak minima. 7
1.5.1 má jeden dvojnásobný kořen Jako příklad vezmu funkci f:, takto vypadá výstup do konzole: Graf funkce vykreslený funkcí ezplot(): Funkce je dle obrázku opravdu omezená shora a nabývá pouze svého maxima díky neomezenosti zdola. 8
1.5.1 má dva různé kořeny Jako příklad vezmu funkci f:, takto vypadá výstup do konzole: Graf funkce vykreslený funkcí ezplot(): Funkce má v tomto případě sice dvě svislé asymptoty, ale zato nemá globální maximum, ani minimum. 9
1.6 Závěr Z vypočítaných údajů je hezky vidět, jak souvisí kořeny jednotlivých kvadratických trojčlenů s omezeností funkce a existencí jejich extrémů. S více kořeny samozřejmě počet významných bodů ještě roste, nejvyšší počet takových bodů může být až 9. Nejnáročnější částí na psaní celého skriptu bylo zřejmě ošetření všech možných situací, jak může průběh této funkce vypadat. V případě, že bychom takový skript chtěli napsat obecně pro jakoukoliv funkci, byl by jeho rozsah v porovnání s touto funkcí nejméně desetinásobný. 10