Berechnen Sie näherungsweise die Funktion cos(x) durch die Reihenentwicklung:

Berechnen Sie das Ergebnis von cos(x) durch Vorgabe von:
- Anzahl der Reihenglieder
- Anzahl der genauen Dezimalstellen
Wie können Sie die aufwändigen Berechnungen von x2i und (2i)! vereinfachen? Versuchen Sie dabei, das Ergebnis aus dem vorherigen Schritt (i-1) hier mit zu benutzen.
Berechnen Sie mit Hilfe der Aufgabe 14 den Wert von cos(π).
Lösung
Berechnung für beliebige Werte
import java.util.Scanner; // Scanner für die Eingabe von Werten
public class Aufgabe15
{
public static void main(String[] args)
{
// Variablen Deklaration
Scanner scnEingabe = new Scanner(System.in);
double dErgebnis, dAbweichung, dEPS, dZahl;
int iDezimalstellen, iSchritte, iModus, iSchritt;
// Variablen Initialisierung
dErgebnis = 1.;
iSchritt = 0;
System.out.print("Berechnung des Cosinus von: ");
dZahl = scnEingabe.nextDouble();
System.out.println("\nMöglichkeiten zur Berechnung von Pi:");
System.out.println("(1) Anzahl der Entwicklungsschritte vorgeben");
System.out.println("(2) genaue Dezimalstellen vorgeben");
System.out.print("\n Bitte wählen: ");
iModus = scnEingabe.nextInt();
if (iModus == 1)
{
System.out.print("\n Entwicklungsschritte: ");
iSchritte = scnEingabe.nextInt();
double dZaehler = 1.;
int iNenner = 2;
for (iSchritt = 1; iSchritt <= iSchritte; ++ iSchritt)
{
dZaehler *= (dZahl * dZahl);
if (iSchritt > 1)
iNenner *= (iSchritt * 2- 1) * (iSchritt * 2);
dErgebnis += Math.pow(-1, iSchritt) * (dZaehler / iNenner);
} // end for
System.out.println("Ergebnis: Cosinus von "+dZahl+" = "
+ dErgebnis+" nach "+iSchritte+" Schritten");
} // end if
else if (iModus == 2)
{
System.out.print("\n genaue Dezimalstellen: ");
iDezimalstellen = scnEingabe.nextInt();
dEPS = 1. / Math.pow(10, iDezimalstellen);
double dZaehler = 1.;
int iNenner = 2;
do
{ // berechnet den Cosinus auf angegebene Dezimalstellen genau
++ iSchritt;
dZaehler *= (dZahl * dZahl);
if (iSchritt > 1)
iNenner *= (iSchritt * 2- 1) * (iSchritt * 2);
double dPrev = dErgebnis;
dErgebnis += Math.pow(-1, iSchritt) * (dZaehler / iNenner);
dAbweichung = dPrev-dErgebnis;
if (dAbweichung < 0)
dAbweichung *= -1.;
System.out.println("Z: "+dZaehler+" N: "+iNenner+" -> "
+ dErgebnis);
} // end do
while (dAbweichung > dEPS);
System.out.println("Ergebnis: Cosinus von "+dZahl+" = "
+ dErgebnis+" nach "+iSchritt+" Schritten");
} // end else if
else
System.out.println("Ungültigen Modus gewählt!.");
} // end main
} // end class
Berechnung von cos(π)
public class Aufgabe15b
{
public static void main(String[] args)
{
// Variablen Deklaration
double dErgebnis, dPi, dZaehler;
int iSchritt, iNenner;
// Variablen Initialisierung
dErgebnis = 1.;
dPi = 1;
dZaehler = 1.;
iSchritt = 0;
iNenner = 2;
System.out.print("Berechnung des Cosinus von pi");
for (iSchritt = 1; iSchritt <= 50000; ++ iSchritt)
dPi += Math.pow(-1, iSchritt)*(1. / (2 * iSchritt+1));
dPi *= 4.;
for (iSchritt = 1; iSchritt <= 6; ++ iSchritt)
{
dZaehler *= (dPi * dPi);
if (iSchritt > 1)
iNenner *= (iSchritt * 2- 1) * (iSchritt * 2);
dErgebnis += Math.pow(-1, iSchritt) * (dZaehler / iNenner);
} // end for
System.out.println("Ergebnis: Cosinus von Pi = "
+ dErgebnis+" nach 5 Schritten");
} // end main
} // end class


