Browse Source

H1 (ganz fast fertig)

master
maasp 5 years ago
parent
commit
3d836c0273
1 changed files with 13 additions and 13 deletions
  1. 26
      Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c

26
Hausaufgaben/ComputerphysikAbgabe/src/ComputerphysikAbgabe.c

@ -2,7 +2,7 @@
#include <stdlib.h>
#include<math.h>
int mmax = 10; //globale Variable, Maximale Anzahl der Schritte
int mmax = 10; //globale Variable, Maximale Anzahl der Schritte
double f1(double x, double a, double z) { // Zu integrierende Funktion
return (exp(-(x * x) / (a * a)) / sqrt(x * x + z * z));
}
@ -33,16 +33,16 @@ double IntRomb(double x1, double x2, int n, double a, double z,
}
h[0] = (x2 - x1) / (n - 1); //Nullter
h[0] = (x2 - x1) / (n - 1); //Erste Schrittweite berechnen
T[0][0] = trapez(n, a, z, f1, x1, x2);
T[0][0] = trapez(n, a, z, f1, x1, x2); //erstes Trapez berechnen
for (i = 1; i <= mmax; i++) {
n = n * 2;
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[i] = h[i - 1] / 2.0; //h berechnen für i>1 indem man durch 2 teilt
for (k = 1; k <= i; k++) {
for (k = 1; k <= i; k++) { //mit Formel aus VL T für k>1 berechnen
T[i][k] = (-h[i - k] * h[i - k]
/ ((h[i] * h[i]) - (h[i - k] * h[i - k])) * T[i][k - 1])
@ -50,14 +50,14 @@ double IntRomb(double x1, double x2, int n, double a, double z,
* T[i - 1][k - 1]);
}
if (abs(T[i][i] - T[i - 1][i - 1]) <= eps) {
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];
break;
}
}
//Speicherplatz befreien und ergebnis return
for (i = 0; i <= mmax; i++) {
free(T[i]);
}
@ -69,17 +69,17 @@ double IntRomb(double x1, double x2, int n, double a, double z,
int main(void) {
double z, a;
int n;
int eps = 1e-8;
printf(
"Bitte geben Sie den Abstand der Punktladung von der x-Achse z ein \n");
int eps = 1e-8; //genauigkeit epsilon
//Eingabe der Variablen
printf("Bitte geben Sie den Abstand der Punktladung von der x-Achse z ein \n");
scanf("%lf \n", &z);
printf("Bitte geben Sie n ein \n");
scanf("%d\n", &n);
printf("Bitte geben Sie a ein\n");
scanf("%lf\n ", &a);
double x1 = -5;
double x1 = -5; //Integralgrenzen
double x2 = 5;
printf("Ende %f\n", IntRomb(x1, x2, 20, a, z, f1, eps));
printf("Ende %f\n", IntRomb(x1, x2, 20, a, z, f1, eps)); //Ergebnis mit hilfe von IntRomb
}
Loading…
Cancel
Save