Übungsaufgaben

Aufgabe24

Aufgabe24

by PEter Neuner -
Number of replies: 8
Hallo,

Aufgabe 24 finde ich etwas schwierig und zwar vom Verständnis der Formel her. Ich habe jetzt einzelne Methoden angefertigt für die Fakultät und die Formel, das Problem ist jetzt aber die Berechnung des n bzw. der Teil mit dem <epsilon.

Das n nähert sich ja nur an eine Zahl an, oder ? ich weiß nicht wie ich den Teil in einem Programmcode ausdrücken soll? mit einer For-Schleife und dann runterzählen lassen? das funktioniert aber irgendwie nicht


In reply to PEter Neuner

Re: Aufgabe24

by Dominik Köppl -
Du brauchst in deiner Schleife jeweils die Daten von a_n und a_(n-1), wobei a_n der Sinus bis zum n.ten Summanden ist.
Die Schleife führst du solange durch, bis
| a_n - a_(n-1) | < ε gilt.
n ist dabei wie bei einer for-Schleife die Zählvariable, die man natürlich hochzählt. Man hat aber hier keine Abbruchbedingung für n (wie man sie bei einer typischen for-Schleife hat). D.h. du kannst aus didaktischen Gründen auch eine while-Schleife verwenden.
In reply to PEter Neuner

Re: Aufgabe24

by Bernhard Hopfenmüller -
Hey, ich hab auch ein Problem mit der Aufgabe.
Ich habs zwar geschafft die Abbruchbedingung einzubauen, allerdings bekomme ich immer einen
"java.lang.StackOverflowError" in der fac- Funktion.
Kann mir jemand sagen, wo der Fehler liegt?
In reply to Bernhard Hopfenmüller

Re: Aufgabe24

by PEter Neuner -
wie sieht denn deine fac funktion aus ? meine sieht so aus und wird auch nicht als fehler angezeigt

public static int fac(int n){
int ergebnis=1;
for (int i = 1; i <= n; i++) {
ergebnis=ergebnis*i;
}
return ergebnis;
}
In reply to PEter Neuner

Re: Aufgabe24

by Bernhard Hopfenmüller -
meine sah so aus:


public static int fac(int n) {

if(n==0)
return 1;
else
return n*fac(n-1);

}


mit deiner krieg ich zwar keinen Fehler, aber er rechnet ewig und spuckt nix aus.
Liegt der Fehler vlt iwo anders im Code?
Den hab ich übrigens an meinen ersten Post angehängt.
In reply to Bernhard Hopfenmüller

Re: Aufgabe24

by PEter Neuner -
wieso gibt er nichts aus? also bei mir funktioniert´s, musst es halt dann in der main Methode aufrufen die Methode sowas wie
p
ublic static void main (String []args){
System.out.println(fac(5));

}


In reply to PEter Neuner

Re: Aufgabe24

by Bernhard Hopfenmüller -
Ja ;)
sowas mach ich ja auch in meiner Aufgabe!
Deswegen denk ich ja das das Problem iwo anders in meinem Code liegt.
Aber ich find da keinen Fehler..... :(
In reply to PEter Neuner

Re: Aufgabe24

by Bernhard Hopfenmüller -
Also hier nochmal der Code, explizit gepostet

public class reihe {


public static void main(String[] args){

System.out.println("Sinus(s) oder Cosinus(c)?");

char wahl = Input.in.readCharacter();

System.out.println("Geben sie x ein!");

double x = Input.in.readDouble();

double epsilon = 0.01;

switch (wahl)

{

case 's': System.out.println("Die Abschätzung für sin("+x+") ist" + sinus(x,epsilon));break;

case 'c': System.out.println("Die Abschätzung für cos("+x+") ist" + cosinus(x,epsilon));break;

default: System.out.println("Ungültige Eingabe!");break;

}

}

 

public static double sinus(double x, double epsilon){

 

int k = 0;

boolean check = false;

double summe = 0;

double letztesumme =0;

while(check == false)

{ summe += Math.pow(k,-1)*Math.pow(x, (2*k)+1)/fac((2*k)+1);

if(Math.abs(summe-letztesumme)<epsilon){ check= true;}

// System.out.println(summe);

letztesumme = summe;

k++;

}

 

return summe;

}


public static double cosinus(double x,double epsilon){

 

return epsilon;

}




public static int fac(int n) {

 

if(n==0)

return 1;

else

return n*fac(n-1);

 

}



}

In reply to Bernhard Hopfenmüller

Re: Aufgabe24

by Dominik Köppl -
Ich frage mich, woher das Math.pow(k,-1) kommt.
Wolltest du Math.pow(-1, k) schreiben?

Deine Exception wird aufgerufen, weil deine Sinus/Cosinus-Reihe nicht konvergiert, s.d. deine Fakultätsfunktion immer größere Zahlen übergeben bekam. Normalerweise bricht die Reihe schon bei k = 20 ab.
Da du aber Fehler in deiner Reihe hast, wird sie divergieren.