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 so0.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 Funktionwdex3n+=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.