Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Cosinussatz mit Summenformel (Reihe) HILFE

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2012, 17:37 Uhr
ao

(Operator)



Zitat von Serkan:


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

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.05.2012, 17:39 Uhr
ao

(Operator)



C++:
    for (unsigned int j=1;j<=k;j++)
        Fakultaet=Fakultaet*(k+n)*(2*k);



Prüf das noch mal. Ich glaube, die Schleife über j gehört da nicht hin, und die Multiplikation mit (k+n) * 2k ist auch falsch.

Wenn du sicher bist, dass es stimmt, dann begründe es.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: