Hallo,
kann mir jemand bei folgendem Problem weiterhelfen:
Ich soll mit folgender Formel die Sinusnäherungswerte ausrechnen und später in einer Tabelle darstellen:
sin x ist ungefähr x- (x^3/3!) + (x^5/5!) + (x^7/7!) - (x^9/9!) +- ...(x^n/n!)
Der Sinusnäherungswert ist, wie der Name fast sagt, ein Wert der nahe dem Sinuswertes des Winkels liegt.
Hier ist mein bisheriger Sourcecode:
Die Methode summassin() sollte den Sinusnäherungswert ausrechnen. Ausserdem habe ich noch Methoden für die Rechnungen x^n (Name: powx(...)) sowie für die Fakultät n! (Name: fakultaet(...)) geschrieben.
Diese funktionieren auch soweit noch.
Jedoch weiß ich nicht genau, welche Variable man der Methode
in der Methode werteBerechnenUndAusgabe(), welche unter anderem die für die Darstellung der Werte und für die Formatierung der Werte zuständig ist. Dort wird die Methode summasin(double xy, double summanden) aufgerufen. Ich weiss nur, das 2.Parameter der Methode die Anzahl der Summanden für die Näherung sind (bei der Formel der Buchstabe n).
Hat jemand von eine Idee, wie ich die Sinusnäherungswerte ausrechne, ob die geschriebenen Methoden in die richtige Richtung gehen bzw. mit welchen Parametern ich in der Methode werteBerechnenUndAusgabe() aufrufe, damit errechneten Werte so in etwa dargestellt werden:
Über eine schnelle Antwort bzw. über einen Lösungsvorschlag würde ich mich sehr freuen.
gruß
heuberger
kann mir jemand bei folgendem Problem weiterhelfen:
Ich soll mit folgender Formel die Sinusnäherungswerte ausrechnen und später in einer Tabelle darstellen:
sin x ist ungefähr x- (x^3/3!) + (x^5/5!) + (x^7/7!) - (x^9/9!) +- ...(x^n/n!)
Der Sinusnäherungswert ist, wie der Name fast sagt, ein Wert der nahe dem Sinuswertes des Winkels liegt.
Hier ist mein bisheriger Sourcecode:
//File: SinusValues.java
//Purpose: Implements the application SinusValues
//Datum: 28.05.2006
//Version: 0.1
//Contents:class SinusValues
//
import java.util.*;
import java.io.*;
public class SinusValues
{
private static double xmin;
private static double xmax;
private static double deltax;
private static double schritt;
//method kopf()
public static void kopf()
{
String name = "Reimar Hielscher";
char gruppe = 'A';//Praktikumsgruppe X ? {A,B}
boolean pendler = true;//LITERALKONSTANTE ?{true,false}
byte tag = 22,monat=5;
short jahr = 2006;
System.out.println ();//*Leerzeile
System.out.println ("+-----------------------------------+");
System.out.println ("| Datum: "+tag+"."+monat+"."+jahr+"\t\t |");
System.out.println ("| Mein Name ist " + name+" |");
System.out.println ("| Ich bin Pendler: "+pendler+ "\t\t |");
System.out.println ("+-----------------------------------+");
}//end method kopf()
//method druckeSpaltennamen
public static void druckeSpaltennamen()
{
System.out.println();
System.out.println(" Winkel | Sinuswerte");
System.out.println("---------+--------------");
}// end method druckeSpaltennamen
public static double powx(double xy,double schritt)
{
return Math.pow(xy,schritt);
}
public static double fakultaet(double schritt)
{
if(schritt==0)
return 1;
else
return schritt * fakultaet(schritt-1);
}
/*
public int fakult (int n){
if (n == 0) return 1;
else return n * fakult(n-1);
}
*/
//method summasin()
public static double summasin(double xy, double summanden)
{
double summes=0;
int vorzeichen=1;
double schritt=1; //schritte um die potenzreihen zu erzeugen
for(int i=1;i<=summanden;i++)
{
summes=summes+vorzeichen*(powx(xy,schritt)/fakultaet(schritt));
vorzeichen=vorzeichen*(-1);
schritt+=2;
}
return summes;
}//end method summasin()
public static void werteEingabe() throws IOException
{
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Bitte Anfangswinkel eingeben......: ");
xmin = Double.valueOf(eingabe.readLine()).doubleValue();
System.out.println();
System.out.print("Bitte Endwinkel eingeben..........: ");
xmax = Double.valueOf(eingabe.readLine()).doubleValue();
System.out.println();
System.out.print("Bitte die Schrittweite eingeben...: ");
deltax = Double.valueOf(eingabe.readLine()).doubleValue();
System.out.println();
System.out.print("Anzahl der Summanden der Naeherung: ");
schritt = Double.valueOf(eingabe.readLine()).doubleValue();
System.out.println();
}
public static void werteAusgabe(){}
public static void werteBerechnenUndAusgabe(double xmax,double xmin,double deltax)
{
double xy=2;
double nval=0;
double sinuswert=0;
//double[][] werteTabelle;
double sinusNaeherung=0;
double fehlerRelativ=0;
double j=0;
int runden,runden2;
nval = (int)((xmax-xmin)/deltax)+1;
//werteTabelle = new double [nval][5];
druckeSpaltennamen();
for(int i=0;i<=nval&&j<=xmax;i++,j+=deltax)
{
sinuswert = Math.sin(Math.toRadians(j));
runden = (int)(sinuswert*100000000.+0.5);
sinuswert = (double)runden/100000000.;
sinusNaeherung = summasin(sinuswert,schritt);
/*runden2 = (int)(sinusNaeherung*100000000.+0.5);
sinusNaeherung = (double)runden2/100000000.;*/
//}
System.out.println(" "+j+"\t | "+sinuswert+ "| "+sinusNaeherung);
}
System.out.println("2 hoch "+schritt+ "ist : "+powx(xy,schritt));
System.out.println("Fakultaet von "+schritt+ "ist: "+fakultaet(schritt));
//return nval;
}
//method main()
public static void main(String args[])throws IOException
{
/*double winkel = 90;
double ergebnis1 = 0;
double ergebnis2 = 0;*/
//toDegrees(winkel);
//ergebnis1 = Math.sin(winkel);
//ergebnis2 = Math.sin(Math.toRadians(winkel));
//ceil(ergebnis2);
kopf();
werteEingabe();
werteBerechnenUndAusgabe(xmax,xmin,deltax);
//System.out.println("Sinuswert von "+winkel+" im Bogenmass ist: "+ergebnis1);
//System.out.println("Sinuswert von "+winkel+" im Gradmass ist: "+ergebnis2);
//druckeSpaltennamen();
}//end method main();
}
Die Methode summassin() sollte den Sinusnäherungswert ausrechnen. Ausserdem habe ich noch Methoden für die Rechnungen x^n (Name: powx(...)) sowie für die Fakultät n! (Name: fakultaet(...)) geschrieben.
Diese funktionieren auch soweit noch.
Jedoch weiß ich nicht genau, welche Variable man der Methode
public static double summasin(double xy, double summanden)
{
double summes=0;
int vorzeichen=1;
double schritt=1; //schritte um die potenzreihen zu erzeugen
for(int i=1;i<=summanden;i++)
{
summes=summes+vorzeichen*(powx(xy,schritt)/fakultaet(schritt));
vorzeichen=vorzeichen*(-1);
schritt+=2;
}
return summes;
}//end method summasin()
in der Methode werteBerechnenUndAusgabe(), welche unter anderem die für die Darstellung der Werte und für die Formatierung der Werte zuständig ist. Dort wird die Methode summasin(double xy, double summanden) aufgerufen. Ich weiss nur, das 2.Parameter der Methode die Anzahl der Summanden für die Näherung sind (bei der Formel der Buchstabe n).
Hat jemand von eine Idee, wie ich die Sinusnäherungswerte ausrechne, ob die geschriebenen Methoden in die richtige Richtung gehen bzw. mit welchen Parametern ich in der Methode werteBerechnenUndAusgabe() aufrufe, damit errechneten Werte so in etwa dargestellt werden:
Winkel | SinusWerte | SinusNäherung |
-------+----------------+------------------+
0.0 | 0.0 | 0.0 |
10.0 | 0.17364818 | 0.17364818 |
20.0 | 0.34202015 | 0.34202015 |
30.0 | 0.5 | 0.5 |
40.0 | 0.64278764 | 0.6427875 |
50.0 | 0.76604444 | 0.76604366 |
60.0 | 0.8660254 | 0.8660213 |
70.0 | 0.9396926 | 0.9396761 |
80.0 | 0.9848077 | 0.98475313 |
90.0 | 1.0 | 0.9998431 |
die Testwerte für diese Tabelle sind
xmin:0
xmax:90
deltax:10
Über eine schnelle Antwort bzw. über einen Lösungsvorschlag würde ich mich sehr freuen.
gruß
heuberger