Vollständige Version anzeigen : Cosinus?
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
... 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?...
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).
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.
Hallo!
Tut mir leid steh wie immer auf der Leitung, wie soll ich die Werte addieren?
Und warum 2n = 2*n
Danke
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
@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
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
Hallo!
Finde unter der Hilfe nix, habe nur Fakultät einer natürlichen Zahl leider ohne Variabel.
Danke
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.
Das sich euer Wissen nicht nur auf Datenbanken beschränkt sieht man doch, sonst könntet ihr mir nicht helfen.
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]
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 ;)
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
Danke, habe es den ganzen Tag versucht, bin aber nicht weitergekommen.
Ich sitze dafür 2 Tag vor meinen Skript.
Danke an die Menschlichkeit
vBulletin v3.6.2, Copyright ©2000-2019, Jelsoft Enterprises Ltd.