000
12.01.2012, 18:09 Uhr
~beamham92
Gast
|
Ich möchte ein Programm schreiben, das mithilfe einer Folge den Cotangens Hyperbolicus berechnet. Habe das Programm soweit fertig bekomme aber verrückte Werte als Ergebnis:
"Bitte geben sie einen Wert fuer x ein: 1
Bitte geben sie einen Wert fuer Epsilon ein: 0.0000001
f(x)=coth(x)= 3.95673e+306 Vergleichswert= 1.31304 Process returned 0 (0x0) execution time : 7.086 s Press any key to continue.
C++: |
#include <iostream> #include <cmath> using namespace std;
// Das Programm berechnet den Kotangens Hyperbolicus einer Zahl x, für 0<|x|<pi; // Zur Berechnung wird die Summenformel in der Form (((-1)^(n+1)*2^(2*n))/((2*n)!))*B[n]*x^(2*n-1) benutzt; // Die Berechnung wird solagne durchgeführt bis der Betrag der Differenz zweier; // aufeinanderfolger Glieder kleiner als ein zudefinierender Abruchwert epsilon ist; // oder n den Wert 12 erreicht hat;
// Funktion zur Potenzberechnung
float potenz (float basis, float expo) { if (expo==0){ return 1; }
float pot=basis;
for(int i=1; i<expo; i++){ pot=pot*basis; }
return pot;
}
// Funktion zur Fakultätsberechnung
int fakultaet (int f) { if (f==0) { return 1; }
int fak = 1;
for (int i=1;i<=f;i++) { fak = i*fak; } return fak; }
int main() { // Variabeldeklination
double pote1, pote2, pote3, exp1, exp2, exp3, x, B[12], pi, epsilon, ergebnis, zaehler, nenner, z1, z2; int faku, n;
pi = 3.14159265; B[1] = 1.0/6; B[2] = 1.0/30; B[3] = 1.0/42; B[4] = 1.0/30; B[5] = 5.0/66; B[6] = 691.0/2730; B[7] = 7.0/6; B[8] = 3617.0/510; B[9] = 43867.0/798; B[10] = 174611.0/330; B[11] = 854513.0/138; B[12] = 236364091/2730; ergebnis = 1/x; z1 = 0; n = 1; zaehler = 0; nenner = 1;
//Abfrage von x
cout << "Bitte geben sie einen Wert fuer x ein: "; cin >> x; cout << '\n';
if (fabs(x)<=0 || fabs(x)>=pi) { cout << "Ihr Wert liegt nicht im Definitionsbereich!" << '\n'; cout << "Bitte geben sie einen neuen Wert fuer x ein: "; cin >> x; cout << '\n'; }
// Abfrage von Epsilon // Je kleiner Epsilon gewählt wird, desto genauer ist das Ergebnis
cout << "Bitte geben sie einen Wert fuer Epsilon ein: "; cin >> epsilon; cout << '\n';
if (epsilon<=0) { cout << "Ihr Wert liegt nicht im Definitionsbereich!" << '\n'; cout << "Bitte geben sie einen neuen Wert fuer Epsilon ein: "; cin >> epsilon; cout << '\n'; }
do {
//Berechnung des Zaehlers exp1 = n+1; exp2 = 2*n; exp3 = 2*n-1; pote1 = potenz(-1,exp1); pote2 = potenz(2,exp2); pote3 = potenz(x,exp3); zaehler = pote1 * pote2 * pote3 * B[n];
//Berechnung des Nenners faku = 2*n; nenner = fakultaet(faku);
//Summandenberechnung
z2 = z1; z1 = zaehler/nenner;
//Berechnung des Ergebnisses
ergebnis = ergebnis + z1;
//Zählvariable n erhöhen
n++; }
// Prüfung des Abbruchwertes while (fabs(fabs(z2)-fabs(z1)) > epsilon && n<12) ;
//Ausgabe des Ergbenisses
cout << "f(x)=coth(x)= " << ergebnis << '\n';
//Ausgabe des Vergleichswertes aus Mathebibliothek mit coth(x)=cosh(x)/sinh(x)
double coth = cosh(x)/sinh(x); cout << "Vergleichswert= " << coth ;
}
|
Könnt ihr mir vielleicht weiterhelfen, ich finde den Fehler nicht.
Freundliche Grüße Dieser Post wurde am 13.01.2012 um 11:51 Uhr von FloSoft editiert. |