Kurzes C++ Programm (Numerische Integration) anpassen



  • Hallo liebe c++ Community,

    ich habe ein klitzekleines Problem, das ich auf Grund von ca. null Programmierahnung selbst nicht imstande bin zu lösen, für euch aber
    kein Problem darstellen sollte.

    Ein überaus hilfsbereiter Mensch hat mir vor einiger Zeit (Jahren) ein C++ Programm geschrieben, was eine bestimmte numerische
    Integration ausführt und die Ergebnisse in eine .txt Datei schreibt. Die Integrandenfuntkionen habe ich selbstständig angepasst,
    leider müsste nun auch die Struktur des Programms geändert werden, bevor es die Ergebnisse in die Datei schreibt. Hierzu fehle mir
    leider die notwendigen Kenntnisse und der ursprüngliche Autor des Programms ist außer Sichtweite gezogen.

    Hier erstmal die Syntax des Programms:

    #include <iostream>
    #include <math.h>
    #include <fstream>
    #include <vector>
    
    using namespace std;
    
    const double PI = 3.141592654;
    
    int main(){
    
    FILE *fa,*fb;
    double x,xmin,c,cmin,bdex3,vdex3,R3,xsur3,kappa3,e=1.602,Na=6.022,kT=4.11447,A3;
    double wdex3,v13,v23,cmax;
    ifstream para_file;
    para_file.open("para.txt");
        if(para_file.is_open())
        {
                               while (! para_file.eof())
        para_file >> xmin >> R3 >> A3;
    
        para_file.close();
        }
        else cout << "Unable to open file para.txt";
    
        c=0.0001e3; //original file:0.01e3 cmin-Plotbeginn
    fa=fopen("sortie.txt","w");
    while(c<=0.005E3){ //orginal file 1e3 cmax-Plotende
                    x=xmin;
    while(x<=1.0E3){  //orginal file 1e3
                   xsur3=x/R3;
                   bdex3=(6.0*xsur3*xsur3+13.0*xsur3+2.0)/(6.0*xsur3*xsur3+4.0*xsur3); //korrekt
                   kappa3=pow(10.0*e*e*c*Na/(6.95054*kT)*1.0E16,0.5); //[kappa1]=1/m korrekt
                   v13=1E21*24.0*PI*R3*c*Na*1.0E-3*e*e*A3*A3/(kappa3*kappa3*kT)*exp(-kappa3*x*1.0E-9);
                   v23=R3*0.9*10/(12.0*x)*(1.0-5.32*x/100.0*log(1.0+100.0/(5.32*x))); //korrekt
                   vdex3=v13-v23; //korrekt
                   wdex3+=0.05*2.0*R3*bdex3*exp(vdex3/kT)/pow(2.0*R3+x,2.0); //korrekt
                   x+=0.1;}
                   fprintf(fa,"%f %lf %lf %lf\n",c,wdex3);
                   wdex3=0.0;
                   printf("%f\n",c);
                   c+=0.0001;} //orginal file 0.1 Plotschritt c
    
             return 0;
    }
    

    Wie ihr sehen könnt integriert das Programm über die Funktion

    wdex+
    

    und schreibt die Ergebnisse in das File "sortie.txt".
    Davor liest es drei Parameter aus einem "para.txt" File aus, dessen Inhalt normalerweise einfach so

    0.01
    128.0
    0.0095
    

    aussieht.

    Nun müsste bevor die Ergebnisse in das .txt File geschrieben werden die Ergebnisse dieser numerischen Integration nochmals durch
    eine 2. numerische Integration über denselben Parameter x und über den denselben Bereich von c an jedem Punkt c geteilt werden.
    Diese 2. numerische Integration hat als Integrandenfunktion die neue Funktion

    wdex3n+=0.05*2.0*R3*bdex3*exp(v23n/kT)/pow(2.0*R3+x,2.0);
    

    wobei "v23n" die neue Funktion

    v23n=R3*0.9*10/(12.0*x)*(1.0-5.32*x/100.0*log(1.0+100.0/(5.32*x)));
    

    ist. Alle in den beiden Funktionen vorkommenden Parameter sind bereits bei der 1. numerischen Integration definiert worden.

    Es würde mir nun wahnsinnig weiterhelfen wenn jemand mit Lust, Laune und Zeit das bestehende Programm anpassen könnte.

    Ein herzliches Dankeschön schonmal!

    Grüße,

    elsevier



  • Dieser Thread wurde von Moderator/in Christoph aus dem Forum Mathematik und Physik in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten