Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 22. 11. 2013 16:00

PanTau
Příspěvky: 819
Škola: Plzeň :-)
Pozice: Student zoufalej z matiky
Reputace:   
 

Analýza matematické funkce

Ahoj,

potřeboval bych od Vás poradit.

Řeším program, který bude vykreslovat matematickou funkci o jedné proměnné.

Nevím si rady s tím, jak analyzovat vstupní výraz co se týče závorek.

Např. vstupní fuknce bude f(x) = (sin(1+x)/(2+3))

Jak bych měl programově poznat, že je to něco jako

((a)/(b)), kdy a = sin(1+x), b = (2+3).

Jak by jste postupovali? Díky za diskuzi.

(jazyk C)


Má kouzelná buřinka asi nefunguje.... Jinak bych tu nebyl...
Reputace slušností...

Předem všem děkuji za Vaše rady..

Offline

  • (téma jako vyřešené označil(a) PanTau)

#2 22. 11. 2013 22:03 — Editoval Bati (22. 11. 2013 22:05)

Bati
Příspěvky: 2435
Reputace:   191 
 

Re: Analýza matematické funkce

↑ PanTau:
Ahoj,
to jak bych postupoval záleží na tom, jak máš postavenou tu rekurzi pro analyzování funkce, což nepíšeš. Na základě vlastnoručně napsaného programu pro vykreslování funkcí (který jsem už mnohokrát vylepšoval a stále ho během studia používám raději, než kde co) ti dám tip, jak se to dá udělat. Detaily prozatím vynechám, ale můžu je případně poskytnout (C#).

Analyzující funkce tedy dostane nějakou část výrazu v podobě řetězce S.
Nejprve hledám binární operátor o s těmito vlastnostmi:
       o je mimo jakékoliv závorky v S
       o má co nejmenší prioritu (ve smyslu pořadí vyhodnocování)
       o hledám vždy od konce S (kvůli výrazům jako 1-1-1)
Pokud je takový operátor nalezen, volám se rekurzivně na levou a pravou část vzhledem k o (a na výsledky provedu příslušnou operaci). Pokud takový operátor o nalezen není (a S není konstanta, což je triviální), S je nutně celý buď závorka, nebo funkce nějakého argumentu. Na tyto 2 možnosti je možno ale nahlížet jako na jednu, neboť závorka je vlastně identická funkce aplikovaná na vnitřek závorky. Tudíž se zavolám na argument fce/vnitřek závorky a na výsledek aplikuji příslušnou funkci/identitu. Takže závorky zvlášť nikde řešit už nemusím.

Jen kdyby tě to náhodou nenapadlo ještě dodám, že je výhodné aby tato analyzující funkce vracela opravdu funkci (ve formě delegátu, lambda-funkce, či co) a ne přímo hodnotu funkce v konkrétním bodě. V případě grafu se totiž dá očekávat, že bude potřeba spočítat mnoho funkčních hodnot a byl by nesmysl opakovat tu samou proceduru výše pro každý bod.

Offline

 

#3 23. 11. 2013 16:03 — Editoval PanTau (23. 11. 2013 16:03)

PanTau
Příspěvky: 819
Škola: Plzeň :-)
Pozice: Student zoufalej z matiky
Reputace:   
 

Re: Analýza matematické funkce

↑ Bati:

Děkuji za tvou dlouhou odpověď, jelikož nejsem zkušený, analyzuji vstupní text(funkce tvaru např : sin(x+3^2)" jako jednoduchý řetězec...

To znamená že mám:

polePovolenýchFunkcí = {"sin", "+", "-".....

(jsem si vědom toho, že to není dobré řešení, ale je funkční)

Dále hledám, zdali je obsahuje..

Chtěl bych to řešit pře strom výrazů, s tím nemáš zkušenosti? Bohužel, nemohu přijít na to, jak se ten strom vytváří, viz, například:

http://math.hws.edu/javanotes/c9/expressionTree.png


Má kouzelná buřinka asi nefunguje.... Jinak bych tu nebyl...
Reputace slušností...

Předem všem děkuji za Vaše rady..

Offline

 

#4 23. 11. 2013 16:20

Bati
Příspěvky: 2435
Reputace:   191 
 

Re: Analýza matematické funkce

↑ PanTau:
Je podle mě lepší si to rozdělit na binární operátory a na funkce jedné proměnné, jak jsem to naznačil. Binární strom pro daný výraz samozřejmě postavit můžeš, ale samo o sobě je to k ničemu. Ono jeho stavění je velice podobné, jako samotné analyzování té funkce, které jsem popsal výše. Abys pak dostal konkrétní hodnotu, musíš totiž ten strom znovu procházet. Lepší je tedy to udělat rovnou, bez toho abych si někde vedle ukládal nějaký strom. Něco jiného by bylo, kdybys třeba potřeboval převádět mezi infixní, prefixní, postfixní notací, pak je použití stromu výhodné.

Offline

 

#5 23. 11. 2013 16:46

Stýv
Vrchní cenzor
Příspěvky: 5692
Reputace:   215 
Web
 

Re: Analýza matematické funkce

Offline

 

#6 23. 11. 2013 18:20

PanTau
Příspěvky: 819
Škola: Plzeň :-)
Pozice: Student zoufalej z matiky
Reputace:   
 

Re: Analýza matematické funkce

Díky za rady,

Batí, napsal jsem ti zprávu.


Má kouzelná buřinka asi nefunguje.... Jinak bych tu nebyl...
Reputace slušností...

Předem všem děkuji za Vaše rady..

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson