PDA

Vollständige Version anzeigen : Cosinus?


Manzi
23.03.2006, 12:26
Hallo

Folgendes Problem:

cos(x)= (-1)^n *x^2n/(2n)

Cos (x) soll über diese Reihe angenähert werden.


Im Formular zwei Textfelder 1.Grad ( wobei es in Rad umgerechnet wird)
2.Genauigkeit der Reihe


sngx = txtGrad * 3.14159265 / 180 (Umrechnung von Grad in Rad)
b = sngx
E = Genautxt ( Eingabe der Genauigkeit)

For n = 1 To E (Jetzt die Annäherung)
b = (-1)^n*((sngx ^ (2 * n)) / (2 * n))
Next
MsgBox b, Cos(txtFeld)



Was läuft bei der Reihe falsch?


Danke

FW
23.03.2006, 13:04
... ich kenne die Formel zwar nicht, aber die Schleife macht keinen Sinn, denn am Ende wirst Du immer erhalten: b = (-1)^E*((sngx ^ (2 * E)) / (2 * E)), wenn es das ist, was Du willst, dann kannst'e Dir die Schleife sparen. Aber womöglich sollen die Schleifenwerte ja addiert werden?...

Locutus
23.03.2006, 13:39
Die Schleifenwerte müssen tatsächlich addiert werden, das ist ja der SINN einer Reihenentwicklung. Übrigens ist schon Deine Formel falsch, der Nenner am Ende muß lauten (2n)! (lies:Fakultät).

Locutus
23.03.2006, 13:44
Kleiner Tip noch: Bei einer Reihenentwicklung möchte man ja sehen, wie die Genauigkeit mit steigender Zahl der Glieder größer wird. Daher würde ich PI nicht als Zahl (3,14...) in den Code tippen, sondern berechnen lassen mit der Formel pi=4*Atn(1). Die Arcustangens-Funtion ist in VBA bereits enthalten.

Manzi
23.03.2006, 13:49
Hallo!

Tut mir leid steh wie immer auf der Leitung, wie soll ich die Werte addieren?

Und warum 2n = 2*n


Danke

Locutus
23.03.2006, 14:08
Das hatten wir doch gestern schon alles. Die Schleife läuft n-mal durch, weil Du n Glieder haben möchtest. Es ist eine Reihenentwicklung, also soll mit jedem Schleifendurchlauf immer ein Glied an die Reihe angehängt (=addiert) werden. Vergiß das mit der Fakultät (2n)! nicht, sondern kommt sowieso nur Unsinn raus.

Sascha Trowitzsch
23.03.2006, 14:15
Darf ich interessehalber mal Fragen, warum ein Kosinus per Reihe entwickelt wird, wenn das Ergebnis in einer Variablen vom Typ Double gespeichert wird? Dann kann ich doch gleich die eingebauten Trig.-Funktionen verwenden.
Wenn die Genauigkeit höher sein soll, dann kommt man um einen benutzerdefinierten Datentyp nicht herum. (Und das Ganze wird erheblich schwieriger...)
Leider kennt VB(A) nunmal keine Typen höherer Genauigkeit wie Delphi oder VS:NET.

Ich mein ja nur...

Ciao, Sascha

Locutus
23.03.2006, 14:52
@Sascha
Den Sinn des Ganzen mochte Manzi gestern schon bei seiner Reihenentwicklung für PI nicht verraten. Hört sich für mich verdächtig nach Matheaufgaben in der Oberstufe an, ich mußte damals sowas auch machen. Was die Genauigkeit angeht: Zu Lernzwecken reicht das m.E. Für ernsthafte Anliegen nimmt man natürlich komplexere Algorithmen und andere Datentypen. Aber Manzi soll erstmal sehen, daß seine Schleife rund läuft :p

Manzi
23.03.2006, 14:57
Brauch das für die Uni laut neuen Studienplan, muß ich Info 1 und 2 nach machen das Vba ist mein letzter Teil.

Grüble gerade an der Schleife, probier es mit einem Programmablaufplan.


Bekomm das mit der Fakultät nicht hin Access spuckt in einer Tour Fehlermeldung, und in der Hilfe finde ich auch nix.



Danke

Sascha Trowitzsch
23.03.2006, 15:09
Was Locutus nicht verraten hat: Es gibt den Fakultät-Operator unter VBA gar nicht.
Du musst eine eigene Funktion zur Berechnung von Fakultäten schreiben. (Oder du gibst in der VBA-Hilfe als Suchbegriff in den "Antwort-Assistenten" das Wort "Fakultät ein und schon wirst du zu einer Beispielprozedur geleitet, die das Gewünschte bietet.)

Ciao, Sascha

Manzi
23.03.2006, 15:28
Hallo!

Finde unter der Hilfe nix, habe nur Fakultät einer natürlichen Zahl leider ohne Variabel.

Danke

Locutus
23.03.2006, 15:33
Du wirst aber bei Google mit "VBA Fakultät" reich beschenkt. Das scheint mir ohnehin der pfiffigere Weg zu sein, anstatt das alles mühsam in einem Datenbank(!)-Forum zu erfragen.

Manzi
23.03.2006, 15:43
Das sich euer Wissen nicht nur auf Datenbanken beschränkt sieht man doch, sonst könntet ihr mir nicht helfen.

Manzi
23.03.2006, 16:32
Stimmt das so:



Function Fak(n As Integer)
If (n = 0) Then
Fak = 1
Else
Fak = n * Fak(n - 1)
End If
End Function




Schleife:

x = x + (-1)^n*((sngx ^ (2 * n)) / (2*Fak))




Danke


[code]

Locutus
23.03.2006, 17:04
Stimmt das so
Was haben denn Deine Tests ergeben? Laß Deinen Code doch mal laufen und schau, was er macht. Wenn Du einen Schein für Deine VBA-Kenntnisse haben willst, dann mußt Du ihn Dir verdienen - meine Meinung ;)

Manzi
23.03.2006, 17:17
Glaub mir den hab ich mir verdient, hab schon 6 Programme gemacht, dieses hier 7 und 8 fehlen noch, nur hier fehlt mir einfach noch die durchsicht.
Aber für was hat man den 400 Seiten dickes Skriptum.

Danke

Manzi

Sascha Trowitzsch
23.03.2006, 18:32
Auch wenn es Locutus' pädagogischen Ansatz torpediert:

Function Cos2(x As Double, Optional E As Long = 10) As Double
Dim n As Double

Cos2 = 1
For n = 2 To E * 2 Step 2
Cos2 = Cos2 + (-1) ^ (n / 2) * (x ^ n) / Fak(n)
Next

End Function

Function Fak(n As Double) As Double
If n <= 1 Then
Fak = 1
Else
Fak = Fak(n - 1) * n
End If
End Function

Ciao, Sascha

Manzi
23.03.2006, 18:55
Danke, habe es den ganzen Tag versucht, bin aber nicht weitergekommen.
Ich sitze dafür 2 Tag vor meinen Skript.

Danke an die Menschlichkeit