% ******************* MATEMATICKÝ SEMINÁŘ č. 10 ************************ % 10.1. ELEMENTÁRNÍ FUNKCE A JEJICH GRAFY % 10.2. PRÁCE S POLYNOMY % % Copyright (C) 1996-2003 by V. Veselý (Masaryk University Brno, Czech Republic) % % Dávka je kompletně upravena pro menu-systém. echo on format compact clc %====================================================================== % 10.1. ELEMENTÁRNÍ FUNKCE A JEJICH GRAFY %---------------------------------------------------------------------- %% Příkaz 'fplot' pro optimální kreslení grafů funkce %% -------------------------------------------------- %% Tento příkaz pro zadaný interval nezávislé proměnné automaticky %% volí optimální dělení (v místech větší strmosti jemnější krok a naopak). %% %% fplot(fname,rozsah,s) ... vykreslí funkční předpis zadaný textovým řetězcem %% 'fname' v zadaném 'rozsahu' s typem čáry zadaným %% řetězcem s (viz 'plot'). %% %% fplot(fname,rozsah) ... totéž s implicitním typem čáry %% %% fname ... libovolný řetězec vyhodnotitelný příkazem 'plot' v proměnné x, %% např. 'sin(x)', 'diric(x,10)' or '[sin(x),cos(x)]' %% V případě jednoduché funkce stačí jen např. 'sin'. %% %% rozsah=[xmin,xmax,ymin,ymax] určuje rozsah os pro kreslení grafů %% rozsah=[xmin,xmix] ... totéž, ale rozsah na ose y se automaticky určí %% podle hodnot vykreslované funkce. %% %% [x,y]=fplot(...) ... nekreslí přímo, ale vygeneruje pouze vektory pro %% dodatečně vykreslení příkazem plot(x,y). %% %% Příkaz fplot může mít ještě dva další nepovinné parametry, jimiž lze řídit %% strategii zjemňování kroků dle tvaru křivky (viz help fplot). % Použijeme nyní 'fplot' pro vykreslení elementárních funkci MATLABU. % Všechny tyto funkce vyhodnocují matice po prvcích, tj. dle schématu % Y=f(X), kde X a Y jsou matice stejného rozměru a Y(i,j)=f(X(i,j)) pro každé i,j. % Doporučuje se dodržovat tuto konvenci rovněž pro m-funkce vytvářené uživatelem. % % Sestavme textovou matici s popisem elementárních funkci, pomocí níž sestavíme % interaktivní nabídku pro jejich kreslení: % POZNÁMKA: Většina těchto funkci pracuje úplně v komplexním oboru, tj. % X i Y mohou být komplexní. V tabulce se omezujeme jen na reálná X. % Nejdříve definujeme následující matici: % ELFUN=[... %------------------------------------------------------------------------------------------- % Název funkce |Perioda| Def. obor | m-file , Rozsah pro fplot %------------------------------------------------------------------------------------------- %'Absolutní hodnota |není |(-Inf,Inf) |''abs'' ,[-10,10] '; %'Funkce znaménka |není |(-Inf,Inf) |''sign'' ,[-10,10,-1.5,1.5] '; %'Druhá odmocnina (square root)|není |(0,Inf) |''sqrt'' ,[0.001,50] '; %'Zaokrouhlení standardní |není |(-Inf,Inf) |''round'',[-4,4] '; %'Zaokrouhlení nahoru (strop) |není |(-Inf,Inf) |''ceil'' ,[-4,4] '; %'Zaokrouhlení dolů (podlaha) |není |(-Inf,Inf) |''floor'',[-4,4] '; %'Zaokrouhlení k nule (usekne) |není |(-Inf,Inf) |''fix'' ,[-4,4] '; %'Exponenciála |není |(-Inf,Inf) |''exp'' ,[-4,4] '; %'Přirozený logaritmus |není |(0,Inf) |''log'' ,[0.001,50] '; %'Dekadický logaritmus |není |(0,Inf) |''log10'',[0.001,50] '; % ---- Goniometrické funkce:---------------------------------------------------------------- %'Sinus |2*pi |(-Inf,Inf) |''sin'' ,[-2*pi,2*pi] '; %'Arkussinus |není |[-1,1] |''asin'' ,[-1,1] '; %'Kosinus |2*pi |(-Inf,Inf) |''cos'' ,[-2*pi,2*pi] '; %'Arkuskosinus |není |[-1,1] |''acos'' ,[-1,1] '; %'Tangens |pi |(-Inf,Inf)-\{pi/2+k*pi\}|''tan'',[-pi,pi,-20,20] '; %'Arkustangens |není |(-Inf,Inf) |''atan'' ,[-100,100] '; %'Kotangens |pi |(-Inf,Inf)-\{k*pi\}|''cot'' ,[-pi,pi,-20,20] '; %'Arkuskotangens |není |(-Inf,Inf) |''acot'' ,[-100,100] '; %'Sekans (1/cos) |2*pi |(-Inf,Inf)-\{pi/2+k*pi\}|''sec'',[-2*pi,2*pi,-20,20]'; %'Arkussekans |není |(-Inf,Inf)-(-1,1)|''asec'' ,[-10,10] '; %'Kosekans (1/sin) |2*pi |(-Inf,Inf)-\{k*pi\}|''csc'' ,[-2*pi,2*pi,-20,20] '; %'Arkuskosekans |není |(-Inf,Inf)-(-1,1)|''acsc'' ,[-5,5,-1.8,1.8] '; % ---- Hyperbolické funkce: ---------------------------------------------------------------- %'Sinus hyperbolický |není |(-Inf,Inf) |''sinh'' ,[-50,50] '; %'Arkussinus hyperbolický |není |(-Inf,Inf) |''asinh'',[-50,50] '; %'Kosinus hyperbolický |není |(-Inf,Inf) |''cosh'' ,[-10,10,0,20] '; %'Arkuskosinus hyperbolický |není |[1,Inf) |''acosh'',[1,30] '; %'Tangens hyperbolický |není |(-Inf,Inf) |''tanh'' ,[-10,10] '; %'Arkustangens hyperbolický |není |(-1,1) |''atanh'',[-0.999,0.999] '; %'Kotangens hyperbolický |není |(-Inf,Inf) |''coth'' ,[-10,10,-10,10] '; %'Arkuskotangens hyperbolický |není |(-Inf,Inf)-[1,1]|''acoth'',[-10,10,-20,20] '; %'Sekans hyperbolický (1/cosh) |není |(-Inf,Inf) |''sech'' ,[-10,10] '; %'Arkussekans hyperbolický |není |(0,1] |''asech'',[0.001,1] '; %'Kosekans hyperbol. (1/sinh) |není |(-Inf,Inf)-\{0\}|''csch'' ,[-3,3,-20,20] '; %'Arkuskosekans hyperbolický |není |(-Inf,Inf)-\{0\}|''acsch'',[-10,10] '; %------------------------------------------------------------------------------------------- %]; ELFUN=[... %------------------------------------------------------------------------------------------- % Název funkce |Perioda| Def. obor | m-file , Rozsah pro fplot %------------------------------------------------------------------------------------------- 'Absolutní hodnota |není |(-Inf,Inf) |''abs'' ,[-10,10] '; 'Funkce znaménka |není |(-Inf,Inf) |''sign'' ,[-10,10,-1.5,1.5] '; 'Druhá odmocnina (square root)|není |(0,Inf) |''sqrt'' ,[0.001,50] '; 'Zaokrouhlení standardní |není |(-Inf,Inf) |''round'',[-4,4] '; 'Zaokrouhlení nahoru (strop) |není |(-Inf,Inf) |''ceil'' ,[-4,4] '; 'Zaokrouhlení dolů (podlaha) |není |(-Inf,Inf) |''floor'',[-4,4] '; 'Zaokrouhlení k nule (usekne) |není |(-Inf,Inf) |''fix'' ,[-4,4] '; 'Exponenciála |není |(-Inf,Inf) |''exp'' ,[-4,4] '; 'Přirozený logaritmus |není |(0,Inf) |''log'' ,[0.001,50] '; 'Dekadický logaritmus |není |(0,Inf) |''log10'',[0.001,50] '; % ---- Goniometrické funkce:---------------------------------------------------------------- 'Sinus |2*pi |(-Inf,Inf) |''sin'' ,[-2*pi,2*pi] '; 'Arkussinus |není |[-1,1] |''asin'' ,[-1,1] '; 'Kosinus |2*pi |(-Inf,Inf) |''cos'' ,[-2*pi,2*pi] '; 'Arkuskosinus |není |[-1,1] |''acos'' ,[-1,1] '; 'Tangens |pi |(-Inf,Inf)-\{pi/2+k*pi\}|''tan'',[-pi,pi,-20,20] '; 'Arkustangens |není |(-Inf,Inf) |''atan'' ,[-100,100] '; 'Kotangens |pi |(-Inf,Inf)-\{k*pi\}|''cot'' ,[-pi,pi,-20,20] '; 'Arkuskotangens |není |(-Inf,Inf) |''acot'' ,[-100,100] '; 'Sekans (1/cos) |2*pi |(-Inf,Inf)-\{pi/2+k*pi\}|''sec'',[-2*pi,2*pi,-20,20]'; 'Arkussekans |není |(-Inf,Inf)-(-1,1)|''asec'' ,[-10,10] '; 'Kosekans (1/sin) |2*pi |(-Inf,Inf)-\{k*pi\}|''csc'' ,[-2*pi,2*pi,-20,20] '; 'Arkuskosekans |není |(-Inf,Inf)-(-1,1)|''acsc'' ,[-5,5,-1.8,1.8] '; % ---- Hyperbolické funkce: ---------------------------------------------------------------- 'Sinus hyperbolický |není |(-Inf,Inf) |''sinh'' ,[-50,50] '; 'Arkussinus hyperbolický |není |(-Inf,Inf) |''asinh'',[-50,50] '; 'Kosinus hyperbolický |není |(-Inf,Inf) |''cosh'' ,[-10,10,0,20] '; 'Arkuskosinus hyperbolický |není |[1,Inf) |''acosh'',[1,30] '; 'Tangens hyperbolický |není |(-Inf,Inf) |''tanh'' ,[-10,10] '; 'Arkustangens hyperbolický |není |(-1,1) |''atanh'',[-0.999,0.999] '; 'Kotangens hyperbolický |není |(-Inf,Inf) |''coth'' ,[-10,10,-10,10] '; 'Arkuskotangens hyperbolický |není |(-Inf,Inf)-[1,1]|''acoth'',[-10,10,-20,20] '; 'Sekans hyperbolický (1/cosh) |není |(-Inf,Inf) |''sech'' ,[-10,10] '; 'Arkussekans hyperbolický |není |(0,1] |''asech'',[0.001,1] '; 'Kosekans hyperbol. (1/sinh) |není |(-Inf,Inf)-\{0\}|''csch'' ,[-3,3,-20,20] '; 'Arkuskosekans hyperbolický |není |(-Inf,Inf)-\{0\}|''acsch'',[-10,10] '; %------------------------------------------------------------------------------------------- ]; sz=size(ELFUN); sep=findstr(ELFUN(1,:),'|'); seznam='''Všeobecné funkce'''; for k=1:10 seznam=[seznam,',''',deblank(ELFUN(k,1:sep(1)-1)),'''']; end seznam=[seznam,',''KONEC''']; pause; % NYNÍ VOLTE Z NABÍDKY VŠEOBECNÝCH FUNKCÍ %---------------------------------------------------------------------- more off while 1 k=eval(['menu(',seznam,')']); if k>10, break; end sep=findstr(ELFUN(k,:),'|'); figure eval(['fplot(',ELFUN(k,sep(3)+1:sz(2)),');']); sepc=findstr(ELFUN(k,sep(3)+1:sz(2)),','); sepc=sepc(1)-1; title([deblank(ELFUN(k,1:sep(1)-1)),... ': ',deblank(ELFUN(k,sep(3)+1:sep(3)+sepc))]); xlabel(['Definiční obor: ',deblank(ELFUN(k,sep(2)+1:sep(3)-1)),... ', Perioda: ',deblank(ELFUN(k,sep(1)+1:sep(2)-1))]); end seznam='''Goniometrické funkce'''; for k=11:22 seznam=[seznam,',''',deblank(ELFUN(k,1:sep(1)-1)),'''']; end seznam=[seznam,',''KONEC''']; pause; % NYNÍ VOLTE Z NABÍDKY GONIOMETRICKÝCH FUNKCÍ %---------------------------------------------------------------------- more off while 1 k=eval(['menu(',seznam,')'])+10; if k>22, break; end sep=findstr(ELFUN(k,:),'|'); figure eval(['fplot(',ELFUN(k,sep(3)+1:sz(2)),');']); sepc=findstr(ELFUN(k,sep(3)+1:sz(2)),','); sepc=sepc(1)-1; title([deblank(ELFUN(k,1:sep(1)-1)),... ': ',deblank(ELFUN(k,sep(3)+1:sep(3)+sepc))]); xlabel(['Definiční obor: ',deblank(ELFUN(k,sep(2)+1:sep(3)-1)),... ', Perioda: ',deblank(ELFUN(k,sep(1)+1:sep(2)-1))]); end seznam='''Hyperbolické funkce'''; for k=23:sz(1) seznam=[seznam,',''',deblank(ELFUN(k,1:sep(1)-1)),'''']; end seznam=[seznam,',''KONEC''']; pause; % NYNÍ VOLTE Z NABÍDKY HYPERBOLICKÝCH FUNKCÍ %---------------------------------------------------------------------- more off while 1 k=eval(['menu(',seznam,')'])+22; if k>sz(1), break; end sep=findstr(ELFUN(k,:),'|'); figure eval(['fplot(',ELFUN(k,sep(3)+1:sz(2)),');']); sepc=findstr(ELFUN(k,sep(3)+1:sz(2)),','); sepc=sepc(1)-1; title([deblank(ELFUN(k,1:sep(1)-1)),... ': ',deblank(ELFUN(k,sep(3)+1:sep(3)+sepc))]); xlabel(['Definiční obor: ',deblank(ELFUN(k,sep(2)+1:sep(3)-1)),... ', Perioda: ',deblank(ELFUN(k,sep(1)+1:sep(2)-1))]); end close; keyboard; close all; %% Další elementární funkce: %% ------------------------ %% atan2(Y,X) ... vyhodnotí -pi < atan(Y./X) <= pi s úhlem ve správném %% kvadrantu podle znamének Y(i,j)./X(i,j). %% %% Zbytek po dělení (remainder): %% R=rem(X,Y) ... zbytek po dělení X(i,j) číslem Y(i,j): %% R(i,j)=X(i,j)-N(i,j)*Y(i,j), kde N=fix(X./Y). %% %% y=real(x) ... reálná část komplexního čísla x %% %% y=imag(x) ... imaginární část komplexního čísla x %% %% y=conj(x) ... číslo komplexně sdružené k x %% %% m=lcm(a,b) ... nejmenší společný násobek kladných celých čísel a,b %% (lcm=least common multiple) %% %% d=gcd(a,b) ... největší společný dělitel celých čísel a,b %% [d,r,s]=gcd(a,b) ... navíc spočte i rozklad: d=a*r+b*s. X=[1,-1, 1,-1]; Y=[1,1,-1,-1]; 180*atan2(Y,X)./pi pause; %---------------------------------------------------------------------- [5*X;3*Y] rem(5*X,3*Y) keyboard; %====================================================================== % 10.2. PRÁCE S POLYNOMY %---------------------------------------------------------------------- %% Polynom P(x)=p(1)*x^n+p(2)*x^(n-1)+...+p(n)*x+p(n+1) je v MATLABU %% určen vektorem p=[p(1),...,p(n+1)]. %% S touto reprezentací pracují příkazy: %% %% Y=polyval(p,X) ...vyhodnocení polynomu Y=P(X). %% %% r=roots(p) ...kořeny polynomu (sloupcový vektor délky n). %% %% p=poly(r) ...opak k roots: sestaví polynom z jeho kořenů %% p=poly(A) ...najde charakteristický polynom %% det(lambda*A-eye(size(A))) čtvercové matice A. %% %% p=polyfit(x,y,n) ... nalezne regresní polynom stupně n, který je %% ve smyslu metody nejmenších čtverců nejblíže %% k bodům x(i),y(i), i=1,...,m. %% m=n+1 => p je interpolační polynom procházející %% zadanými body %% %% A=compan(p) ... matice asociovaná k polynomu p (p je jejím %% charakteristickým polynomem) %% %% polyder ... derivace polynomu %% %% conv ... násobení polynomu %% %% deconv ... dělení polynomu se zbytkem %% %% residue ... rozklad racionální lomené funkce na parciální zlomky %% v komplexním oboru help polyder pause; help conv pause; help deconv pause; help residue keyboard; %================================= KONEC ============================== % % %% more off echo off