Browse Source

fehler behoben

master
maasp 5 years ago
parent
commit
de54b8365c
1 changed files with 13 additions and 11 deletions
  1. 24
      Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c

24
Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c

@ -2,21 +2,21 @@
#include <stdlib.h>
#include<math.h>
int mmax = 10; //globale Variable, Maximale Anzahl der Schritte
int mmax = 30; //globale Variable, Maximale Anzahl der Schritte
double InfInt(int n, double a, double z,double eps,double (*func)(double, double, double));
double f1(double x, double a, double z) { // Zu integrierende Funktion
return (exp(-(x * x) / (a * a)) / sqrt(x * x + z * z));
}
double f2(double x, double a, double z){
return((exp(-(x*x)/(a*a))*z)/pow((x*x)+(z*z),3/2));
return((exp(-(x*x)/(a*a))*z)/pow((x*x)+(z*z),1.5));
}
double trapez(int n, double a, double z, double (*func)(double, double, double),
double x1, double x2) { //Trapeze
double sum;
double h = (x2 - x1) / (n - 1);
double h = (x2 - x1) / (n);
//Trapezsumme für Grenzen berechnen
sum = (0.5 * func(x1, a, z)) + (0.5 * func(x2, a, z)); //in der Summe Funtion aufrufen um Werte an Grenzen x1 und x2 zu bekommen
for (int i = 1; i < n - 1; i++) {
for (int i = 1; i < n; i++) {
sum += func(x1 + (h * i), a, z);
}
return sum * h;
@ -37,7 +37,7 @@ double IntRomb(double x1, double x2, int n, double a, double z,
}
h[0] = (x2 - x1) / (n - 1); //Erste Schrittweite berechnen
h[0] = (x2 - x1) / (n); //Erste Schrittweite berechnen
T[0][0] = trapez(n, a, z, func, x1, x2); //erstes Trapez berechnen
@ -54,6 +54,7 @@ double IntRomb(double x1, double x2, int n, double a, double z,
* T[i - 1][k - 1]);
}
//printf("%d",i);
if (abs(T[i][i] - T[i - 1][i - 1]) <= eps) { //Abschätzen ob das Ergebnis genau genug ist wenn ja aus Schleife raus
ergebnis = T[i][i];
@ -61,7 +62,10 @@ double IntRomb(double x1, double x2, int n, double a, double z,
}
}
//Speicherplatz befreien und ergebnis return
if (i==mmax){
printf("Fehler, Integral ist ungenau"); // Fehler falls Abbruchbedingung der vorherigen Schleife nicht greift
}
//Speicherplatz befreien
for (i = 0; i <= mmax; i++) { //Speicherplatz in Schleife freigeben
free(T[i]);
}
@ -116,15 +120,13 @@ void efeld(double a, double z, int n, double eps,
}
int main(void) {
double z, a;
int n;
int n=30;
double eps = 1e-8; //genauigkeit epsilon
double df; //Variable zum speichern des Differenzenquotienten
//Eingabe der Variablen:
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);
@ -137,7 +139,7 @@ int main(void) {
printf("Das E-Feld an der Stelle %3.2lf ist:%f\n", z, df);
//H2.2 Berechnung des Efeldes mit Hilfe analytischer Ableitung
printf("Das E-Feld an der Stelle %3.2lf ist:%f\n", z, potenzial(n,a,z,f2,eps));
double diff=abs(df-potenzial(n,a,z,f2,eps));
printf("Differenz %f", diff);
double diff=fabs(df - potenzial(n,a,z,f2,eps));
printf("Differenz %1.10f", diff);
}
Loading…
Cancel
Save