Nejste přihlášen/a.

Přihlásit se do poradny

 

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

Od: bflmpsvz* odpovědí: 2 změna:

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.

 

 

2 odpovědi na otázku
Řazeno dle hodnocení

 

 

duke*

0x

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.

kvd.zcu.cz/...

bflmpsvz*

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.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]