From 414de3aaa461d4c8a4b328b54bae480d5895bdec Mon Sep 17 00:00:00 2001 From: maasp Date: Sun, 26 Apr 2020 18:21:48 +0200 Subject: [PATCH] =?UTF-8?q?unendliches=20integral=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/ComputerphysikAbgabe.c | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c index 9683dfa..8bc34ff 100644 --- a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c +++ b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c @@ -3,6 +3,7 @@ #include int mmax = 10; //globale Variable, Maximale Anzahl der Schritte +double InfInt(int n, double a, double z,double eps); double f1(double x, double a, double z) { // Zu integrierende Funktion return (exp(-(x * x) / (a * a)) / sqrt(x * x + z * z)); } @@ -38,7 +39,7 @@ double IntRomb(double x1, double x2, int n, double a, double z, T[0][0] = trapez(n, a, z, func, x1, x2); //erstes Trapez berechnen for (i = 1; i <= mmax; i++) { - n = n * 2; //Trapeze für k=0 berechnen, indem man n vergrößert + n = n * 2; //Trapeze für k=0 berechnen, indem man n vergrößert T[i][0] = trapez(n, a, z, func, x1, x2); h[i] = h[i - 1] / 2.0; //h berechnen für i>1 indem man durch 2 teilt @@ -57,7 +58,7 @@ double IntRomb(double x1, double x2, int n, double a, double z, } } - //Speicherplatz befreien und ergebnis return + //Speicherplatz befreien und ergebnis return for (i = 0; i <= mmax; i++) { free(T[i]); } @@ -65,20 +66,39 @@ double IntRomb(double x1, double x2, int n, double a, double z, free(h); return ergebnis; } -double potenzial(double x1, double x2,int n,double a,double z,double (*func) (double, double, double),double eps){ +double potenzial(int n, double a, double z, + double (*func)(double, double, double), double eps) { double V; - double alpha=1; - double Q=1; - V=alpha*(Q/a)*IntRomb(x1,x2,n,a,z,f1,eps); + double alpha = 1/sqrt(M_PI); + double Q = 1; + V = alpha * (Q / a) * InfInt(n, a, z, eps); return V; } -void ableitung(double x1, double x2, double a, double z, int n,double eps, double *dfp){ +double InfInt(int n, double a, double z, double eps) { + double x1 = -1; + double x2 = 1; + double R; + double lastR; + do { + x1 = x1 * 2; + x2 = x2 * 2; + lastR = R; + R = IntRomb(x1, x2, n, a, z, f1, eps); + + } while (abs(lastR - R) > eps); + return R; +} +void efeld(double a, double z, int n, double eps, + double *dfp) { double f[2]; - - f[0]=potenzial(x1,x2,n,a,z+eps,f1, eps); - f[1]=potenzial(x1,x2,n,a,z-eps,f1, eps); - *dfp = -1*(f[0] - f[1]) / (2 * eps); //Differenzenquotient + double h=0.001; + eps = 0.01; + f[0] = potenzial( n, a, z +(eps*z), f1, eps); + f[1] = potenzial(n, a, z - (eps*z), f1, eps); + printf("%lf %lf", f[0], f[1]); + *dfp = -1 + * (f[0] - f[1]) / (2 * eps*z); //Differenzenquotient } int main(void) { @@ -87,17 +107,17 @@ int main(void) { double eps = 1e-8; //genauigkeit epsilon //Eingabe der Variablen double df; - printf("Bitte geben Sie den Abstand der Punktladung von der x-Achse z ein\n "); + printf("Bitte geben Sie den Abstand der Punktladung von der x-Achse z ein\n "); scanf("%lf", &z); printf("Bitte geben Sie n ein\n"); scanf("%d", &n); printf("Bitte geben Sie a ein\n"); scanf("%lf", &a); - double x1 = -5; //Integralgrenzen - double x2 = 5; - printf("Das Integral ist %f\n", IntRomb(x1, x2, n, a, z, f1, eps)); //Ergebnis mit hilfe von IntRomb - printf("Das Potenzial ist %f", potenzial(x1,x2,n,a,z,f1,eps)); - ableitung(x1,x2,a,z,n,eps,&df); - printf("Das E-Feld an der Stelle %lf ist:%f\n", z, df); + + + printf("Unendliches Inegral %lf\n", InfInt(n, a, z, eps)); + printf("Das Potenzial ist %f\n", potenzial(n,a,z,f1,eps)); + efeld(a,z,n,eps,&df); + printf("Das E-Feld an der Stelle %lf ist:%f\n", z, df); }