Seznámení se systémem Mathematica 7

Definice funkce

© Jaroslav Reichl, SPŠST Panská, Praha
reichl@panska.cz

Obsah

Prezentace obsahuje tato témata:

Definice funkce
Grafický výstup I. - zobrazení grafu funkce
3. úkol
Definice funkce pro pokročilé I. 
4. úkol
Definice funkce pro pokročilé II.
5. úkol

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

Definice funkce

při práci s uživatelsky definovanými funkcemi je dobré tyto funkce předem definovat - lépe se s nimi pak pracuje (zobrazení grafu, výpočet funkčních hodnot, výpočet derivace, intervalů monotonnosti, ...)

nazevfunkce[promenna_]:=predpisfunkce(promenna)

Tento způsob zápisu je důležitý - zejména "podtržítko" za názvem proměnné!!!
Proč je v definici funkce použit znak ":"?

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

Grafický výstup I. - zobrazení grafu funkce

Zobrazení grafu funkce je užitečné v řadě případů:
	průběh funkce
	řešení nepolynomiálních rovnic
	fyzikální a jiné závislosti veličin
	...

Plot[funkce[x], {x, (Subscript[x, min]), (Subscript[x, max])}] - vykreslí graf funkce na intervalu <(Subscript[x, min]); (Subscript[x, max])>; tento příkaz má další parametry, které lze nastavovat; graf se zobrazí jako obrázek, který lze přes schránku (clipboard) zkopírovat do dalších programů (PhotoShop, Malování, ...)

fcelogaritmus[x_]:=Log[((5-x)/(5+x))]
Plot[fcelogaritmus[x],{x,-5,5}]
(*Plot[fcelogaritmus[x],{x,-100,150}]*)

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

3. úkol: Grafy funkcí

Nakreslete graf funkce f: y =sin x na intervalu <-((3π)/2); 2π>.

Řešení

Plot[Sin[x],{x,-((3π)/2),2π}]

Nakreslete graf funkce f: y=(Sqrt[x-3]) na intervalu <0; 10>.

Řešení

Plot[(Sqrt[x-3]),{x,0,10}]

Nakreslete graf funkce f: y=(e^(-(x^2))) na intervalu <-10; 10>.

Řešení

Plot[(E^(-(x^2))),{x,-10,10},PlotRange->All]

Nakreslete do jednoho obrázku grafy funkcí f: y = cos x, g: y = cos 2x a h: y = cos x + 2. Funkce nakreslete na intervalu <-((5π)/2); 3π>.

Řešení

Plot[{Cos[x],Cos[2*x],Cos[x]+2},{x,-((5π)/2),3π}]

Nakreslete do jednoho obrázku grafy funkcí f: y = cos (x/4), g: y = cos (x/3), h: y = cos (x/2), i: y = cos x, j: y = cos 2x, k: y = cos 3x a l: y = cos 4x. Funkce nakreslete na intervalu <-2π; 2π>.

Řešení I.

Plot[Table[Sin[k*x],{k,{(1/4),(1/3),(1/2),1,2,3,4}}],{x,-((3π)/2),2π}]

Řešení II.

ClearAll["Global`*"];
funkce=Table[Sin[k*x],{k,{(1/4),(1/3),(1/2),1,2,3,4}}];
Plot[Evaluate[funkce],{x,-((3π)/2),2π}]

Nakreslete graf funkce f: y =  x + 2, který bude nakreslen červeně čárkovaně. Funkci nakreslete na intervalu <-5; 7>.

Řešení

ClearAll["Global`*"];
f[x_]:=x+2;
Plot[f[x],{x,-5,7},PlotStyle->{{RGBColor[1,0,0],Dashing[{0.02,0.025}]}}]

Nakreslete do jednoho obrázku grafy funkcí f: y = -cos x, který bude nakreslen červeně, a g: y = (x^2)-1, který bude nakreslen modře a silnější čarou. Funkce nakreslete na intervalu <-(π/2); π>.

Řešení

ClearAll["Global`*"];
f[x_]:=-Cos[x];
g[x_]:=(x^2)-1;
Plot[{f[x],g[x]},{x,-(π/2),π},PlotStyle->{{RGBColor[1,0,0],Thickness[0.002]},{RGBColor[0,0,1],Thickness[0.008]}}]

Nakreslete do jednoho obrázku grafy funkcí f: y = ln x a g: y = log x. V grafu vyznačte pouze názvy os, ale ne jejich dělení.

Řešení

ClearAll["Global`*"];
f[x_]:=Log[x];
g[x_]:=Log[10,x];
Plot[{f[x],g[x]},{x,0,10},PlotStyle->{RGBColor[1,0,0],RGBColor[0,0,1]},Ticks->None,AxesLabel->{"x","y"}]

Nakreslete graf funkce f: y = (x^2)+4x+5. V grafu vyznačte pouze názvy os, ale ne jejich dělení. Vyznačte souřadnice minima funkce.

Řešení

ClearAll["Global`*"];
f[x_]:=(x^2)+4 x+5;
derivace[x_]=f'[x];
minimum=Solve[f'[x]==0,x];
minimum=x/.minimum[[1]];
ymin=f[minimum];
graf1=Plot[f[x],{x,-5,1},Ticks->{{minimum},{ymin}},AxesLabel->{"x","y"}];
cary=Graphics[{RGBColor[1,0,0],Thickness[0.005],AbsoluteDashing[{1,5}],Line[{{0,ymin},{minimum,ymin},{minimum,0}}]}];
bodminima=Graphics[{RGBColor[1,0,0],PointSize[0.02],Point[{minimum,ymin}]}];
Show[graf1,cary,bodminima]

Nakreslete graf závislosti okamžité polohy na čase hmotného bodu, který kmitá harmonicky s frekvencí 5 Hz s nulovou počáteční fází a amplitudou výchylky 10 cm. Nakreslete alespoň jednu periodu jeho kmitání.

Řešení

ClearAll["Global`*"];
frekvence:=5;
amplituda:=10;
fi0:=0
vychylka[t_]:=amplituda*Sin[2*π*frekvence*t+fi0];
Plot[vychylka[t],{t,0,(1/frekvence)},AxesLabel->{"(t/s)","(y/cm)"}]

Nakreslete graf závislosti okamžité polohy na čase hmotného bodu, který kmitá harmonicky s frekvencí 0,1 Hz s počáteční fází (π/3) a amplitudou výchylky 5 cm. Nakreslete alespoň dvě periody jeho kmitání. Do téhož obrázku zakreslete i graf závislosti velikosti rychlosti (resp. zrychlení) na čase. Grafy navzájem odlište barvou, tloušťkou a typem čáry.

Řešení

ClearAll["Global`*"];
frekvence:=(1/10);
amplituda:=5;
fi0:=(π/3);
vychylka[t_]=amplituda*Sin[2*π*frekvence*t+fi0];
rychlost[t_]=D[vychylka[t],t];
zrychleni[t_]=D[rychlost[t],t];graf1=Plot[Tooltip[vychylka[t],"Výchylka"],{t,0,(2/frekvence)},AxesLabel->{"(t/s)","(y/cm), (v/(cm . (s^(-1)))), (a/(cm . (s^(-2))))"},PlotStyle->{{RGBColor[1,0,0],Thickness[0.005],Dashing[{0.02,0.025}]}}];
graf2=Plot[Tooltip[rychlost[t],"Rychlost"],{t,0,(2/frekvence)},AxesLabel->{"(t/s)","(y/cm), (v/(cm . (s^(-1)))), (a/(cm . (s^(-2))))"},PlotStyle->{{RGBColor[0,1,0],Thickness[0.005],Dashing[{0.01,0.015}]}}];
graf3=Plot[Tooltip[zrychleni[t],"Zrychlení"],{t,0,(2/frekvence)},AxesLabel->{"(t/s)","(y/cm), (v/(cm . (s^(-1)))), (a/(cm . (s^(-2))))"},PlotStyle->{{RGBColor[1,0,1],Thickness[0.005],Dashing[{0.03,0.035}]}}];
Show[graf1,graf2,graf3]

Nadefinujte funkci, která popisuje šíření postupné vlny daným prostředím. Velikost rychlosti šíření vlny tímto prostředím je 5 m.(s^(-1)), frekvence kmitání zdroje je 10 Hz a maximální výchylka vlnícího se prostředí je 7 cm.
Vykreslete závislost okamžité výchylky na čase pro bod, který je ve vzdálenosti 30 cm od zdroje vlnění. Dále vykreslete graf závislosti okamžité výchylky na vzdálenosti od zdroje pro čas 20 s po začátku kmitání.

Řešení

ClearAll["Global`*"];
frekvence=10;
amplituda=7;
rychlost=5;
xgraf=0.3;
tgraf=20;

perioda=(1/frekvence);
vlndelka=perioda rychlost;
y[t_,x_]:=amplituda*Sin[2π((t/perioda)-(x/vlndelka))];
graf1=Plot[y[t,xgraf],{t,0,(3/frekvence)},AxesLabel->{"(t/s)","(y/cm)"},PlotStyle->{Red,Thickness[0.007]}]
graf2=Plot[y[tgraf,x],{x,0,3vlndelka},AxesLabel->{"(x/m)","(y/cm)"},PlotStyle->{Blue,Thickness[0.007]}]

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

Definice funkce pro pokročilé I.

někdy je vhodné definovat funkci, která má na různých intervalech různé předpisy - např.:

funkce[x_]:=(Piecewise[{{-1, x<-1}, {x, -1≤x≤1}, {1, x>1}}])
Pozor!!! Znak {, který vystupuje v definici funkce není znak { (tj. nejedná se o "složenou závorku")! Jedná se o znak, který lze psát klávesovou zkratkou EscpwEsc.
Je to vlastně zkratka používaná místo funkce
Piecewise[{{prikaz1,podminka1},{prikaz2,podminka2}, ...}]

funkcesignum[x_]:=Piecewise[{{-1,x<0},{1,x>0},{0,x=0}}]
Plot[funkcesignum[x],{x,-10,10}]

funkce1[x_]:=Piecewise[{{Sin[2x]+1,x<0},{1,1>x>0},{(x^2),x>1}}]
Plot[funkce1[x],{x,-5,4}]

tutéž funkci lze definovat pomocí testovacího operátoru /;:
funkce[x_]:=-1/; x<-1
funkce[x_]:=x/; -1≤x≤1
funkce[x_]:=1/; x>1

funkce2[x_]:=x/;x<-5
funkce2[x_]:=2x+5/;-5<x<0
funkce2[x_]:=3Sin[(x/2)]+5/;x>0
Plot[funkce2[x],{x,-10,10}]

takto definované funkce lze např. i derivovat, integrovat, ... - Mathematica provede příslušný výpočet vždy na každé části funkce zvlášť

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

4. úkol: Funkce pro pokročilé I.

Představte si, že by Mathematica neměla definovanou funkci absolutní hodnota. Nadefinujte jí a vykreslete její graf modrou, tečkovanou čarou tloušťky 0,008 na intervalu <-10; 10>.

Řešení

fceabshodnota[x_]:=-x/;x<0
fceabshodnota[x_]:=x/;x≥0
Plot[fceabshodnota[x],{x,-10,10},PlotStyle->{Blue,Dotted,Thickness[0.008]}]

Definujte funkci g, která je pro záporná čísla dána předpisem g:y=(e^x) a pro kladná přepisem g:y=x+1. Určete její funkční hodnoty v bodech -2, -1, 0, 1 a 3. V jednom z uvedených bodů se funkční hodnota nevypíše. Proč? Bylo by možné zadání funkce g opravit tak, aby se funkční hodnota vypsala? Pokud ano, proveďte.

Řešení

g[x_]:=(E^x)/;x<0
g[x_]:=x+1/;x>0
Plot[g[x],{x,-5,5}]
body={-2,-1,0,1,3};
Table[g[body[[i]]],{i,1,Length[body]}]

Definujte funkci, která reprezentuje obdélníkový průběh určitého signálu. Funkce je tedy na polovině své periody hodnota určité kladné konstantě k a na druhé polovině své periody je rovna konstantě s opačnou hodnotou (tj. s hodnotou -k). Nakreslete červeně tři periody takové funkce s periodou 2 s a hodnotou konstanty 5 V.

Řešení

perioda=2;
k=5;
obdelnik[t_]:=
(Piecewise[{{k, Mod[t,perioda]≤(perioda/2)}, {-k, (perioda/2)<Mod[t,perioda]≤perioda}}])
Plot[obdelnik[t],{t,0,3perioda},PlotStyle->{Red,Thickness[0.007]}]

Řada čísel začíná čísly 1 a 2. Každé další číslo je součinem dvou předchozích čísel zvětšeným o 5. Napište definici funkce, která vypíše takovou řadu a vypište a) čtvrté, páté, osmé a desáté číslo, b) prvních patnáct čísel této řady.

Řešení

cislo[n_]:=cislo[n-1]cislo[n-2]+5/;n>2
cislo[1]:=1;
cislo[2]:=2;

cislo[4]
cislo[5]
cislo[8]
cislo[10]

Table[cislo[i],{i,1,15,1}]

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

Definice funkce pro pokročilé II.

v některých případech je vhodné mít nadefinovanou funkci, která je definovaná tak, že jí lze spuštět s různým počtem parametrů
např. funkce fcemocninna[x], která, není-li uvedeno jinak, umocňuje číslo na druhou, jinak na zadaný exponent
fcemocninna[x_,exponent_:2]:=(x^exponent)

fcemocninna[x_,exponent_:2]:=(x^exponent)
fcemocninna[x]
fcemocninna[4]
fcemocninna[4,1]
fcemocninna[4,3]
fcemocninna[4,π]

lze také omezit typ čísel, která se budou dosazovat do proměnné ve funkci
např. u výše uvedené funkce fcemocninna[x] je matematicky korektní jí definovat pouze pro kladná x
fcemocninna[x_?Positive,exponent_:2]:=(x^exponent) (se zápornými x funkce nebude počítat)

fcemocninna1[x_?Positive,exponent_:2]:=(x^exponent)
fcemocninna1[x]
fcemocninna1[3]
fcemocninna1[5,3]
fcemocninna1[-2,3]

Jaroslav Reichl, SPŠST Panská, Praha, © 2010

5. úkol: Funkce pro pokročilé II.

Definujte funkci, která bude (nebude-li uvedeno jinak) počítat mocniny čísla dvě. V ostatních případech vypočítá mocniny se zadaným celočíselným základem. Vykreslete do společného grafu definovanou funkci zobrazující mocninu se základem 2 (červená, plná čára) a se základem 4 (fialová, čárkovaná čára).

Řešení

mocnina[x_,zaklad_Integer:2]:=(zaklad^x)
mocnina[10]
mocnina[4,3]
mocnina[4,π]
graf1=Plot[mocnina[x],{x,-10,10},PlotStyle->{Red,Thickness[0.007]}];
graf2=Plot[mocnina[x,4],{x,-10,10},PlotStyle->{Magenta,Dashed,Thickness[0.007]}];
Show[graf1,graf2]

Nadefinujte funkci, která bude počítat zejména obvod čtverce, ale po zadání druhého jejího parametru vypočítá i obvod obdélníka.

Řešení

delkastrany=5
obvod[a_,b_:delkastrany]:=2(a+b)
obvod[delkastrany]
obvod[7,2]

Vypočtěte výslednou kapacitu kondenzátorů zapojených podle schématu na obrázku. Pro ten účel nadefinujte dvě funkce: jednu, která spočítá kapacitu dvou paralelně zapojených kondenzátorů, a druhou, kterou spočítá kapacitu dvou sériově zapojených kondenzátorů. U obou funkcí ohlídejte jejich vstupy (tj. kapacita kondenzátoru je číslo kladné). Postupnou aplikací těchto funkcí určete výslednou kapacitu zapojených kondenzátorů. Kapacity jednotlivých kondenzátorů jsou: (Subscript[C, 1]) = 1500 μF, (Subscript[C, 2]) = 1500 μF, (Subscript[C, 3]) = 1500 μF, (Subscript[C, 4]) = 2000 μF, (Subscript[C, 5]) = 1000 μF, (Subscript[C, 6]) = 1000 μF, (Subscript[C, 7]) = 1200 μF a (Subscript[C, 8]) = 1200 μF.

Řešení

c1=1500;
c2=1500;
c3=1500;
c4=2000;
c5=1000;
c6=1000;
c7=1200;
c8=1200;
Cserie[c1_?Positive,c2_?Positive]:=(1/((1/c1)+(1/c2)))
Cparalel[c1_?Positive,c2_?Positive]:=c1+c2
c12=Cserie[c1,c2];
c123=Cserie[c12,c3];
c1234=Cparalel[c123,c4];
c56=Cserie[c5,c6];
c123456=Cparalel[c1234,c56];
c1234567=Cserie[c123456,c7];
cvysledna=Cserie[c1234567,c8];
Print["Výsledná kapacita daného zapojení kondenzátorů je ",N[cvysledna,5]," μF."]

Jaroslav Reichl, SPŠST Panská, Praha, © 2010