Salve ragazzi,
ho un'altra domandina da farvi. Sto cercando di farmi delle funzioni generali di ottimizzazione (cioè le prendo da sorgenti affidabili) e ho il seguente problema. Solitamente in una routine di ottimizzazione quello che cambia di volta in volta è la funzione da ottimizzare e il mio problema è rendere la funzione di ottimizzazione "il più flessibile possibile" in modo tale che l'utente non debba mettere mano dentro la funzione di ottimizzazione, ma scriva solamente la propria funzione da ottimizzare secondo alcune piccole regole. Ecco l'esempio:
struct opt_args{
double *data;
int length_data;
};
static double parabola(double x, struct opt_args *args)
{
int i;
double res;
for(i=0;i<args->length_data;i++)
{
res+= args->data[i]*pow(x,2)-2;
}
return(res);
}
double Bustra_R_zeroin( /* An estimate of the root */
double *ax1, /* Left border | of the range */
double *bx1, /* Right border| the root is seeked*/
double *Tol, /* Acceptable tolerance */
int *Maxit, /* Max # of iterations */
double (*f)(double, struct opt_args *args),/* Function under investigation */
struct opt_args *args /* Other arguments for f*/
)
{
.....
.....
fa = (*f)(a, args);
fb = (*f)(b, args);
.....
....
}
come vedete la funzione da ottimizzare deve avere come primo argomento l'argomento rispetto al quale ottimizzare e per il resto degli argomenti l'utente dovrebbe definire una opportuna struttura.
Ora il mio problema è dichiarare in "parabola" che il secondo argomento è un puntatore a struttura opt_args e in "Bustra_R_zeroin" che l'ultimo argomento è un puntatore a struttura opt_args (e che la funzione puntata ha come secondo argomento un puntatore a struttura). La mia domanda è: è possibile dichiarare dei generici puntatori a struttura in modo tale che la funzione "Bustra_R_zeroin" non debba essere sempre modificata? Quel che so è che non è possibile usare una struttura (in senso lato) se non si è prima dichiarata, ma non so se questo implica che il mio problema non abbia soluzione.
Oppure, c'è una soluzione meno barabara al problema?