Ich würde gerne wissen, ob es in C++ einen Weg gibt, um zu funktionieren und andere Funktion mit einigen seiner festen Parameter zu übergeben.Pass-Funktion f (x, y) als Parameter mit y fixed
hier ein exemple zu erklären:
#include<math.h>
#include<iostream>
double myfunc(double x) { return 5*x; }
double gaussian(double x , double s , double v) { return exp((x-v)*(x-v)/(s*s)) ; }
double Trapeze1D(const double x_min, const double x_max, double (*fonction)(double))
{
double nb_pts = 100.0 ;
double integrale = 0.0 ;
double dx = (x_max - x_min)/(double) nb_pts ;
double x_k ;
while (k < nb_pts-1)
{
k++;
x_k = x_min + (double) k * dx ;
integrale += fonction(x_k) ;
}
integrale *= dx ;
return integrale ;
}
int main()
{
cout << Trapeze1D(0.0,1.0,myfunc) << endl ; // <-- works fine
cout << Trapeze1D(0.0,1.0, gaussian(double , 2,3)) << endl ; // <-- I would like something like that ...
// Also tried :
double tmp(double x) = gaussian(x, 2,3) ; // <-- does not work C++ does not allow definition of function inside function ...
cout << Trapeze1D(0.0,1.0, tmp) << endl ;
}
Mein Problem folgendes ist, werde ich (die Integrationsmethode wird viel anspruchsvoller im Ende) verschiedene Arten von Funktionen und viele von ihnen integrieren müssen ist abhängig von Parametern wie gaussian, Polynom, beta-Gesetze ...
ich auch Klasse wie folgt versucht haben, mit:
class gaussian
{
public:
double eval(double x) ;
void get(double s, double v) ;
private:
double s ;
double v ;
}
double gaussian::eval(double x){ return exp((x-v)*(x-v)/(s*s)) ; }
int main()
{
gaussian G;
G.get(1.0,2.0) ;
cout << Trapeze1D(0.0,1.0,G.eval) << endl ; // <-- error
}
aber ich th Der folgende Fehler: Verweis auf nicht statische Elementfunktion muss aufgerufen werden
Jede Hilfe wäre sehr willkommen. vielen dank
Klingt wie Sie brauchen 'std :: function' und 'std :: bind'. – NathanOliver
@NathanOliver nein er tut nicht – Sopel