====== Průsečík přímky a kružnice s CAS Maxima ======
===== Zadání =====
Je dána kružnice $k: (x-m)^2+(y-1)^2=16$ a přímka $p: x-3y+6=0$. Určete hodnotu parametru //m//, aby přímka //p// byla tečnou ke kružnici //k//.
===== Teorie =====
Kružnice je zadána ve středovém tvaru, ze kterého pohodlně přečteme souřadnice středu [//m//;1] a poloměr přímky //r// = 4. Střed má tedy neznámou x-souřadnici (je dána parametrem //m//). Přímka je zadána obecnou rovnicí.
Abychom nalezli //m// (x-souřadnici středu), budeme hledat průsečíky //k// a //p// tak, aby existoval právě jeden (tzn. přímka s kružnicí mají jeden společný bod, je to tečna). Řešíme proto soustavu rovnic přímky a kružnice a hledáme společný bod [//x//;//y//].
Není nutné celou soustavu dořešit, stačí si uvědomit, že chceme, aby měla právě jedno řešení, proto ve chvíli, kdy dostáváme kvadratickou rovnici, stačí vzít její diskriminant a položit ho roven nule (je-li diskriminant nula, vyjde právě 1 řešení). Dořešíme jen rovnici s diskriminantem a dostáváme hodnoty parametru //m//.
===== Řešení =====
Spusťte program wxMaxima a začněte psát (i když nikde nebliká kurzor, to nevadí) nebo pište do okna [[http://www.maxima-online.org|online verze]]. Pokud používáte program wxMaxima, musíte za každým příkazem stisknout **Shift+Enter**, aby se vykonal!
^ Příkaz wxMaxima ^ Vysvětlení ^ Postup ^
| k: (x-m)^2+(y-1)^2=16;
| Vkládáme rovnici kružnice a pojmenováváme ji k. | Zadáváme rovnice do programu. |
| p: x-3*y+6=0;
| Vkládáme rovnici přímky a pojmenováváme p. | ::: |
| solve([k,p],[x,y]);
| Necháváme program vyřešit soustavu rovnic //k//, //p// vzhledem k neznámým //x// a //y//, //m// je tedy parametr. Všimneme si, že x1 a x2, stejně jako y1 a y2 se liší přičtením či odečtením výrazu pod odmocninou (disktiminant), ten by tedy měl být 0. Zkusíme si nejprve vyřešit soustavu "ručně" dosazovací metodou. ||
| solve(p,y);
| Necháme "vyřešit" přímku //p// pro proměnnou //y// s "parametrem" //x// neboli necháme vyjádřit z rovnice přímky //p// neznámou //y// vzhledem k //x//. | Vyřešíme soustavu rovnic //k// a //p// dosazovací metodou, dosazením za //y// z rovnice přímky. |
| rhs(%[1]);
| Zobrazíme si jen pravou stranu rovnice, která nám vyšla, to dělá funkce ''rhs()''. symboly ''%[1]'' říkají, že z předchozího výsledku, kterým byl (jednoprvkový) seznam (má hranaté závorky) bereme hned první (a zde jedinou) položku. | ::: |
| subst(%,y,k);
| Substituujeme (dosazujeme) do rovnice //k// místo neznámé //y// hodnotu předchozího výsledku (znak %). Pokud něco nefunguje, můžeme rovnou místo znaku % napsat ''(x+6)/3''. | ::: |
| expand(%);
| Roznásobíme předchozí rovnici. | ::: |
| %-16
| Od předchozího výsledku odečteme 16, abychom dostali na levé straně kvadratický trojčlen a na pravé straně rovnice nulu. | Máme kvadratickou rovnici pro //x// vzhledem k //m//. Jelikož ale nepotřebujeme znát hodnotu //x//, ale pouze zajistit, aby mělo jediné řešení, budeme dále určovat diskriminant kvadratické rovnice tak, aby byl roven 0. |
| lhs(%);
| Zobrazíme si jen levou stranu rovnice, tj. pouze kvadr. trojčlen. | ::: |
| ratcoef(%,x,2);
| Z předchozího výsledku (znak %) si zobrazíme koeficient pro //x// v 2. mocnině. | ::: |
| let(a,%o10);
| Nastavíme programu, že má písmeno //a// později substituovat hodnotou výsledku na řádku 10 (znaky %o10), tj. předchozí výsledek. Pozor, nelze použít znak %, výraz se bude vyhodnocovat až ve chvíli samotného substituování! | ::: |
| ratcoef(%o9,x,1);
| Z výsledku na řádku 9 (znak %o9, řádek s kvadratickým trojčlenem) si zobrazíme koeficient pro //x// v 1. mocnině. | ::: |
| let(b,%o12);
| Nastavíme programu, že má písmeno //b// později substituovat hodnotou výsledku na předchozím řádku (%o12). | ::: |
| ratcoef(%o9,x,0);
| Z výsledku na řádku 9 si zobrazíme koeficient pro absolutní člen (//x// v 0. mocnině)- | ::: |
| let(c,%o14);
| Nastavíme programu, že má písmeno //c// později substituovat hodnotou výsledku na předchozím řádku (%o14). | ::: |
| letsimp(b^2-4*a*c);
| Necháme vypsat vzorec pro diskriminant, funkce //letsimp// do něj dosadí za neznámé //a//, //b// a //c// dříve nastavené hodnoty. | ::: |
| %=0;
| V předchozím řádku určený diskriminant položíme roven nule. | Máme rovnici diskriminantu rovnu nule, hledáme pro jaká //m// bude nula a tudíž vyjde jediný průsečík přímky s kružnicí. |
| solve(%);
| Necháme vyřešit rovnici v předchozím řádku. | Program nalezl 2 možné hodnoty parametru //m//. máme řešení. |
Bude-li $m =\pm4 \sqrt{10} -3$, bude se kružnice dotýkat přímky.
Můžeme ještě spočítat souřadnice tečného bodu:
^ Příkaz wxMaxima ^ Vysvětlení ^ Postup ^
| rhs(%[1]);
| příkaz rhs vybere jen pravou stranu rovnice, %[1] říká první část ze seznamu posledního výsledku. | Zobrazíme hodnotu //m1//. |
| subst(%,m,k);
| Substituujeme (dosadíme) předchozí výsledek za parametr //m// do rovnice kružnice. | Dosadíme za parametr do kružnice. |
| solve([%,p],[x,y]);
| Vyřešíme soustavu rovnic, první je předchozí výsledek (kružnice s dosazeným parametrem), druhá je přímka, hledáme neznámé //x// a //y//. | Hledáme průsečík kružnice a přímky pro první hodnotu parametru //m//. |
| rhs(%o18[2]);
subst(%,m,k);
solve([%,p],[x,y]);
| Výsledek pro druhou hodnotu parametru //m2// dostaneme analogicky, nejprve zobrazujeme druhou hodnotu (jen pravou stranu) z výsledku na řádku 18. | Dopočítáme tečný bod pro druhou hodnotu parametru. |
Celý výpočet pro program wxMaxima si můžete {{:matematika:software:maxima:kruzniceaprimka.wxm|stáhnout}}. Otevřete nové okno a po načtení klikněte v menu na "Cell" → "Evaluate All Cells". Nezapomeňte, že při opakovaném provedení příkazu (stisku Shift+Enter) znamená znak % v příkazu vždy výsledek naposledy provedeného výpočtu, nikoliv předchozího řádku. Při opakovaném provedení se také mění čísla řádků, takže nemusí odpovídat správně očíslování např %o18.
Exportovanou podobu v HTML najdete na [[http://www.gml.cz/prof/rydlo/matika/maxima/kruzniceaprimka1.html|stránkách prof. Rýdla]].