000
11.05.2012, 16:21 Uhr
Serkan
|
Hallo Leute,
Ich hab folgendes Problem und bräuchte mal dringen HILFE von nem Pro.
Code: |
cos(x)=∑_(k=0)^∞*(-1)^k*(( x^2k)/((2k)!))
= 1-(x^2/2!)+(x^4/4!)-(x^6/6!)+...-...
|
Implementieren Sie diese Funktion double cosinus(double x, unsigned int max) zur Berechnung der obigen Summe, wobei maximal max Summanden aufaddiert werden. Vergleichen Sie das von der Funktion berechnete Ergebnis mit dem der Sinusfunktion aus der C Standardbibliothek.
Für den Sinus hab ich schon sowas:
Code: |
sin(x)=∑_(k=0)^∞*(-1)^k*(( x^2k+1)/((2k+1)!)) = x-(x^3/3!)+(x^5/5!)-(x^7/7!)+...-...
Vorgehen: k | 0 1 2 3 //Betrag =1 Vorzeichen (-1)^k | 1 -1 1 -1 //Betrag =*(-1) Potenz x^2k+1 | x^1 x^3 x^5 x^7 //Betrag =x^2 Fakultät (2k+1)! | 1! 3! 5! 7! //Betrag =*(2*k)*(2*k+1)
|
-------------------------------------------------------------------------------------------
C++: |
#include <iostream> #include <iomanip> #include <cmath> using namespace std;
double sinus(double x, unsigned int max) {
unsigned int k=0; double vorzeichen = 1; double potenz = x; double fakultaet = 1; double summand = 0; double summe = x;
while (k < max) { k++; vorzeichen =-vorzeichen; potenz = potenz*x*x; fakultaet = fakultaet*(2*k)*(2*k+1); summand = vorzeichen*potenz / fakultaet; summe = summe + summand; } return summe; }
void sinusmain() { double x=3.0; cout << "sinus(" << x << ") = " << setprecision(10) << sinus(x, 10) << " Kontrolle: " << sin(x) << endl; } int main() { sinusmain(); return 0; }
|
Dann bekomm ich das heraus: sinus(3) = 0.1411200081 Kontrolle: 0.1411200081 -------------------------------------------------------------------------------------------------
Code: |
cos(x)=∑_(k=0)^∞*(-1)^k*(( x^2k)/((2k)!))
= 1-(x^2/2!)+(x^4/4!)-(x^6/6!)+...-...
Vorgehen: k | 0 1 2 3 //Betrag =1 Vorzeichen (-1)^k | 1 -1 1 -1 //Betrag =*(-1) Potenz x^2k+1 | x^0 x^2 x^4 x^6 //Betrag =x^2 Fakultät (2k+1)! | 0! 2! 4! 6! //Betrag =*(1) *(k+0)*(2*k) *(k+1)*(2*k) *(k+2)*(2*k)
|
Beim Cosinus ist da das Problem das meine Fakultät folgene Reihe macht *1 [1] *1*2 [2] *3*4 [24] *5*6 [720] ... also hab ich mir eine Ausnahme überlegt für k=0 aber es haut nicht so ganz hin!?
C++: |
#include <iostream> #include <cmath> #include <iomanip>
using namespace std;
double cosinus(double x, unsigned int max) { unsigned int k=0; unsigned int n=0; double Vorzeichen=1; double Potenz=1; double Fakultaet=1; double Summand=0; double Summe=1;
while (k<max) { k++; n++; Vorzeichen=-Vorzeichen; Potenz=Potenz*x*x;
//if (k<1) {Fakultaet =1;} //else { Fakultaet=Fakultaet*(k+n)*(2*k);} // hat au nicht geklappt
for (unsigned int i=0;i<1;i++) Fakultaet =1; for (unsigned int j=1;j<=k;j++) Fakultaet=Fakultaet*(k+n)*(2*k); Summand=Vorzeichen*Potenz/Fakultaet; Summe=Summe+Summand; } return Summe; }
void cosinusmain() { double x=3.0; cout << "cosinus("<<x<<") = " << setprecision(10) << cosinus (x,20) << " Kontrolle: " << cos(x) << endl; }
int main() { cosinusmain(); return 0; }
|
--------------------------------------------------------------- cosinus(3) = -0.9488335296 Kontrolle: -0.9899924966
_____ Edit: code und cpp-Tags eingefügt; Text in den code-Tags neu formatiert Dieser Post wurde am 12.05.2012 um 05:12 Uhr von Hans editiert. |