PDA

Visualizza la versione completa : funzione obiettivo come input in programma c++


giancarlo1979
07-02-2005, 14:40
Ciao a tutti!
Sto sviluppando un programma in C++ che utilizza una subroutine per la programmazione non lineare.
Come posso fare perchè un utente possa dare in input una qualsiasi funzione obiettivo non lineare che venga poi interpretata e utilizzata nel modo corretto dal mio programma?
In altre parole se l'utente vuole inserire ad esempio una funzione costo del tipo 3x^2+ sqrt(x) daz tastiera o da file come posso fare perchè venga riconosciuta come tale ed utilizzata per calcolare il valore del costo dati i valori x ottenuti come soluzione?
Datemi un po' di speranza, grazie!!

anx721
07-02-2005, 15:02
La cosa non è semplicissima, devi realizzare un parser di espressioni matematiche.

Ad esempio puoi farti una classe che rappresenta la funzione che ha un metodo calcola

class Funzione{
public:
double clalcola(double);
};

il risultato del calcolo deve dipendere dalla stringa inserita dall'utenteche puo essere passata al costruttore di Funzione; quindi devi fare il parsing della stringa in modo da ottenere una sua rappresentazione tramite albero, i cui nodi sono o numeri o operatori o nomi di funzioni o l'eticheta dell a variabile x. Una volta asegnato un valore ad x, visitando l'albero puoi effettuare le operazioni e alla fine claclolare il valore della farmula per quel valore di x.

giancarlo1979
07-02-2005, 16:56
...Mi sembra di capire che con parser della funzione intendi dire che devo scorrere la stringa "carattere per carattere", riconoscendo i numeri, i segni di operazione e le variabili, associare ognuna di queste entità ad un nodo diverso e concatenarle poi per ricostruire la funzione che voglio sia eseguita...scusami ma non son un grande esperto e la mia padronanza del linguaggio è limitata alle conoscenze per l'esame "Fondamenti di Informatica"..già la parola fondamenti dovrebbe darti un'idea... :)
Mi attira anche l'idea di assegnare un nodo a una funzione (del tipo se ho una somma tra una fratta e una esponenziale definire un nodo per la prima e uno per la seconda)..ma sinceramentenon so da dove partire..
Intanto grazie, mi hai indicato una strada! :yuppi:

Loading