diff --git a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c index 99751fe..c2c9a1b 100644 --- a/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c +++ b/Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c @@ -26,7 +26,7 @@ double trapez(int n, double a, double z, double (*func)(double, double, double), } double IntRomb(double x1, double x2, int n, double a, double z, - double (*func)(double, double, double), int eps) { + double (*func)(double, double, double), double eps) { int i, k; //Variablen für Schleifen double ergebnis; //zum speichern des Ergebnis double **T; //Trapezsummen (später als 2-dim Array) @@ -53,7 +53,7 @@ double IntRomb(double x1, double x2, int n, double a, double z, + (h[i] * h[i] / (h[i] * h[i] - h[i - k] * h[i - k]) * T[i - 1][k - 1]); } - if (abs(T[i][i] - T[i - 1][i - 1]) <= eps) { //Abschätzen ob das Ergebnis genau genug ist wenn ja aus Schleife raus + if (T[i-1][i-1] / T[i][i] > (1 - eps) || T[i-1][i-1] / T[i][i] < (1 + eps)) { //Abschätzen ob das Ergebnis genau genug ist wenn ja aus Schleife raus ergebnis = T[i][i]; break; @@ -127,12 +127,12 @@ double ges_efeld(int n, double a1, double a2, double z, double Q1, double Q2, double d, double *df1, double *df2, double (*func)(double, double, double), double eps) { //verwendet numerisch berechnetes E-Feld efeld(a1, z, n, Q1, eps, df1, func); //Berechnung E-Feld des 1. Drahtes - efeld(a2, d - z, n, Q2, eps, df2, func); //Berechnung E-Feld des 2. Drahtes + efeld(a2, z-d, n, Q2, eps, df2, func); //Berechnung E-Feld des 2. Drahtes double E_ges = *df1 + *df2; //Superposition der E-Felder der einzelnen Drähte return E_ges; } -double secant_pauline(int n, double a1, double a2, double Q1, double Q2, +double secant_pauline(int n,double a1, double a2, double Q1, double Q2, double d, double *df1, double *df2, double (*func)(double, double, double), double eps) { @@ -162,7 +162,7 @@ double secant_pauline(int n, double a1, double a2, double Q1, double Q2, int main(void) { double z, a1, a2; - int n = 30; + int n = 10; const double eps = 1e-8; //genauigkeit epsilon const double eps2 = 1e-4; double d = 12; //Abstand 2.Draht zum 1. @@ -199,6 +199,6 @@ int main(void) { printf("Nullstelle %f\n", secant_pauline(n, a1, a2, Q1, Q2, d, &df1, &df2, f1, eps2)); - z = 0.1; + }