GNU Libmatheval in C++ Programm verwenden



  • Hallo!

    ich habe ein kleinclass geschrieben;zwei Methoden dieses Classes sollten Werte an X und y Pair in globale Struct zuweisen; num möchte ich die Werte durch eine Funktion, die ich über Konsole eingebe,erstmal auswerten und dafür benutze GNU Libmathavel(C- Bibleotheck) die der eingegebenen mathematischen Funktionen für spezifizierte variable Werte auswerten kann; ich habe sie in Funktionparser schön verwendet;
    Nun meine Frage wie Kann ich die in meiner classmathoden (dezim() gibt Funktionsplottwerte zurück und inter() liefer Funcktionstransmittwerte), verwenden;

    hier ist die Funktionsparser code:

    void f_eingeben(){
    
     char buffer[BUFFER_SIZE];
      int length;
      void *f;
      char **names;
      int count j,i;
      double X;
      double *x_f;
      cout <<"f(x_f) = ";
      cin.getline(buffer, BUFFER_SIZE);
      length = strlen (buffer);
      if (length > 0 && buffer[length - 1] == '\n')
        buffer[length - 1] = '\0';
    
      f = evaluator_create (buffer); /* Create evaluator for function.  */
      assert (f);
    /* Print variable names appearing in function. */
      evaluator_get_variables (f,&names, &count);
      cout <<" " ;
      for (j = 0; j < count; j++)
        // printf ("%s ", names[j]);
        cout <<'\n';
    
     double* y= new double [N_SAMPLES];
    double X=0.001;
    for(j=0;j<=N_SAMPLES-1;j++){
        y[j]=evaluator_evaluate_x (f,X);  / Funktion evalutator_evaluate_x() zur Auswertung von f(x)
        X=X*j;
        // cout <<y_z[j]<<'\t'<< j<<'\n';
      }
    
     /* Destroy evaluators.  */
    evaluator_destroy (f);
    

    hier class.h

    struct XYpair{
      double x;
      double y;
    };
    
    class INPUT{
    
     private:
      int psize;
      double xmin,xmax;
      XYpair* ptr;
      int intep;
      int dacrate;
      int ns;
    public:
      void setvalue();
      XYpair* Dezim(int& psize, XYpair* ptr);
      XYpair* Interp(int& ns,  XYpair* ptr);
    

    class.pp

    XYpair* INPUT::Dezim(int& psize, struct XYpair* ptr){
    
      double xr=xmax-xmin/psize;
      double X=0.0;
      int i;
      XYpair *dptr= new XYpair [psize];
      for(i=0;i<psize;i++){
        dptr[i].x=X;
        dptr[i].y=sin(X);    <-----//mit f_eingeben() ausgewertet
        X+=xr;
      }
      delete[]dptr;
      return dptr;
    }
    
    XYpair* INPUT::Interp(int& ns, XYpair* ptr){
    
      double xr=(double)(intep*4/dacrate);
      XYpair *iptr;
      iptr=new XYpair[ns];
      int i;
      for(i=0;i<ns;i++)
    {
      iptr[i].x=xr;
      iptr[i].y=sin(iptr[i].x*i);     <-----//mit f_eingeben() ausgewertet
      xr++;
     }
      delete[]iptr;
      return iptr;
     }
    

    ich überlege mir die f_eingeben() als golable funktion zu definieren;
    aber ich weis nicht wie die in Dezim() bzw interp() aufrufen kann;
    also wenn man eine Idee für mich hat wie ich meine Aufgaben lösen kann dann bin sehr Dankbar.

    Gruß

    Sebleb



  • Doppelpost: http://www.c-plusplus.net/forum/289997

    [Edit] Lassen wir den Thread hier besser.



  • Nexus schrieb:

    Doppelpost: http://www.c-plusplus.net/forum/289997

    Und da ein Thread zu dem Thema reicht, mache ich mal diesen hier dicht.


Anmelden zum Antworten