# Taylorpolynom berechnen



## tanzverfuehrung (14. Mrz 2012)

Hallo ihr lieben, also ich wollte mir ein Programm schreiben,dass mir die Taylorpolynome ausgibt.
Das es nicht ganz so schwer wird, wollt ich es erstmal mit der expotential Funktion ausprobieren ,um es danach zu erweitern. Weil diese Funktion in Ihren Ableitungen immmer gleich bleibt.:toll:
Mein problem ist, das ja eine funktion auch varaiblen drin hat wie z.b (x^2+3) und wie kann ich das nun am besten darstellen???


```
package nachhilfe;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Taylorpolynom {
	static String x = "x";
	static String y = "";
String polynom = " ";
	static int entwicklugsPunkt, ordnung;

	public String berechneTaylorPolynom(int entwicklungsPunkt, int ordnung) {
		Fakultaet fak = new Fakultaet();

		double exponentialfunktion = Math.exp(entwicklugsPunkt);
		for (int i = 0; i <= ordnung; i++) {
			int fakultaet = fak.fakultaet(ordnung);
			y =  (exponentialfunktion / fakultaet) * Math.pow(x - entwicklungsPunkt, ordnung);
			polynom = polynom +" + "+ y;
}
		return polynom;
	}

	public static void main(String args[]) {
		System.out.println("In welchem Punkt(ganzzahlige Zahl) soll der Taylorpolynom entwickelt werden??");
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		try {
			entwicklugsPunkt = reader.read();
		}
		catch (IOException e) {
			System.out.println("Der entwicklungsPunkt " + entwicklugsPunkt + "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 = reader.read();
		}
		catch (IOException e) {
			System.out.println("Die Ordnung " + ordnung + " ist keine ganzzahlige Zahl!!Message: " + e.getMessage());
		}
		Taylorpolynom taylor = new Taylorpolynom();
		taylor.berechneTaylorPolynom(entwicklugsPunkt, ordnung);
	}
}
```

mit dieser Zeile kommt der Compiler nicht klar:
y =(exponentialfunktion / fakultaet) * Math.pow(x - entwicklungsPunkt, ordnung);

Und ist ja auch logisch, das man x nicht potenzieren kann...
wie löse ich nun das problem???????????;bahnhof:


----------



## njans (14. Mrz 2012)

Was spuckt der Compiler denn für einen Fehler aus? Kannst du anhand des Fehlers dein Problem erkennen?


----------



## tanzverfuehrung (14. Mrz 2012)

njans hat gesagt.:


> Was spuckt der Compiler denn für einen Fehler aus? Kannst du anhand des Fehlers dein Problem erkennen?


The operator - is undefined for the argument type(s) String, int

Ja also ich verstehe das Problem.ICh kann ja kein x potenzieren, da will er ja eine ganze Zahl und kein String...Nur wie kann ich das denn realisieren?


----------



## Marco13 (14. Mrz 2012)

y ist ein String, und du versuchst, ihm ein double zuzuweisen. Entweder
y = String.valueOf(derGanzeKramDa);
oder überlegen, wie man das geschickter, übersichtlicher, und vor allem: OHNE static Variablen schreiben kann...


----------



## tanzverfuehrung (14. Mrz 2012)

Marco13 hat gesagt.:


> y ist ein String, und du versuchst, ihm ein double zuzuweisen. Entweder
> y = String.valueOf(derGanzeKramDa);
> oder überlegen, wie man das geschickter, übersichtlicher, und vor allem: OHNE static Variablen schreiben kann...



das ist ja bis jetzt noch nicht mal mein Problem, sondern die MAth.pow macht probleme, weil pow zwei double werte erwartete und es aber ein String dabei ist!!!
x ist ein String!!!!!!!!!!!
Math.pow(x - entwicklungsPunkt, ordnung)


----------



## tfa (14. Mrz 2012)

> das ist ja bis jetzt noch nicht mal mein Problem, sondern die MAth.pow macht probleme, weil pow zwei double werte erwartete und es aber ein String dabei ist!!!
> x ist ein String!!!!!!!!!!!



Math.pow ist völlig unschuldig. Wie will man auch Strings potenzieren? Das Problem liegt in deinem Ansatz. Mir ist auch nicht so richtig klar, was du eigentlich machen willst mit den Strings. Rechnen kann man jedenfalls nur mit Zahlen.


----------



## AlexSpritze (14. Mrz 2012)

Bitte unbedingt mehr Satzzeichen benutzen. Das motiviert ungemein dir zu helfen.

Was soll denn dein 
	
	
	
	





```
x
```
 sein? Einfach nur eine Variable?

Und was genau soll am Ende rauskommen? Gib mal ein Beispiel.


----------



## tanzverfuehrung (14. Mrz 2012)

AlexSpritze hat gesagt.:


> Bitte unbedingt mehr Satzzeichen benutzen. Das motiviert ungemein dir zu helfen.
> 
> Was soll denn dein
> 
> ...



x ist eine Variable, die erst Später im Programm eingeben werden soll.
Also später sollen die Taylorpolynome mit verschiedenen x ausrechnen!
jetzt für die Exponentialfunktion f(x) =exp(x) soll das Taylorpolynom ausgerechnet werden und als String?! zurück gegeben werden.
z.b. entwickelt im Punkt 0
und bis zur 4. Ordnung
ergebnis:
1 + x + 1/2*x^2 + 1/6*x^3 + 1/14*x^4



Aber jetzt ist mir selber aufgefallen, das ich wahrscheinlich eine Methode
-stringTaylorPolynom();
Wo ich den String selbst zusammen bauen muss, mit den zeichen (z.b.^) und dann noch eine MEthode, wo ich den TaylorPolynom berechne, implementieren muss!ODER?
-calculateTylorPolynom!!!


----------



## tanzverfuehrung (14. Mrz 2012)

also die Methode die mir meinen Taylorpolynom nun ausgibt, habe ich hin bekommen

```
public String stringTaylorPolynom(int entwicklungsPunkt, int ordnung){
		
		for (int i = 0; i <= ordnung; i++) {
			int fakultaet = fak.fakultaet(i);
			if(!polynom.isEmpty())
			polynom =polynom+" + ("+ exponentialfunktion+"/"+fakultaet+") * (x-"+entwicklugsPunkt+")^"+i;
			else polynom ="("+exponentialfunktion+"/"+fakultaet+") * (x-"+entwicklugsPunkt+")^"+i;
		}
		return polynom;
	}
```
funktioniert wunderbar!!!und ich bin stolz auf mich:toll:

so jetzt werden ich die Methode implementieren, die mir das Taylorpolynom ausrechnet, für verschiedene x:toll::toll::applaus:


----------



## tanzverfuehrung (15. Mrz 2012)

das aufsummieren funktioniert nicht und ich verstehe nicht wieso????????
ich habe es schon tausend mal durch debuggt
also wenn ich für den entwicklungpunkt '= 0 nehme
ordnung=3; und x=3;
dann müsste eigentlich raus kommen:
1 + 3 + 4,5 + 4,5 
= 13
Aber irgendwie kommt raus:
1 + 3 + 0 + 0
= 4


WIESO????
weil die werte stimmen alle immer,irgendwie muss er was beim potenzieren oder so falsch machen?????!
???:L???:L???:L

kann mir eventuell jemand helfen?

```
/**
	 * Berechnet uns den Taylorpolynom, mit dem übergebenen x
	 * 
	 * @param entwicklungsPunkt
	 * @param ordnung
	 * @param x
	 * @return
	 */
	public double berechneTaylorPolynomForX(int entwicklungsPunkt, int ordnung, int x) {
		int base = x - entwicklungsPunkt;
		for (int exponent = 0; exponent <= ordnung; exponent++) {
			int fakultaet = fak.fakultaet(exponent);
			ergebnis = (exponentialfunktion / fakultaet) * (Math.pow(base, exponent));
			lösung = lösung + ergebnis;
			
		}
		return lösung;
	}
```


----------



## jgh (15. Mrz 2012)

könntest du daraus bitte mal ein KSKB basteln...
btw. Variablennamen mit Umlauten wie [c]lösung[/c] sehen nicht nur schei.... aus, sondern können auch später einige Probs verursachen


----------



## tanzverfuehrung (15. Mrz 2012)

```
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Taylorpolynom {
	String polynom = "";
	static int entwicklugsPunkt, ordnung, exponentialfunktion, x;
	Fakultaet fak = new Fakultaet();
	double ergebnis;
	private double entgültigesErgebnis;
	private double lösung;

	/**
	 * Gibt mir den Taylapolynom wieder
	 * 
	 * @param entwicklungsPunkt
	 * @param ordnung
	 * @return taylorpolynom
	 */
	public String stringTaylorPolynom(int entwicklungsPunkt, int ordnung) {

		for (int i = 0; i <= ordnung; i++) {
			int fakultaet = fak.fakultaet(i);
			if (!polynom.isEmpty())
				polynom = polynom + " + (" + exponentialfunktion + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
			else
				polynom = "(" + exponentialfunktion + "/" + fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
		}
		return polynom;
	}

	/**
	 * Berechnet uns den Taylorpolynom, mit dem übergebenen x
	 * 
	 * @param entwicklungsPunkt
	 * @param ordnung
	 * @param x
	 * @return
	 */
	public double berechneTaylorPolynomForX(int entwicklungsPunkt, int ordnung, int x) {
		int base = x - entwicklungsPunkt;
		for (int exponent = 0; exponent <= ordnung; exponent++) {
			int fakultaet = fak.fakultaet(exponent);
			ergebnis = (exponentialfunktion / fakultaet) * (Math.pow(base, exponent));
			lösung = lösung + ergebnis;
			
		}
		return lösung;
	}

	public static void main(String args[]) {
		System.out.println("In welchem Punkt(ganzzahlige Zahl) soll der Taylorpolynom entwickelt werden??");
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		try {
			entwicklugsPunkt = Integer.parseInt(reader.readLine());
			exponentialfunktion = (int) Math.exp(entwicklugsPunkt);
		}
		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());
		}

		Taylorpolynom taylor = new Taylorpolynom();
		System.out.println("Taylorpolynom: ");
		System.out.println(taylor.stringTaylorPolynom(entwicklugsPunkt, ordnung));
		System.out.println("Und das Ergebnis dazu: ");
		System.out.println(taylor.berechneTaylorPolynomForX(entwicklugsPunkt, ordnung, x));
	}
}
```


```
public class Fakultaet {

	public int fakultaet(int n) {
		int grenze = n;
		if (n == 0)
			return 1;
		for (int i = 1; i < grenze; i++) {
			n = n * i;
		}
		return n;
	}
}
```

hier das ist das ganze Programm...ist ja nicht viel...hoffe hilft dir weiter


----------



## jgh (15. Mrz 2012)

nur mal schnell rübergeschaut, dein Problem liegt darin das du rechenoperationen mit [c]int´s[/c] durchführst, aber gerade da eigentlich doubles bräuchtest. dadurch werden die Terme auf Ganzzahlen gerundet und dein Ergebnis erhält falsche Werte.
Habe mal -der einfachkeitshalber- alle deine int´s in double geändert und voilà es kommt das raus, was du willst.


```
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Taylorpolynom {
	String polynom = "";
	static double entwicklugsPunkt, ordnung, exponentialfunktion, x;
	Fakultaet fak = new Fakultaet();
	double ergebnis;
	private double entgültigesErgebnis;
	private double lösung;

	/**
	 * Gibt mir den Taylapolynom wieder
	 * 
	 * @param entwicklungsPunkt
	 * @param ordnung
	 * @return taylorpolynom
	 */
	public String stringTaylorPolynom(double entwicklungsPunkt, double ordnung) {

		for (int i = 0; i <= ordnung; i++) {
			int fakultaet = fak.fakultaet(i);
			if (!polynom.isEmpty())
				polynom = polynom + " + (" + exponentialfunktion + "/"
						+ fakultaet + ")*(x-" + entwicklugsPunkt + ")^" + i;
			else
				polynom = "(" + exponentialfunktion + "/" + 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) {
		int base = (int) (x - entwicklungsPunkt);
		for (int exponent = 0; exponent <= ordnung; exponent++) {
			int fakultaet = fak.fakultaet(exponent);
			ergebnis = (exponentialfunktion / fakultaet)
					* (Math.pow(base, exponent));
			System.out.println(ergebnis);
			lösung = lösung + ergebnis;

		}
		return lösung;
	}

	public static void main(String args[]) {
		System.out
				.println("In welchem Punkt(ganzzahlige Zahl) soll der Taylorpolynom entwickelt werden??");
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		try {
			entwicklugsPunkt = Integer.parseInt(reader.readLine());
			exponentialfunktion = (int) Math.exp(entwicklugsPunkt);
		} 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());
		}

		Taylorpolynom taylor = new Taylorpolynom();
		System.out.println("Taylorpolynom: ");
		System.out.println(taylor
				.stringTaylorPolynom(entwicklugsPunkt, ordnung));
		System.out.println("Und das Ergebnis dazu: ");
		System.out.println(taylor.berechneTaylorPolynomForX(entwicklugsPunkt,
				ordnung, x));
	}
}

class Fakultaet {

	public int fakultaet(int n) {
		int grenze = n;
		if (n == 0)
			return 1;
		for (int i = 1; i < grenze; i++) {
			n = n * i;
		}
		return n;
	}
}
```


----------



## tanzverfuehrung (15. Mrz 2012)

ich habe echt schon an mir gezweifelt...ich danke dir sehr für deine hilfe!!:applaus::toll::bae:


----------



## jgh (15. Mrz 2012)

gerne, sowas macht dann ja auch Spaß.
eines darf man nie machen...an sich selbst zweifeln  
und dein Programm macht ja grundsätzlich das, was es soll...  also kannst du stolz auf dich sein


----------

