Java Euler Verfahren mit Java

fanatiXalpha

Fleet Admiral
Registriert
Aug. 2011
Beiträge
13.973
Hallo liebes Forum,

ich hab hier ein kleines Problem

folgende aufgabe (an sich eigentlich nicht schwer):
Gegeben Sei die DGL

y'(x) = cos(e^(sin(x)*y(x))

und der Anfangswert y(0) = 2. Schreiben Sie ein Programm, das mit dem
Euler Verfahren mit Schrittweite x = 10-3 einen Näherungswert für
y(20) berechnet. Die Programmiersprache ist hierbei egal.

wir hatten bisher nur java (ecplise), also mach ich es da

wie das euler verfahren funktioniert (für die, die es nicht kennen):
-> http://mitarbeiter.hs-heilbronn.de/~vstahl/mathe2/skript.pdf
seite 14 und 15

ich bin mir aber relativ sicher, dass der mathematische teil stimmt
und ich denk, es hakt bei mir in java

der code sieht folgendermaßen aus:
Code:
                double x;
		double y;
		double ystrich;
		double deltax;
		
		x=0;
		y=2;
		ystrich=0;
		deltax= Math.pow(10, -3);
		
		for (x=0; x<=20; x= x+deltax )
		{
			ystrich = Math.acos(Math.exp(Math.asin(x)*y));
			
			y= y + ystrich*deltax;
			
			System.out.println(y);
			
		}

wo hab ich da nen fehler gemacht?
den nach der 2 als lösung für x=0 kommt bei mir nurnoch NaN -.-
wenn es geht, hätte ich gerne nur hinweise, damit ich vielleicht selbst drauf komme
die genaue lösung, ohne das ich genau drüber nachdenken muss, könnt ihr gerne auch als spoiler verpacken


vielen dank schonmal im vorraus :)
 
So ganz einleuchtend find ich den mathematischen Teil nicht.
Warum werden cosinus und sinus als Umkehrfunktionen verwendet und die e-Funktion als normale?

Wenn ich cos und sin stattdessen nehm bekomm ich konkrete Werte... ohne zu wissen, ob sie richtig sind...
 
Zuletzt bearbeitet:
Ahhm, ich denke da ist die Mathe nicht ganz stimmig:

Kannst du wirklich sicherstellen, dass du bei acos nur aus [-1,1] was reintust, weil bei e^x reicht ja schon etwas >0, dass die Bedingung nicht mehr stimmt.

Sonst kannst du ja mal den Debugger nehmen und schrittweise gucken, woher die NaN kommt.
 
@moko: Und was soll das bringen? oO

@Hancock: Die Frage ist ja eher: Woher kommt der arcus cosinus her? oO
 
Zuletzt bearbeitet:
Ich tippe auf falsche Ableitung, bin aber grade zu faul zu checken.

Der Euler-Vorwärts sieht an sich korrekt aus.
 
Was soll acos denn sonst sein? Warum sollte die cosinus-Funktion denn acos heißen?

Und es gibt sogar Tooltips zu den Methoden in Eclipse, die sagen, was die Methode macht...
 
verdammt
da hab ich gepennt
vielen dank -.-

aber ein kommilitone, dem ich geschickt hatte, hat das wohl auch übersehen

vielen dank :)

sehr gutes forum, auch wenn das problem eher ein mathematisches war
auf dem papier hatte ich natürlich schon sin und cos^^

@1688mib: ich weiß -.-
das hätte ich auch tun sollen
aber irgendwie wollte mein kopf nicht^^
 
Zuletzt bearbeitet:
Der Code sollte im großen und ganzen schon richtig sein. Wie meine Vorredner bereits sagte, hast du aus Versehen wohl die Arcussinus- und Arcuscosinus-Funktion benutzt. Da diese Funktionen jeweils nur einen Definitionsbereich von [-1,1] haben, kommt es hier zu Berechnungsfehlern. Mit Math.sin() und Math.cos() anstatt der Arcus-Funktionen sollte der Java-Code problemlos funktionieren.

Edit: Da waren wohl einige Leute schneller als ich.
 
so sieht er nun aus:

Code:
                double x;
		double y;
		double ystrich;
		double deltax;
		
		x=0;
		y=2;
		ystrich=0;
		deltax= Math.pow(10, -3);
		
		for (x=0; x<=20; x= x+deltax )
		{
			ystrich = Math.cos(Math.exp(Math.sin(x)*y));
			
			y= y + ystrich*deltax;
			
			System.out.println(y);
			
			
		}

problem war wirklich sin und cos -.-
vielen dank nochmal :)
 
Zurück
Oben