2010-07-31 10 views
9

Ho una domanda di base per tutti gli esperti di matematica là fuori.Metodi per convertire le formule matematiche in codice in Matlab, C++, ecc.?

"Se ho un documento accademico, qual è il modo più semplice per convertire una semplice equazione matematica in codice Matlab (o C++) funzionante?"

Idealmente, ci sarebbe uno strumento di conversione Latex >> Matlab (o C++).

Tuttavia, in caso contrario, esiste un "cheat sheet" che contiene tutti i simboli matematici comuni e le relative parole chiave di implementazione equivalenti in Matlab (o R o C++)?

+2

Questa probabilmente non è la risposta che si sta cercando: andare a un'università, prendere almeno uno o due semestri di matematica, a meno che non sia possibile leggere e comprendere quei documenti accademici, e anche imparare Matlab/e o C++. Allora - forse - sarai in grado di convertire una carta in codice. IMHO non c'è scorciatoia per questo. –

+2

L'intero punto della programmazione è tradurre cose che le persone possono leggere e capire in cose che possono essere eseguite dalle macchine. – user401947

+0

Grazie per i vostri commenti, apprezzati. – Contango

risposta

7

Utilizzare Mathematica Symbolic Computation.

È possibile immettere equazioni matematiche direttamente in Mathematica, quindi esportare il risultato come codice C.

Continuare a modificare l'equazione finché il rendering non appare identico all'equazione originale nel documento accademico. Puoi quindi inserire i tuoi parametri e Mathematica calcolerà il risultato per te.

Si può anche fare cose interessanti come chiedere di differenziare l'equazione - e produrrà il differenziale, e stampare l'equazione risultante.

È possibile chiamare Mathematica da qualsiasi lingua, tra cui .NET, Q, Python, Java, ecc

Si potrebbe anche compilare il programma Mathematica in un assembly .NET e integrarlo in un app.

Mathematica emetterà anche codice Java o C che corrisponde alla formula matematica appena inserita.

+0

Proprio come nel caso di qualsiasi altro linguaggio di programmazione, è necessario conformarsi a regole rigide quando si inseriscono espressioni in Mathematica (nonostante queste espressioni siano progettate per apparire simili alla notazione matematica per la leggibilità). Non sono a conoscenza del fatto che Mathematica sia in grado di produrre codice compatibile con Java o .NET. – Szabolcs

+7

Sì, Mathematica ha funzionalità per l'importazione di un sottoinsieme di formule LaTeX, ha persino una funzione per cercare di indovinare cosa significano. Ma è necessario comprendere il significato delle formule e correggerle da soli. Prendi ad es. 'ToExpression [" $ J_3 (x) $ ", TeXForm]'. Ti dà una funzione di Bessel. Non c'è alcuna garanzia che l'autore della carta originale abbia effettivamente inteso una funzione di Bessel con 'J'. Come molti altri hanno sottolineato, ci sono molti strumenti che aiutano nella conversione di una formula tra diverse rappresentazioni, ma alla fine spetta a voi capirli e far funzionare il prog. – Szabolcs

9

Non ho mai visto una cosa del genere. La maggior parte della notazione matematica è scritta per essere compresa da una persona di (almeno) intelligenza ragionevole, quindi spesso omette tutti i tipi di dettagli che sarebbero necessari per produrre codice funzionante. Se tu avessi un tale strumento, dubito che produrrebbe risultati utilizzabili più del (forse) il 10% delle volte.

Il contrario sembra molto più sostenibile: produrre una notazione matematica leggibile dal codice (specialmente da qualcosa come Matlab) suona molto più ragionevole. È molto più semplice omettere le informazioni presenti che cercare di sintetizzare le informazioni mancanti.

+1

Abbastanza vero. Ma a volte sarebbe molto utile creare uno script da linea di comando (in una lingua) da un'espressione trovata in un documento. Tuttavia, il problema principale è che la maggior parte dei documenti sono in formato PDF, quindi le formule non sono altro che oggetti grafici ... –

+2

Ma il contrario ha un problema molto simile - quando voglio capire che cosa è un algoritmo, specialmente un quello matematico, posso scavare attraverso il codice (un processo di giorni o settimane) o potrei chiedere all'autore una breve descrizione comprensibile all'uomo. Non penso che quest'ultimo possa essere facilmente automatizzato. –

+0

@Doc Brown: Non fraintendetemi: non mi aspetto di vedere uno strumento per convertire grandi blocchi di (diciamo) C++ in descrizioni molto leggibili in qualunque momento. Ciò nondimeno, posso almeno * immaginare * una cosa che produca risultati utilizzabili a metà, dove trovo difficile persino immaginare di andare nella direzione opposta. –

1

Non è possibile. Generalmente, le espressioni matematiche sui giornali sono fatte per essere comprese dagli umani, come ha detto Jerry Coffin. Per questo motivo ci sono tutti i tipi di problemi. Uno che penso in cima alla mia testa è l'ottimalità. Il codice (matematico) per il consumo umano è raramente ottimale, un cattivo esempio è la sequenza di Fibonacci. Nessuno scriverà il codice di Fibonacci mentre gli umani lo comprendono.

Quindi, anche se hai analizzato il codice, avrai ancora così tanto lavoro da fare come se stessi scrivendo tu stesso.

0

La domanda si basa su un assunto di base - i computer fanno tutto meglio. Questo non è il caso.

I computer e in particolare le macchine computazionali tendono a svolgere compiti iterativi meglio degli uomini e dei compiti cognitivi. La matematica che stai cercando di convertire è iterativa o cognitiva?Se è iterativo, allora la procedura standard - per x do n times o while (criterio) do etc ... sarebbe semplice da usare per compiti iterativi. Se stai approfondendo l'intelligenza artificiale e l'apprendimento automatico, c'è una grande quantità di informazioni là fuori su come i computer dovrebbero fare l'intelligenza artificiale e farlo bene. Suppongo che l'interrogante chieda aiuto dal punto di vista cognitivo e non iterativo. Da qui il problema - e la mancanza di soluzione. Se l'attività è cognitiva da implementare, le macchine computazionali non ti aiuteranno.

Problemi correlati