diff --git a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c index 30bd405..b38773c 100644 --- a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c +++ b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c @@ -78,12 +78,13 @@ double potenzial(int n, double a, double z, double InfInt(int n, double a, double z, double eps) { double x1 = -1; //Grenzen definieren double x2 = 1; - double R; //Variable zum speichern des Ergebnis + double R=IntRomb(x1,x2,n,a,z,f1,eps); //Variable zum speichern des Ergebnis, Integral für erste Grenzen ausrechnen double lastR; //Vergleichsvariable definieren do { + lastR = R;//letztes Ergebnis speichern x1 = x1*2; //Grenzen vergrößern x2 = x2*2; - lastR = R; //letztes Ergebnis speichern + R = IntRomb(x1, x2, n, a, z, f1, eps); //neues Ergebnis berechnen } while ((lastR/R<(1-eps)) || (lastR/R>(1+eps))); //Integralwerte vergleichen ,sodass deren Änderung kleiner als eps ist @@ -94,13 +95,18 @@ void efeld(double a, double z, int n, double eps, double f[2]; //Array zum speichern der Funktionswerte double h =0.5* z; //h relativ groß wird in Schleive verkleinert double lastdf; + f[0] = potenzial( n, a, z +(h), f1, eps); //f(z+h) berechnen + f[1] = potenzial(n, a, z - h, f1, eps); //f(z-h) berechnen + *dfp = -1* (f[0] - f[1]) / (double)(2 * h); do { - lastdf=*dfp; + h=h/2; //h kleiner machen + lastdf=*dfp; //Alte Ableitung auf neuer Variable speichern f[0] = potenzial( n, a, z +(h), f1, eps); //f(z+h) berechnen f[1] = potenzial(n, a, z - h, f1, eps); //f(z-h) berechnen - h=h/2; //h kleiner machen + + *dfp = -1* (f[0] - f[1]) / (double)(2 * h); //Differenzenquotient - } while(abs(lastdf-*dfp) > eps); //Schleife läuft solange Differenz der Ableitungen + } while((lastdf/(*dfp)<(1-eps)) || (lastdf/(*dfp)>(1+eps))); //Werte vergleichen ,sodass deren Änderung kleiner als eps ist @@ -108,7 +114,7 @@ void efeld(double a, double z, int n, double eps, int main(void) { double z, a; int n; - double eps = 1e-3; //genauigkeit epsilon + double eps = 1e-8; //genauigkeit epsilon double df; //Variable zum speichern des Differenzenquotienten //Eingabe der Variablen: