Nejste přihlášen/a.
Dobrý den, zajímá mě, zda existuje nějaký elegantní obecný algoritmus řešení libovolné rovnice o jedné neznámé x? Mám na mysli takový, který je schopen řešit rovnici, která obsahuje nejen základní matematické operace (+-*/), ale i různé funkce, at již nad neznámou nebo nad konstantami - např. rovnici, která obsahuje např. současně mocniny, odmocniny, logaritmy, goniometrické a hyperbolické funkce, faktoriály, absolutní hodnoty atd...
Chci to zahrnout do svého maturitního projektu z informatiky, který je psán v jazyce, který neobsahuje knihovny pro řešení rovnic sám o sobě (konkrétně C#). Kromě toho, že bude řešena jenom jedna neznámá a tedy jen jedna rovnice, by situaci měl dále zjednodušit předpoklad, že rozpoznat libovolnou funkci f(x) už program umí (lze jej tedy využít jako kalkulačku, kdy uživatel napíše příklad v libovolném tvaru a program mu vyplivne výsledek, nebo lze dosazovat za x a vykreslovat graf), a je samozřejmě triviální např. převést každou rovnici z tvaru f(x) = g(x) do tvaru f(x) - g(x) = 0 a hledat tak, pro jaká x bude druhá strana rovna nule.
Napadá mě např. metoda dosazování a půlení intervalu, kdy se cyklicky dosazuje za x a zjištuje, zda se rovná, dokud se nedosáhne nějaké určité přesnosti, ale zde nastává problém u funkcí s více kořeny (např. nenapadá mě, jak takovou metodou najít byt jen několik řešení pro rovnici sin(x) = 0).
Nechci samozřejmě po nikom přesnou podobu kódu (proto taky dotaz nepíšu do sekce programování), ale jen slovní popis možného algoritmu, nebo alespoň nějakou myšlenku... Děkuji za rady.
Váš navržený postup je správný. převést vše na jednu stranu a vhodným způsobem "zvolit"x tak, aby výsledek rovnice byla kladný a poté "x", aby výsledek ovnice byl záporný. Pak se půlením intervalu se dostáváte k řešení.
Rychlejíšm způsobem nalezení x je výpočet pro 2 velmi blízké zvolené hodnoty, tím derivací dostáváte "směr"řešení. Myslím že do 10-ti kroků dostáváte řešení na 2 des. místa.
Zkuste pohledat něco o Newtonově metodě řešení rovnic.
Také jsem uvažoval nad něčím podobným... nedosazovat vždy jen jeden bod, ale dvojici bodů velmi blízko u sebe a zjistit, zda je funkce v daném velmi krátkém intervalu rostoucí nebo klesající. Domníval jsem se, že by se tak omezila chybovost u složitějších funkcí.
Jinak osobně bych ve svém projektu preferoval všestrannost nad rychlostí. Ale jak jsem teď zjistil, ani Wolfram Alpha mi nedokázal vyřešit např. rovnici sin(x^x) = x-10, takže když tu všestrannost nedokáži do maturity úplně vyřešit (ani na to nemám příliš čas, musím se věnovat i ostatním předmětům), snad mi to u té zkoušky bude odpuštěno...
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.