Seznámení se systémem Mathematica 7

Řešení rovnic a nerovnic

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

Obsah

Prezentace obsahuje tato témata:

Řešení rovnic
6. úkol
7. úkol
Řešení nerovnic
8. úkol

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

Řešení rovnic

Mathematica umí řešit rovnice pomocí několika příkazů:

Solve[leva_strana_rovnice==prava_strana_rovnice, neznama] - řeší lineární a polynomické rovnice maximálně 4. stupně. U nepolynomiálních rovnic nebo rovnic vyšších stupňů nemusí najít (všechna) řešení.
Poznámka: V zápisu rovnice jsou skutečně dva znaky = za sebou - není to přepis! Znak = je znak dosazovací, pro rovnost se používá znak ==.

Nalezené řešení je ovšem ve formě, v níž se s ním nedá dále pracovat - např. {{x -> -3}}. Proto je nutné nalezené řešení "vyseparovat" z výsledku. K tomu použijeme dosazovací příkaz /. - je nutné ale dávat pozor na to, kolik řešení daná rovnice má a podle toho se rozhodnout o dalším postupu.

reseni=Solve[2x+6==0,x]
x/.reseni[[1]]

NSolve[leva_strana_rovnice==prava_strana_rovnice, neznama] - numerická varianta předchozího. Používá stejnou metodu řešení, ale tím, že řeší rovnice numericky, je "úspěšnější" než Solve. Vrací numerický tvar řešení - neumí vrátit "vzoreček".

FindRoot[leva_strana_rovnice==prava_strana_rovnice, {x, (Subscript[x, 0])}] - najde numericky JEDINÉ řešení zadané rovnice (pomocí Newtonovy metody tečen), které je nejblíže startovacímu bodu (Subscript[x, 0]).

U "problematických rovnic" je vhodné nalezená řešení ověřit pomocí vykreslení grafů funkcí, které odpovídají levé a pravé straně zadané rovnice. Stejně tak "startovací bod" u příkazu FindRoot je vhodné najít pomocí grafického znázornění. Minimalizujeme tím vznik chyby.

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

6. úkol: Řešení rovnic I.

Řešte rovnici ((x+2)/3)-((x-3)/2)+1=x+3 s reálnou neznámou x.

Řešení

Solve[((x+2)/3)-((x-3)/2)+1==x+3,x]

Řešte rovnici x((x+3)/2)-x((x-2)/4)-2=((x^2)/4) s reálnou neznámou x a proveďte zkoušku.

Řešení

ClearAll["Global`*"];
rovnice=x((x+3)/2)-x((x-2)/4)-2==((x^2)/4);
reseni=Solve[rovnice,x];
reseni=x/.reseni[[1]]
rovnice/.x->reseni

Řešte rovnici (x^2)+4x+12=0 a) v reálných číslech, b) v komplexních číslech.

Řešení

ClearAll["Global`*"];
rovnice=(x^2)+4x+12==0;
reseni=Solve[rovnice,x];
reseni1=x/.reseni[[1]];
reseni2=x/.reseni[[2]];
If[Im[reseni1]==Im[reseni2],
Print["Rovnice ",rovnice//TraditionalForm," má řešení v reálných číslech a to kořeny ",reseni1," a ",reseni2,"."],Print["Rovnice ",rovnice//TraditionalForm," má řešení v komplexních číslech a to kořeny ",reseni1," a ",reseni2,"."]]

Řešte rovnici 3x + a(2 - x) = 3a + 2, kde x∈ℝ je neznámá a a∈ℝ je parametr.

Řešení

ClearAll["Global`*"];
rovnice=3x+a(2-x)==3a+2;
reseni=Solve[rovnice,x];
reseni=x/.reseni[[1]];
Print["Řešení rovnice ",rovnice," je x = ",reseni,"."]

Závislost mezi vzdáleností (Subscript[a, 1]) předmětu od tenké čočky, vzdáleností (Subscript[a, 2]) jeho obrazu od této čočky a ohniskovou vzdáleností f této čočky je matematicky popsán vztahem (1/(Subscript[a, 1]))+(1/(Subscript[a, 2]))=(1/f). Vyjádřete z tohoto vztahu vzdálenost (Subscript[a, 1]) a vzdálenost (Subscript[a, 2]).

Řešení

ClearAll["Global`*"];
vztah=(1/a1)+(1/a2)==(1/f);
reseni1=Solve[vztah,a1];
a1vyjadreni=a1/.reseni1[[1]];
reseni2=Solve[vztah,a2];
a2vyjadreni=a2/.reseni2[[1]];

Print["Hledané vztahy jsou: a1 = ",a1vyjadreni," a a2 = ",a2vyjadreni,"."]

Automobil, který se pohyboval s počáteční rychlostí o velikosti 36 km.(h^(-1)), začal svůj pohyb zrychlovat. Za jednu minutu zrychleného pohybu tak urazil dráhu 1,5 km. Určete velikost jeho zrychlení. Odporové a třecí síly zanedbejte.

Řešení

ClearAll["Global`*"];
draha=s==v0*t+0.5*a*(t^2);
zrychleni=Solve[draha,a];
zrychleni=a/.zrychleni[[1]];
zrychleni=zrychleni/.{v0->36 (kmh^(-1)),t->1 min,s->1.5 km};
zrychleni=zrychleni/.{(kmh^(-1))->(1/3.6),min->60,km->1000};
Print["Automobil se pohyboval se zrychlením o velikosti ",zrychleni," m.(s^(-2))."]

Osobní automobil se pohybuje rychlostí o velikosti 54 km.(h^(-1)), nákladní automobil jedoucí ve vedlejším pruhu silnice 250 m před osobním automobilem se pohybuje stálou rychlostí o velikosti 72 km.(h^(-1)). Po deseti sekundách jízdy začne osobní automobil zrychlovat se zrychlením o velikosti 0,25 m.(s^(-2)). Za jak dlouho od začátku jeho zrychlování se budou oba automobily pohybovat stejnou rychlostí? Za jak dlouho od začátku zrychlování osobní automobil dojede nákladní automobil? Jakou dráhu od začátku svého zrychlování do okamžiku předjíždění osobní automobil urazil? Sestrojte pro oba automobily do jednoho grafu graf závislosti velikosti rychlosti na čase a do druhého grafu graf závislosti uražené dráhy na čase. Grafy vykreslujte od začátku popsaného děje po dobu 15 s po předjetí nákladního automobilu. Grafy pro osobní automobil kreslete červeně, pro nákladní automobil modře. Odporové a třecí síly zanedbejte.

Řešení

ClearAll["Global`*"];
barvaosob=Red;
barvanakl=Blue;
tloustka=0.007;

prevodnams=(1000/3600);
vosob0=54 prevodnams;
deltas=250;
vnakl=72 prevodnams;
t0=10;
aosob=0.25;
tgraf=15;

rychlostosob[t_]:=(Piecewise[{{vosob0, t≤t0}, {vosob0+aosob (t-t0), t>t0}}])
rychlostnakl[t_]:=vnakl;
stejnav=vosob0+aosob tpom==rychlostnakl[tpom];
reseni=Solve[stejnav,tpom];
tstejnav=tpom/.reseni[[1]];

drahaosob[t_]:=(Piecewise[{{vosob0 t, t≤t0}, {vosob0 t0+ vosob0 (t-t0)+(1/2)aosob (((t-t0))^2), t>t0}}])
drahaosobpropredjeti[t_]:=vosob0 t+(1/2)aosob (t^2)
drahanakl[t_]:=vnakl t+deltas
stejnas=drahaosobpropredjeti[tpom]==drahanakl[tpom];
reseni=Solve[stejnas,tpom];
tpredjeti=tpom/.reseni[[2]];
 
Plot[{drahaosob[t],drahanakl[t]},{t,0,tpredjeti+tgraf+t0},PlotStyle->{{barvaosob,Thickness[tloustka]},{barvanakl,Thickness[tloustka]}},AxesOrigin->{0,0},AxesLabel->{"(t/s)","(s/m)"}]
Plot[{rychlostosob[t],rychlostnakl[t]},{t,0,tpredjeti+tgraf+t0},PlotStyle->{{barvaosob,Thickness[tloustka]},{barvanakl,Thickness[tloustka]}},AxesOrigin->{0,0},AxesLabel->{"(t/s)","(v/(m . (s^(-1))))"}]

Print["Osobní automobil a nákladní automobil se pohybovali stejně velkou rychlostí za dobu ",tstejnav," s od začátku zrychlování osobního automobilu. Velikost jejich rychlosti v tobu byla ",rychlostnakl[tstejnav]," m.(s^(-1))."]
Print["Osobní automobil předjel nákladní automobil za dobu ",tpredjeti,"s od začátku zrychlování osobního automobilu. Osobní automobil během přejíždění urazil dráhu ",drahaosobpropredjeti[tpredjeti]," m. Od začátku sledovaného úseku tedy urazil celkovou dráhu ",drahaosobpropredjeti[tpredjeti]+vosob0 t0," m."]

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

7. úkol: Řešení rovnic II.

Řešte rovnici (x^5)+2(x^3)-7(x^2)+3x-5=0 s reálnou neznámou x.

Řešení

funkce[x_]:=(x^5)+2(x^3)-7(x^2)+3x-5
Plot[funkce[x],{x,-2,3},PlotStyle->{Red,Thickness[0.007]},AxesOrigin->{0,0}]
NSolve[funkce[x]==0,x]

Řešte rovnici x-sin x=1 v množině reálných čísel pomocí funkce a) NSolve[], b) FindRoot[].

Řešení

funkce[x_]:=x-Sin[x]-1
Plot[funkce[x],{x,-5,5},PlotStyle->{Red,Thickness[0.007]},AxesOrigin->{0,0}]
NSolve[funkce[x]==0,x]
FindRoot[funkce[x]==0,{x,2}]

Na rozhraní vody a skla dopadá světelný paprsek pod úhlem 30°. Paprsek se na rozhraní obou prostředí částečně odráží a částečně láme. Určete úhel lomu daného parsku a úhel, jaký vzájemně svírá odražený a lomený paprsek. Index lomu vody je 1,33 a index lomu použitého skla je 1,65.

Řešení

ClearAll["Global`*"];
uheldopadu=30 Degree;
n1=1.33;
n2=1.65;
reseni=NSolve[((Sin[uheldopadu])/(Sin[xpom]))==(n2/n1),xpom];
uhellomu=(xpom/.reseni[[1]])(180/π);
uhelodrazlom=180-(uheldopadu+uhellomu);
Print["Úhel lomu je ",Round[uhellomu,0.1],"° a úhel mezi odraženým a lomeným paprskem je ",Round[uhelodrazlom,0.1],"°."]

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

Řešení nerovnic

Reduce[leva_strana_nerovnice==prava_strana_nerovnice, neznama] - řeší nerovnice vzhledem k proměnné neznama.
Poznámka: V zápisu rovnice jsou skutečně dva znaky = za sebou - není to přepis! Znak = je znak dosazovací, pro rovnost se používá znak ==.

Nalezené řešení je zobrazeno v přijatelnější variantě oproti řešení rovnic. Pouze je nutné akceptovat, že znak ∨, který se běžně používá k vyjádření matematického nebo, Mathematica zobrazuje jako znak ||.

Reduce[x+7≥-3]

Reduce[(x^2)+(y^2)==(r^2)]
Reduce[(x^2)+(y^2)==(r^2),y]
%//TraditionalForm

Reduce[{Sin[2x+(π/4)]≠0,0≤x<2π},x]

Reduce[{Log[3x+7]≠0,3x+7>0},x]

Funkce Reduce řeší také v některých jednodušších případech i rovnice.

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

8. úkol: Řešení nerovnic

Řešte nerovnici (x^2)+4x-12≥0 s reálnou neznámou x.

Řešení

Reduce[(x^2)+4x-12≥0,x]

Řešte soustavu nerovnic x+2y<4, 2x-3<4y a 2y≤x<0 s reálnými neznámými x a y.

Řešení

Reduce[{x+2y<4,2x-3<4y,2y≤x<0},{x,y}]

Řešte soustavu nerovnic (x^2)+(((y+2))^2)≥9 a x<0 s reálnými neznámými x a y.

Řešení

Reduce[{(x^2)+(((y+2))^2)≥9,x<0},{x,y}]

Určete definiční obor funkce f: y = (((x^3)-2)/(x+2))+(1/(Sqrt[5-x])) s reálnou neznámou x.

Řešení

defobor=Reduce[{x+2≠0,5-x>0},x];
Print["Definiční obor zadané funkce jsou ta reálná x, která splňují podmínky ",defobor,"."]
Print["Definiční obor zadané funkce jsou ta reálná x, která splňují podmínky ",defobor[[1]]," ∨ ",defobor[[2]],"."]

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