====== 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]].