PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Näherungsfunktion für ln(1+x)


pippo
2004-10-28, 19:06:25
Als Hausaufgabe müssen wir in c++ ein Programm schreiben, dass einen Näherungswert für ln(1+x) ausgibt. Das dumme ist nur, dass unsere Professorin ne falsche Funktion angegeben hat. Hat vielleicht jemand ne Ahnung, wie die Näherungsfunktion dazu lautet?

Sie hat uns folgende gegeben:

Summe(Sigma) von k=1 bis N (-1)^(k-1) * (x^k) / k


Wiegesagt kommt da alles andere als ne Näherung an ln(1+x) raus

Kenny1702
2004-10-28, 20:02:35
Als Hausaufgabe müssen wir in c++ ein Programm schreiben, dass einen Näherungswert für ln(1+x) ausgibt. Das dumme ist nur, dass unsere Professorin ne falsche Funktion angegeben hat. Hat vielleicht jemand ne Ahnung, wie die Näherungsfunktion dazu lautet?

Sie hat uns folgende gegeben:

Summe(Sigma) von k=1 bis N (-1)^(k-1) * (x^k) / k


Wiegesagt kommt da alles andere als ne Näherung an ln(1+x) raus

Du hast die richtige Funktion.
Der Fehler ist =< x^{N+1} / (N+1)

pippo
2004-10-28, 20:09:00
Wie meinst damit, das sei die richtige Funktion? Das was du geschrieben hast ist doch was ganz anderes.
Und da hätt ich auch gleich noch ne frage dazu: Was bedeutet das " =< " ?

Ausserdem meinst du mit N k, oder ?

Kenny1702
2004-10-28, 20:26:08
Wie meinst damit, das sei die richtige Funktion? Das was du geschrieben hast ist doch was ganz anderes.
Und da hätt ich auch gleich noch ne frage dazu: Was bedeutet das " =< " ?

Ausserdem meinst du mit N k, oder ?
1. Ja, es wurde dir die richtige Näherungsfunktion gegeben, denn die Näherungsfunktion ist gleich ln(1+x), wenn man N gegen unendlich laufen läßt(was auf Computern ja so nicht geht, da man nur endlich viel Zeit hat).

2. Zu einem festen N kannst du den Fehler deiner Näherungsfunktion bestimmen, ich habe dir die Funktion dazu angegeben. Damit kannst du überprüfen, ob vielleicht nicht dein Code fehlerhaft ist;). "=<" sollte natürlich "<=" sein, also kleinergleich.

EDIT: Noch was ganz Wichtiges: x ist aus dem Intervall (-1,1), ansonsten divergiert die Logarithmusreihe, folglich bekommst du außerhalb des Intervalls schnell "Mist" raus. Die Fehlerabschätzung gilt auch nur für x aus [0,1).

pippo
2004-10-29, 11:44:38
Also irgendwie versteh ich das nicht, sry :)

Egal, ob ich einen Wert zwischen -1 und 1 wähle oder irgendwas anders, das Ergebnis ist immer Meilenweit vom richtigen Wert entfernt, auch wenn ich die Zahl der Summanden ziemlich hoch mache. Ich hab die Funktion auch nicht falsch programmiert, denn einmal hab ichs mitm Taschenrechner nachgerechnet und bekomm den gleichen Mist raus.

Hier mal ein Beispiel:

x=4
N=6

Damit erhalte ich die Ergebnisse:
4
-8
21,33
-64
204,8
-682,66

ln(1 + 4) ist aber 1,6094. Je höher also die Zahl der Summanden, desto weiter komm ich vom tatsächlichen Wert weg.

Kenny1702
2004-10-29, 12:28:46
x=0,5

ln(1 + 0,5) = ln(1,5) = 0,4055


N=1: 0,5


N=2: 0,375


N=3: 0,4167
...

Funktioniert auch für andere x aus (-1,1), wenn man es richtig macht:). Das dein Beispiel nicht funktioniert ist klar, schließlich divergiert die Logarithmusreihe für |x|>1.