Obecné řešení libovolné rovnice o 1 neznáné

Od: Datum: 07.03.13 16:51 odpovědí: 2 změna: 08.03.13 22:40

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, ať 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šťuje, 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 byť 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.


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Od: duke*
Datum: 08.03.13 10:06

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.

http://www.kvd.zcu.cz/cz/materialy/numet/_numet.html

Ohodnoceno: 0x
 
Od: bflmpsvz*
Datum: 08.03.13 22:40

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

 

 

Přihlásit se k odběru odpovědí z této otázky:

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

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.