Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Morpheus_Basic
Anmeldungsdatum: 11.03.2007 Beiträge: 1
|
Verfasst am: 11.03.2007, 18:51 Titel: Heron-Verfahren |
|
|
Also ich muss eine quadratwurzel a mithilfe des Herons verfahrens(x=0,5*(x+(a/x))) auf ein tasuesntel genau berechnen!
Code: | INPUT "Gib die Zahl ein: a = ", n#
a# = 1
b# = n
DO UNTIL STR$(a#) = STR$(b#)
a# = (a# + b#) / 2#
b# = n# / a#
LOOP
PRINT "Wurzel aus a = "; a#
PRINT "Tatsaechlicher Wert = "; SQR(n#) 'Kontrolle |
kann mir einer sagen wie ich jetzt noch die Genauigkeit hineinbekomme das der die mir auf ein tausenstel genau ausgibt?
Mein lehrer hatte uns das hier als Anfang für das Programm gegeben!
Code: | PRINT:PRINT
INPUT "Gib die Zahl a ein": a
PRINT
INPUT "Gib die genauigkeit ein": eps |
Gruß Morph |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4603 Wohnort: ~/
|
Verfasst am: 11.03.2007, 19:10 Titel: |
|
|
Die Ausgabe der Genauigkeit, z. B. auf 3 Stellen hinter dem Komma, würde ich mit
Code: | PRINT INT(ergebnis*1000)/1000 |
machen, bzw. bei einer Genauigkeit von eps Stellen kannst du dann 10^eps verwenden.
Wenn du bis zu einer Genauigkeit von 1/1000 rechnen willst:
Code: | DO UNTIL ABS(a# - b#)<1/1000 |
|
|
Nach oben |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 12.03.2007, 00:05 Titel: |
|
|
Vllt. nicht der eleganteste Weg, aber immerhinque ein möglicher: Code: | DIM n#, a#, b#
DIM Eps, i
INPUT "Nachkommastellen:", Eps
DO
INPUT "Gib die Zahl ein, a:", a#
IF a# <> 0 THEN
i = 0
n# = 1
b# = a#
DO UNTIL MID$(STR$(n#), 1, INSTR(STR$(n#), ".") + Eps)=MID$(STR$(b#), 1, INSTR(STR$(b#), ".") + Eps)
i = i + 1
n# = (n# + b#) / 2!
b# = a# / n#
IF i > 50 THEN EXIT DO 'ansonsten Endlosschleife ?
LOOP
PRINT "FB-Funktionswert="; SQR(a#)'Kontrolle
PRINT "Iterations-Wert ="; n#
PRINT "Differenz ="; : PRINT USING "##.##^^^^"; (SQR(a#) - n#)
PRINT "i="; i
PRINT "Iterations-Wert ="; : PRINT USING "###." + STRING$(Eps, "#"); n#
END IF
LOOP UNTIL a# = 0 | Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4603 Wohnort: ~/
|
Verfasst am: 12.03.2007, 19:46 Titel: |
|
|
dreael hat Folgendes geschrieben: | Ist demnach nichts anderes als das Newton-Verfahren für die Nullstellensuche bei einer Parabelfunktion. |
Ääähhhhm ... wenn du damit sagen willst, dass es ein Näherungsverfahren ist, so wie das Newton-Verfahren eines ist, dann gebe ich dir Recht. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.03.2007, 20:03 Titel: |
|
|
nemored hat Folgendes geschrieben: | Ääähhhhm ... wenn du damit sagen willst, dass es ein Näherungsverfahren ist, so wie das Newton-Verfahren eines ist, dann gebe ich dir Recht. ;) |
Ist so. Nehmen wir SQR(a) als Beispiel: Zuerst eine Gleichung bauen:
x = SQR(a)
x^2 = a
x^2 - a = 0
Letztere Gleichung schreiben wir nun etwas um, dass es eine Funktion darstellt:
y = f(x) = x^2 - a
Und dies stellt nun unsere Parabel dar, Du kannst sie gerne mit einem kleine QB-Programm plotten. Beim Newtonverfahren sucht man auf numerischem Weg die Nullstellen, also sämtliche x, für die y=f(x)=0 gilt.
Newtonverfahren:
x(n+1) = x(n)-f(x(n))/f'(x(n))
(Tangente durch den Punkt x(n) legen und Schnittpunkt bestimmen - Beweis sollte nicht schwer fallen)
Ableitung von f(x):
2*x
(das -a wird zu Null)
Eingesetzt:
x(n+1) = x(n) - (x(n)^2 - a) / (2*x)
x(n+1) = x(n) - [ x(n)^2 / (2*x(n)) - a / ( 2*x(n)) ]
x(n+1) = x(n) - x(n) / 2 + a / (2 * x(n))
x(n+1) = x(n) / 2 + a / x(n)) / 2
x(n+1) = (x(n) + a / x(n)) / 2
was dann schlussendlich zur bekannten Interationsschrittformel führt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4603 Wohnort: ~/
|
Verfasst am: 12.03.2007, 20:34 Titel: |
|
|
Stimmt, ist tatsächlich identisch. War mir gar nicht bewusst, muss ich mir merken. |
|
Nach oben |
|
|
|