Toon posts:

Wiskundige formule weergave

Pagina: 1
Acties:
  • 175 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,
Ik ben nogal veel bezig met Wiskunde en Programmeren. Ja, ja... En ik heb nu een routine nodig, die een wiskundige formule op het scherm precies zo weergeeft zoals die ook in een wiskunde boek zou worden afgedrukt.

Bijvoorbeeld, als invoer-string typ je in :

f(x)=Sin(x*345*Sqrt(0.876))*(Sin(x/Alpha))/(Sqrt(2^(1/3)))

Het te ontwikkelen programma zal deze formule dan grafisch weer moeten geven.
Dit is zomaar een fantasie-formule, maar het gaat hier om het idee. En de formule gaan samenstellen, zoals met de Vergelijkings-editor van Word is hier geen optie. Ik zoek hiervoor dus een oplossing, die ook een dergelijke weergave van een formule kan presenteren in tekst of grafische mode. En dat in 1 van de volgende talen; Visual Basic, C++ of Pascal. Na zelf al uren rondgekeken te hebben op Internet, heb ik nog steeds niets gevonden wat een oplossing zou kunnen zijn. Het lukt mij al wel wel om in een draaiend programma een funktie in te voeren, en daarmee te gaan rekenen. Hiervoor zijn verschillende parser-achtige routines bekend. Maar wiskundige 'PrettyPrint' routines, om Wiskundige formules (grafisch) goed weer te geven, die vrij te gebruiken zijn - mijns inziens niet.

Dus; HELP !..........

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 28-12 19:18

Gerco

Professional Newbie

Misschien is dat omdat zoiets als dit behoorlijk ingewikkeld is?

Pakketen als word-perfect konden (kunnen) het wel, misschien kun je daar zoeken voor een algoritme. Of misschien in een open-source pakket wat het kan (OpenOffice.org?)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • anandus
  • Registratie: Februari 2001
  • Niet online
edit:

Laat maar :z

"Always remember to quick save" - Sun Tzu


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11 01:34
Je kan kiezen voor MathML, een XML gebaseerd taal om wiskundige formules te beschrijven. Er bestaan al MathML renderers, die dus je MathML vergelijking kunnen weergeven.

Ook kan je kiezen voor LaTeX, wat werkelijk de killer is op het gebied van type-setting van wiskundige vergelijkingen. Als je een LaTeX distro kan en wil gebruiken, kan je relatief eenvoudig een wiskundige formule opstellen in LaTeX en deze daarna omzetten naar bijvoorbeeld PDF. Deze PDF kan je dan weer embedden in je applicatie.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

In Latex kun je wiskundige formules heel mooi weergeven. Als ik het goed heb is dit een free software pakket, dus de routine voor het weergeven kun je er misschien gewoon uithalen, al heb ik zelf nog nooit in de code gekeken.

[edit]
weer te langzaam :)

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je zal dan eerst die string moeten parsen, en er een boom van statemachines (objecten) van maken. Ik heb zoiets een keer in C++ geschreven, je kon dan ook differentieren. Had alleen geen grafisch pretty-printing zoals jij zoekt nu. Maar... het complete probleem is dus vrij lastig, en kost je zeker enkele duizenden regels C++.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Je kunt ook zelf een beetje klooien om eens te kijken hoe het gaat. Begin met de deelstreep '/' te vervangen door teller boven noemer met een lijn ertussen. Dat scheelt al veel.

Later moet je ook dingen als ronde haken in allerlei formaten maken. Kies eerst eens een taal en kijk hoe je op willekeurige plaatsen op het canvas tekekns kunt zetten.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Kun je niet eisen dat je gebruikers MathML of Latex invoeren?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11 01:34
Zoijar: parsen, boom, pretty-printing
Je moet dit niet zelf gaan implementeren, dat is verschrikkelijk werk. De parser voor wiskundige formules is nog maar een fractie van het probleem, wat je zelfs nog vrij eenvoudig kan oplossen met een parser-generator. Het zetten van de vergelijking is het meest complexe en hiervoor kan je dus echt het beste een externe tool gebruiken (bijvoorbeeld MathML renderers of LaTeX zoals ik eerder suggereerde).

Als je trouwens naar MathML kijkt, zal je zien dat je dan in feite de parse-stap overslaat en je vergelijking als een soort boom moet beschrijven, die normaal uit je parser zou komen. Dit komt geheel overeen met het concept van XML: data uitwisselen in boom-vorm en niet in een een of andere specifieke concrete syntax.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • johnny7
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Ik ben hier ook enigszins mee bezig, en heb gemerkt dat je vrij eenvoudig zulke formules in een browser kunt tonen. Bij de site van mozilla kun je bij projects kijken naar MathML, ze hebben daar voorbeelden van hoe een wiskundige formule eruit kan zien in een browser. Je voert de MathML in de source van een webpagina in een XML-achtige structuur in zoals mbravenboer al had gezegd en je krijgt de mooie formule terug. Om hetzelfde resultaat te krijgen onder IE kun je een gratis plugin downloaden, mathml-player. Misschien heb je er wat aan :)

Verwijderd

Wat is het precies wat je zoekt ?
-een library (oed) die die formules weergeeft.
-een oplossing in hoe je dit zelf zou kunnen doen.

in het eerste geval kan ik je niet helpen, ik ben niet zo"n library-freak...
maar als je het zelf wil doen, misschien wel.
Je zei dat je al wel een beetje kon rekenen met een formule uit een string. Als je dit goed werkend heb, ben je al een heel eind !!
Je hebt dan een systeem dat je string in alle losse stapjes deelt, en dat snapt :-) Nu hoef je er alleen niet mee te rekenen, maar me te tekenen. Dat moet maar een klein stapje zijn vergeleken met wat je dan hebt...

PS: ik heb ooit ook zo"n reken-ding geschreven (c++).
wil ik je wel sturen, moet je ff wat achter laten...

  • tomato
  • Registratie: November 1999
  • Niet online
Jappie: Nu hoef je er alleen niet mee te rekenen, maar me te tekenen. Dat moet maar een klein stapje zijn vergeleken met wat je dan hebt...
Dat is dus niet zo makkelijk als het lijkt ;)

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 21:46

Knutselsmurf

LED's make things better

Even een gedachtengangetje:

Als je in een evaluator bijv sin(1/x) uitvoert, zal eerst 1/x worden geevalueerd, waarna de sin nog uitgevoerd wordt. Als de evaluatie van 1/x nu niet een getal maar een bitmap teruggeeft met bepaalde afmetingen, weet je hoe groot je haakjes moeten worden en waar je de tekst 'sin' moet neerzetten. Dit levert weer een grotere bitmap op, net zolang totdat je totale expressie afgebeeld is.

- This line is intentionally left blank -


Verwijderd

Op dinsdag 23 juli 2002 14:32 schreef tomato het volgende:
Dat is dus niet zo makkelijk als het lijkt ;)
Helemaal gelijk, maar je bent al een heel end (rekenen is immers ook niet erg makkelijk)...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

is "een heel eind" 400 of 500 van de 5000 regels C++? ;)

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06 10:52
Op dinsdag 23 juli 2002 21:06 schreef Zoijar het volgende:
is "een heel eind" 400 of 500 van de 5000 regels C++? ;)
Muwhahahaha >:)

Uit de Mathematica documentatie:
Mathematica is one of the more complex software systems ever constructed. Its source code is written in a combination of C and Mathematica, and for Version 4, the code for the kernel consists of about 650,000 lines of C and 130,000 lines of Mathematica. This corresponds to roughly 18 megabytes of data, or some 18,000 printed pages.
The C code in Mathematica is actually written in a custom extension of C which supports certain memory management and object­oriented features. The Mathematica code is optimized using Share and DumpSave.
In the Mathematica kernel the breakdown of different parts of the code is roughly as follows: language and system: 30%; numerical computation: 25%; algebraic computation: 25%; graphics and kernel output: 20%.
Most of this code is fairly dense and algorithmic: those parts that are in effect simple procedures or tables use minimal code since they tend to be written at a higher leveloften directly in Mathematica.
The source code for the kernel, save a fraction of a percent, is identical for all computer systems on which Mathematica runs.
For the front end, however, a significant amount of specialized code is needed to support each different type of user interface environment. The front end contains about 600,000 lines of system­independent C source code, of which roughly 150,000 lines are concerned with expression formatting. Then there are between 50,000 and 100,000 lines of specific code customized for each user interface environment.
Mathematica uses a client­server model of computing. The front end and kernel are connected via MathLinkthe same system as is used to communicate with other programs.
Within the C code portion of the Mathematica kernel, modularity and consistency are achieved by having different parts communicate primarily by exchanging complete Mathematica expressions.
But it should be noted that even though different parts of the system are quite independent at the level of source code, they have many algorithmic interdependencies. Thus, for example, it is common for numerical functions to make extensive use of algebraic algorithms, or for graphics code to use fairly advanced mathematical algorithms embodied in quite different Mathematica functions.
Since the beginning of its development in 1986, the effort spent directly on creating the source code for Mathematica is a substantial fraction of a thousand man­years. In addition, a comparable or somewhat larger effort has been spent on testing and verification.
The source code of Mathematica has changed greatly since Version 1 was released. The total number of lines of code in the kernel grew from 150,000 in Version 1 to 350,000 in Version 2, 600,000 in Version 3 and nearly 800,000 in Version 4. In addition, at every stage existing code has been revisedso that Version 4 has only a few percent of its code in common with Version 1.
Despite these changes in internal code, however, the user­level design of Mathematica has remained compatible from Version 1 on. Much functionality has been added, but programs created for Mathematica Version 1 will almost always run absolutely unchanged under Version 4.
Succes met je projectje :)

He who knows only his own side of the case knows little of that.


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 21:46

Knutselsmurf

LED's make things better

Zelf schrijven is een uitdaging, hergebruiken is makkelijk :)

[url="http://www.filelibrary.com/Contents/Windows/114/3.html"]op deze pagina[/url] staat een ActiveX Equation editor.

- This line is intentionally left blank -


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op woensdag 24 juli 2002 12:10 schreef RickN het volgende:

[..]

Muwhahahaha >:)

Uit de Mathematica documentatie:
[..]

Succes met je projectje :)
Dat zegt natuurlijk helemaal niets (ok, het geeft natuurlijk wel een bepaalde indicatie). Bovendien heeft een oplossing in C ook de neiging uit veel meer regels te bestaan dan diezelfde oplossing in C++.

Het lijkt mij iig niet zo super ingewikkeld als je gewoon de basis-dingen van wiskunde ondersteunt (dus verder geen matrices bijvoorbeeld... lijkt me niet dat de topicstarter daar support voor wil hebben gezien z'n voorbeeld-equation)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Als indicatie, ik heb net geteld, mijn (OO) C++ oplossing voor het parsen van basis expressies, het differentieren hiervan, het kunnen werken met variabelen, en het printen in text; nam zo'n 1600 regels in. Vrij compacte code, commentaar niet meegeteld. Met dit framework kan je denk ik grafisch printen in een regel of 1000 toevoegen
Pagina: 1