HAllo Ihr lieben,
also ich habe ein Programm programmiert, der mit das Taylorpolynom ausgibt und zu bestimmten x, dass taylorpolynom ausrechnet.
Das habe ich auch hinbekommen...
Dann musste ich ein x eingeben und genau für das wurde es mir berechnet!!!
DAs funktionierte auch alles!
Jetzt wollte ich es noch einfacher schreiben..., das es gleich jedes mal, verschiedene Werte für verschiedene x ausgibt....doch leider kommt jetzt was ganz anderes raus und ich verstehe nicht wieso?!?!
CODE ÄNDERUNGEN!!!
Zeile 140-147 gelöscht!
und zeile 174 -- schleife eingefügt!
in der schleife, will ich alle x von -4 bis 4 ausgeben lassen :
for (int i = -4; i < 5; i++) {
System.out.println("x = "+i+" -->y = " +taylor.berechneTaylorPolynomForX(entwicklugsPunkt, ordnung, i, funktionen));
}
WO genau ist mein Fehler?Wieso kommen nicht die gleichen Werte raus??????;(;(;rtfm:
also ich habe ein Programm programmiert, der mit das Taylorpolynom ausgibt und zu bestimmten x, dass taylorpolynom ausrechnet.
Das habe ich auch hinbekommen...
Java:
package nachhilfe;
import static java.lang.Math.cos;
import static java.lang.Math.exp;
import static java.lang.Math.log;
import static java.lang.Math.pow;
import static java.lang.Math.sin;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Taylorpolynom {
String polynom = "";
static double entwicklugsPunkt, ordnung;
private static int funktion;
private static double[] funktionen;
Fakultaet fak = new Fakultaet();
double ergebnis;
/**
* Funktionen und deren ersten 9 Ableitungen
*/
//@formatter:off
//EXPONENTIAL
public static double[] expAbleitungen(double entwicklugsPunkt) {
double[] expFkt = new double[10];
for (int i = 0; i < expFkt.length; i++) {
expFkt[i] = exp(entwicklugsPunkt);
}
return expFkt;
}
//SINUS
public static double[] sinAbleitungen(double entwicklugsPunkt) {
double[] sinFkt = {sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt)};
return sinFkt;
}
//COSINUS
public static double[] cosAbleitungen(double entwicklugsPunkt) {
double[] cosFkt = {cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt)};
return cosFkt;
}
//LOGARITHMUS
public static double[] lnAbleitungen(double entwicklugsPunkt) {
double[] lnFkt = {log(entwicklugsPunkt),
pow(entwicklugsPunkt, -1),
-pow(entwicklugsPunkt, -2),
2*pow(entwicklugsPunkt, -3),
-6*pow(entwicklugsPunkt, -4),
24*pow(entwicklugsPunkt, -5),
-120*pow(entwicklugsPunkt, -6),
720*pow(entwicklugsPunkt, -7),
-5040*pow(entwicklugsPunkt, -8),
40320*pow(entwicklugsPunkt, -9)};
return lnFkt;
}
// @formatter:on
/**
* Gibt mir den Taylapolynom wieder
*
* @param entwicklungsPunkt
* @param ordnung
* @return taylorpolynom
*/
public String stringTaylorPolynom(double entwicklungsPunkt, double ordnung, double[] funktion) {
for (int i = 0; i <= ordnung; i++) {
int fakultaet = fak.fakultaet(i);
if (!polynom.isEmpty())
polynom = polynom + " + (" + funktion[i] + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
else
polynom = "(" + funktion[i] + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
}
return polynom;
}
/**
* Berechnet uns den Taylorpolynom, mit dem übergebenen x
*
* @param entwicklungsPunkt
* @param ordnung
* @param x
* @return
*/
public double berechneTaylorPolynomForX(double entwicklungsPunkt, double ordnung, double x, double[] funktion) {
double base = x - entwicklungsPunkt;
for (int exponent = 0; exponent <= ordnung; exponent++) {
double fakultaet = fak.fakultaet(exponent);
ergebnis += (funktion[exponent] / fakultaet) * (Math.pow(base, exponent));
}
return ergebnis;
}
/**
* Fragt den Anwender in welchen Punkt er entwickeln will und bis zu welcher
* Ordnung.Und gibt dazu den passenen Taylorpolynom zurück und rechnet ihn
* für ein überggebenes x aus.
*
* @param args
*/
public static void main(String args[]) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("In welchem Punkt(ganzzahlige Zahl) soll der Taylorpolynom entwickelt werden??");
try {
entwicklugsPunkt = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("EXCEPTION! Der entwicklungsPunkt ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
}
System.out.println("Und bitte geben Sie die Ordnung(ganzzahlige Zahl) an, nach der entwickelt werden soll??");
try {
ordnung = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("EXCEPTION! Die Ordnung ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
}
System.out.println("Und geben Sie ein Wert für x ein [f(x)]:");
try {
x = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("EXCEPTION! Die Ordnung ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
}
System.out.println("Von welcher Funktion wollen Sie das Taylorpolynom: ");
System.out.println("1.Exponentialfunktion exp(x)");
System.out.println("2.Sinusfunktion sin(x)");
System.out.println("3.Cosinusfunktion cos(x)");
System.out.println("4.Logarithmusfunktion ln(x)");
try {
funktion = Integer.parseInt(reader.readLine());
switch (funktion) {
case 1: funktionen =expAbleitungen(entwicklugsPunkt);
break;
case 2: funktionen = sinAbleitungen(entwicklugsPunkt);
break;
case 3: funktionen = cosAbleitungen(entwicklugsPunkt);
break;
case 4: funktionen = lnAbleitungen(entwicklugsPunkt);
break;
}
}
catch (Exception e) {
System.out.println("EXCEPTION! Die Zahl liegt nicht zwischen 1 und 4 oder ist keien ganzzahlige Zahl" + e.getMessage());
}
Taylorpolynom taylor = new Taylorpolynom();
System.out.println("Taylorpolynom: ");
System.out.println(taylor.stringTaylorPolynom(entwicklugsPunkt, ordnung, funktionen));
System.out.println("Und das Ergebnis dazu: ");
System.out.println("taylor.berechneTaylorPolynomForX(entwicklugsPunkt, ordnung, x, funktionen));
}
}
Dann musste ich ein x eingeben und genau für das wurde es mir berechnet!!!
DAs funktionierte auch alles!
Jetzt wollte ich es noch einfacher schreiben..., das es gleich jedes mal, verschiedene Werte für verschiedene x ausgibt....doch leider kommt jetzt was ganz anderes raus und ich verstehe nicht wieso?!?!
Java:
package nachhilfe;
import static java.lang.Math.cos;
import static java.lang.Math.exp;
import static java.lang.Math.log;
import static java.lang.Math.pow;
import static java.lang.Math.sin;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Taylorpolynom {
String polynom = "";
static double entwicklugsPunkt, ordnung;
private static int funktion;
private static double[] funktionen;
Fakultaet fak = new Fakultaet();
double ergebnis;
/**
* Funktionen und deren ersten 9 Ableitungen
*/
//@formatter:off
//EXPONENTIAL
public static double[] expAbleitungen(double entwicklugsPunkt) {
double[] expFkt = new double[10];
for (int i = 0; i < expFkt.length; i++) {
expFkt[i] = exp(entwicklugsPunkt);
}
return expFkt;
}
//SINUS
public static double[] sinAbleitungen(double entwicklugsPunkt) {
double[] sinFkt = {sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt)};
return sinFkt;
}
//COSINUS
public static double[] cosAbleitungen(double entwicklugsPunkt) {
double[] cosFkt = {cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt),
-cos(entwicklugsPunkt),
sin(entwicklugsPunkt),
cos(entwicklugsPunkt),
-sin(entwicklugsPunkt)};
return cosFkt;
}
//LOGARITHMUS
public static double[] lnAbleitungen(double entwicklugsPunkt) {
double[] lnFkt = {log(entwicklugsPunkt),
pow(entwicklugsPunkt, -1),
-pow(entwicklugsPunkt, -2),
2*pow(entwicklugsPunkt, -3),
-6*pow(entwicklugsPunkt, -4),
24*pow(entwicklugsPunkt, -5),
-120*pow(entwicklugsPunkt, -6),
720*pow(entwicklugsPunkt, -7),
-5040*pow(entwicklugsPunkt, -8),
40320*pow(entwicklugsPunkt, -9)};
return lnFkt;
}
// @formatter:on
/**
* Gibt mir den Taylapolynom wieder
*
* @param entwicklungsPunkt
* @param ordnung
* @return taylorpolynom
*/
public String stringTaylorPolynom(double entwicklungsPunkt, double ordnung, double[] funktion) {
for (int i = 0; i <= ordnung; i++) {
int fakultaet = fak.fakultaet(i);
if (!polynom.isEmpty())
polynom = polynom + " + (" + funktion[i] + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
else
polynom = "(" + funktion[i] + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
}
return polynom;
}
/**
* Berechnet uns den Taylorpolynom, mit dem übergebenen x
*
* @param entwicklungsPunkt
* @param ordnung
* @param x
* @return
*/
public double berechneTaylorPolynomForX(double entwicklungsPunkt, double ordnung, double x, double[] funktion) {
double base = x - entwicklungsPunkt;
for (int exponent = 0; exponent <= ordnung; exponent++) {
double fakultaet = fak.fakultaet(exponent);
ergebnis += (funktion[exponent] / fakultaet) * (Math.pow(base, exponent));
}
return ergebnis;
}
/**
* Fragt den Anwender in welchen Punkt er entwickeln will und bis zu welcher
* Ordnung.Und gibt dazu den passenen Taylorpolynom zurück und rechnet ihn
* für ein überggebenes x aus.
*
* @param args
*/
public static void main(String args[]) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("In welchem Punkt(ganzzahlige Zahl) soll der Taylorpolynom entwickelt werden??");
try {
entwicklugsPunkt = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("EXCEPTION! Der entwicklungsPunkt ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
}
System.out.println("Und bitte geben Sie die Ordnung(ganzzahlige Zahl) an, nach der entwickelt werden soll??");
try {
ordnung = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("EXCEPTION! Die Ordnung ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
}
// System.out.println("Und geben Sie ein Wert für x ein [f(x)]:");
// try {
// x = Integer.parseInt(reader.readLine());
// }
//
// catch (Exception e) {
// System.out.println("EXCEPTION! Die Ordnung ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
// }
System.out.println("Von welcher Funktion wollen Sie das Taylorpolynom: ");
System.out.println("1.Exponentialfunktion exp(x)");
System.out.println("2.Sinusfunktion sin(x)");
System.out.println("3.Cosinusfunktion cos(x)");
System.out.println("4.Logarithmusfunktion ln(x)");
try {
funktion = Integer.parseInt(reader.readLine());
switch (funktion) {
case 1: funktionen =expAbleitungen(entwicklugsPunkt);
break;
case 2: funktionen = sinAbleitungen(entwicklugsPunkt);
break;
case 3: funktionen = cosAbleitungen(entwicklugsPunkt);
break;
case 4: funktionen = lnAbleitungen(entwicklugsPunkt);
break;
}
}
catch (Exception e) {
System.out.println("EXCEPTION! Die Zahl liegt nicht zwischen 1 und 4 oder ist keien ganzzahlige Zahl" + e.getMessage());
}
Taylorpolynom taylor = new Taylorpolynom();
System.out.println("Taylorpolynom: ");
System.out.println(taylor.stringTaylorPolynom(entwicklugsPunkt, ordnung, funktionen));
System.out.println("Und das Ergebnis dazu: ");
for (int i = -4; i < 5; i++) {
System.out.println("x = "+i+" -->y = " +taylor.berechneTaylorPolynomForX(entwicklugsPunkt, ordnung, i, funktionen));
}
}
}
Zeile 140-147 gelöscht!
und zeile 174 -- schleife eingefügt!
in der schleife, will ich alle x von -4 bis 4 ausgeben lassen :
for (int i = -4; i < 5; i++) {
System.out.println("x = "+i+" -->y = " +taylor.berechneTaylorPolynomForX(entwicklugsPunkt, ordnung, i, funktionen));
}
WO genau ist mein Fehler?Wieso kommen nicht die gleichen Werte raus??????;(;(;rtfm:
Zuletzt bearbeitet: