Newsgroup: it.comp.os.linux.development
Titolo: Risolvere equazione per variabile

>> 4
Avete idea del procedimento che seguono?  Vorrei implementarlo in
codice.  La fase di analisi della stringa contenente l'equazione e la
sua trasformazione in una struttura che si presti a elaborazione per
ora non mi interessa, cerco solo i modi in cui si opera su quella
struttura.
Ho provato su carta a creare un'algoritmo di eliminazione di elementi
ora da un membro ora dall'altro dell'equazione, ma e` talmente
convoluto che ho avuto difficolta` a tradurlo in codice e sono sicuro
che esista qualcsoa di piu` semplice.
Esistono due programmi di algebra simbolica (Yacas, Maxima) che tra le
tante cose fanno anche questa, ma 1) la mia lettura del C e` a dir
poco carente e 2) vorrei non dover reversare il procedimento, almeno
la sua spiegazione preferirei leggerla in un linguaggio umano.
Grazie per qualunque indicazione.
Massimiliano

 Avete idea del procedimento che seguono?
Hai guardato su un libro di matematica delle superiori?-P
Non vorrei banalizzare il problema, ma non credo ci siano molti altri
sistemi.
Prova anche a chiedere lumi su it.scienza.matematica, e' brava gente e se
hanno smesso di litigare sull'esistenza dello zero probabilmente qualcuno ti
dara' indicazioni utili.
Ciao.
Alessandro.

 dara' indicazioni utili.
Ma il metodo e` chiaro: sottrai questo ad entrambi i membri, dividi
entrambi i membri per quest'altro... finche' non ti ritrovi la
variabile solina soletta al fianco dell'uguale.  E' metterlo in codice
che mi causa difficolta`.  Ho provato ad esprimere l'equazione in
notazione prefisso (LISP, insomma), visualizzarla come albero e
generalizzare due o tre operazioni di riduzione da applicare ai `nodi'
terminali, ma dopo mezz'ora di tentativi di tradurre il tutto in
istruzioni, il mio occhio destro viaggiava in una direzione e l'occhio
sinistro in quella opposta.  Insomma, e` un problema di modellamento,
non di matematica.
Massimiliano

>> (vedi un po' che ti da'...)
Scherzi a parte, non sempre esiste una soluzione alla equazione f(x)=0.
Comunque, tu parti da una roba del tipo A=B, dove A e B sono espressioni
arbitrarie, poi vuoi esplicitare una certa variabile x. Intanto trasformi
in A-B=0 e ti riconduci alla forma standard f(x)=0 poi, se conosci
l'inversa F della funzione f, calcoli x=F(0): semplice, no?
Siccome in generale f() sara' una funzione composta, applichi il
procedimento ricorsivamente:
f(x)=a(b(x)) ==> F(y)=B(A(y))
ecc. ecc.
Nella pratica le cose sono molto complesse e difficilmente trattabili
in modo totalmente automatico, per cui nella matematica e nella fisica
mi pare vengano impiegati sistemi di manipolazione algebrica che si
limitano ad applicare semplici regole di matching, lasciando alla mente
dell'umano la scelta delle strategie.
Ciao,
// Umberto Salsi
//
// 
http://digilander.iol.it/salsi
  --  GnuPG Key ID = BE2C F6CD 77E9 29AE


Scusa, non avevo capito la domanda allora :-)
Ciao
Alessandro.


Ciao,
in effetti esiste un algoritmo numerico che permette di trovare le
radici (o soluzioni) di f(x)=0 per a<x<b dove a e b sono numeri reali ed
e' l'algoritmo di newton.
Certo e' qualcosa di molto diverso da quello che vuoi fare tu. Tu vuoi
risolvere l'equazione in modo formale, cioe' quasi come lo farebbe una
persona, mentre invece l'algoritmo citato e' un qualcosa che puo' fare
solo un calcolatore ed ha a che fare col calcolo numerico piu' che con
la matematica "pura".
Se ti interessa l'approccio newton fai una ricerca col google.
Se ti interessa il calcolo numerico in generale ti consiglio di
avvicinarti a matlab... non perdere tempo col c. Tra l'altro se le
funzioni che vuoi risolvere sono polinomi, matlab e' in grado di
risolverli in maniera efficientissima.
Quello che vuoi fare tu e' davvero complesso.
In primo luogo devi implementare un parser per la notazione matematica,
questo parser produrra una "struttura" come la chiami tu in pratica e'
un albero sintattico.
Gia' solo questa prima parte non e' semplice, per avere un idea piu'
precisa ti posso consigliare questo link
http://www.foretec.com/python/workshops/1998-11/proceedings/papers/aycock-little/aycock-little.html
lascia perdere il fatto che si parla di python, l'importante e' che
l'articolo spiega molto bene (secondo me) come approcciarsi al problema
del parsing di un linguaggio quale e' la "notazione matematica".
Una volta che hai l'albero sintattico... beh qui e' il nucleo del tuo
programma: scrivere un software che sappia calcolare l'equazione dati
gli altri parametri... qui non ho consigli a parte che si ricade nel
problema f(x)=0 e quindi...
Beh... spero di esserti stato un minimo utile.
Cesare

 dell'umano la scelta delle strategie.
Gia`, ma non mi serve dimostrare la relativita` generale, il genere di
problemi che avvicino e` proprio della semplicita` di (a+b)*c=-y^2.
Grazie comunque.
Massimiliano

 problema f(x)=0 e quindi...
...e quindi!?
Comincio a sospettare una congiura. ;-)
Massimiliano

 Scusa, non avevo capito la domanda allora :-)
Fa niente, neppure io sono stato un mostro di chiarezza. :-)
Massimiliano


Adesso che ci ripenso, provaci lo stesso su it.scienza.matematica, penso che
ti possano ugualmente dare suggerimenti utili su chi ha gia' affrontato il
problema e come lo ha risolto.
Alessandro.

 dall'altro lato:
Possono darsi situazioni in cui la variabile x (o comunque quella in cui 
risolvi l'equazione) compaia in piu` di un leaf node, o rinunci a priori 
a trattare casi del genere?
Ciao
  David
-- 
<d.santinoli presso mi. flashnet. it>