Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Heron-Verfahren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Morpheus_Basic



Anmeldungsdatum: 11.03.2007
Beiträge: 1

BeitragVerfasst am: 11.03.2007, 17:51    Titel: Heron-Verfahren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 11.03.2007, 18:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 11.03.2007, 23:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.03.2007, 18:43    Titel: Antworten mit Zitat

Wikipedia-Artikel dazu:

http://de.wikipedia.org/wiki/Babylonisches_Wurzelziehen

Ist demnach nichts anderes als das Newton-Verfahren für die Nullstellensuche bei einer Parabelfunktion.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 12.03.2007, 18:46    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.03.2007, 19:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 12.03.2007, 19:34    Titel: Antworten mit Zitat

Stimmt, ist tatsächlich identisch. War mir gar nicht bewusst, muss ich mir merken. happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz