Algorithmen Teil VIII: Ein Bug kommt selten allein...

  • Und wieder ein neues Kapitel verspielten Unsinns, fehlgeschlagener Versuche, haarstreubender Ergebnisse und unwiederholbarer Fehler. Viel Theorie und gar wenig Praxis-taugliches wartet wieder auf möglichst kreatives Recycling. Willkommen also, ihr edlen BesucherInnen unserer (Software-)Mülldeponie, - möge der Stockschnupfen mit Euch sein!

    Abt. Mut du ma Ordnung!
    ================
    Was waren bisher eigentlich die Themen? Kann man das mal irgendwie in eine Ordnung bringen? Ich versuch's mal.
    Gruss

    P.S.: ... und fast überall war Unsinn drin!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

    Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden

    Hinweis:

  • Abt. Spezielle Datenhaltung: Die DEQue-Struktur
    ===============================
    Erläuterungen im Programmtext!
    Gruss

    P.S.: Zit.:'In der Praxis verwendet man die Deque unter anderem ... zur Textsuche mittels regulärer Ausdrücke (Pattern-Matching-Algorithmus)'

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht (3. August 2014 um 13:52)

  • Ergänzende Funktionen zu oben:
    ====================


    ... mit dem zugehörigen Testteil (Am Ende des Hauptprogramms einfügen):

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    Einmal editiert, zuletzt von p. specht (3. August 2014 um 21:17)

  • Ergänzung II zu oben: Ob die gewählten Befehlsbezeichnungen gut zu merken sind, sei mal dahingestellt. Laut Wikipedia gibt es PUT/GET für die Top-Seite und PUSH/POP für die Bottom-Seite, aber die sind bekanntlich schon besetzt. Wer immer damit öfter arbeitet, wird sich vermutlich ein eigenes Schema zulegen. Mein Vorschlag im Programm oben lautete:


    P.S.: Das RETURN mit Übergabe des Dynamischen Arrays bei den ersten drei Befehlen scheint ausserdem überflüssig zu sein, da im Falle Dynamischer Arrays die Proc-Übergabe per Call by Reference zu erfolgen scheint. Es wird also ohnehin direkt auf das übergebene Array gearbeitet. Bin am klären...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Ist doch logisch, oder?
    =================
    Während sich Programmierer in der Regel in der Welt zweiwertiger Logik (0 - 1, Falsch - Wahr, Aus - Ein) von George Boole und De Morgan bewegen, hält die Realität oft auch verschiedene Zwischenwerte bereit. Man spricht von Mehrwertiger Logik. So haben sich Reichenbach und Lukasiewiczs mit dreiwertiger Logik (z.B. in der Quantenmechanik) und ihren Erweiterungen in Richtung unendlichwertiger Kontinuumslogik (alles zwischen 0 und 1) beschäftigt und dabei deren mathematische und philosophische Konsequenzen erforscht. Kleene und Gödel konnten im Bereich vier- und fünfwertiger Logik Fortschritte erzielen (Kleene untersuchte damit die Grade der Lösbarkeit mathematischer Probleme und erfand dabei die Regular Expressions) und Popper schloss auf dieser Basis auf ethisch vertretbare Mechanismen der verschiedenen wissenschaftlichen Beweisverfahren. Schließlich kehrte das Thema in die Elektronikfertigung und -Qualitätssicherung zurück: In der Hardwarebeschreibungssprache VHDL wird zum Beispiel die im IEEE-Standard 1164 definierte neunwertige Logik verwendet:

    Man sieht, daß hier die Tendenz bereits Richtung Fuzzy-Logik von L. Zadeh wandert, - mit dem Unterschied, daß dort zusätzlich eine 'innere Interpretation' sehr gutes Sprachgefühl erfordert und der Programmierer diese letztlich erst der Gruppe der Anwender in zeitaufwändigen Gesprächen 'entlocken' muss.
    Gruss

    P.S.: Der guten Ordnung halber sei noch Brouwer's Intuitionistische Logik genannt, die allerdings eher erkenntnistheoretische Grundlagen zum Mechanismus der Forschung legt - Auf Kurzform gebracht: Ohne Bauchgefühl, diffuse Annahmen, wilde Theorien und Widerlegungsversuche zu Vorurteilen gibt's erst mal keinen Erkenntnisgewinn!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    4 Mal editiert, zuletzt von p. specht (4. August 2014 um 19:42)

  • Bugs kommen eben selten allein: KORREKTUR zu vor-voriger Beitrag:
    SetSize q&[],sizeof(q&[])+1 'erweitert das Array also um 1 Stelle!!!
    (SetSize funktioniert anders als Declare )

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Wann und wo gehen die Planeten auf?
    ===========================
    Auf der genialen Homepage von Dr. Jean Pierre Moreau findet sich zu dieser Frage ein Programm aus der Zeit vor 1982, dessen Gütligkeit wegen der angewendeten Genauigkeit vermutlich auch 32 Jahre später noch gute Ergebnisse liefert. Ich konnte zwei sinnstörende Fehler im Basic-Originaltext erkennen und beheben, da ich aber leider kein Äquatorial-montiertes Teleskop besitze, kann ich die Ergebnisse derzeit nicht verifizieren. Für entsprechende Kommentare wäre ich natürlich dankbar.
    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Mit der Størmer-Verlet-Methode Differentialgleichungen 2. bzw. n.ter Ordnung lösen
    =======================================================
    Das Verfahren, das mit vollem Titel "Newton-Størmer-Verlet leapfrog method" heisst, findet sich in fast allen Physik- und Game-Engines zur Berechnung der Newtonschen Bewegungsgesetze. Mit anderen Worten: Alles was explodiert und dann runterfällt wird mit dieser deutlichen, aber doch nicht zu zeitintensiven Verbesserung des einfachsten aller entsprechenden Algorithmen (Explizites Euler-Verfahren) berechnet. Das nachstehende Programm erlaubt eine Beurteilung der Realitätsnähe, weil auch die analytisch-exakte Lösung der Aufgabe bekannt ist. Fünfstellige Genauigkeit reicht da wohl.
    Gruss
    P.S.: Die Variablen-Rückübergabe an Parameterlisten von Fortran-90-Subroutines ist echt ein Graus!!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Anmerkung zu oben: Carl Størmer, norwegischer Mathematiker, hat 1892 als 18jähriger jene Formel für die Zahl Pi gefunden, die dem aktuellen Rekordhalter Prof. Yasumasa Kanada (Univ. Tokyo) 2002 erlaubte, Pi auf 1,241,100,000,000 Dezimalstellen genau zu berechnen :s2:. Størmers Formel lautet

    Zitat

    Pi = 176*arctan(1/57)+ 28*arctan(1/239)-48*arctan(1/682)+96*arctan(1/12943)
    Bei der Auswertung wird üblicherweise die Taylor-Entwicklung der arctan()-Funktion verwendet:
    arctan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Differerentialgleichung mittels Prädiktor-Korrektor-Methode lösen
    ===========================================
    Ist die Differentialgleichung lediglich von 1. Ordnung, determinieren also z.B. nur aktuelle Augenblickswerte die Änderungsgeschwindigkeit eines Systems (Beispiel: Radioaktiver Zerfall), dann bietet das Prädiktor-Korrektor-Verfahren eine rasch konvergierende Lösung zur schrittweisen Berechnung des Systemverhaltens. Bestimmte Anfangsbedingungen müssen dann allerdings wieder vorgegeben werden. Man spricht vom "Anfangswertproblem", das deutlich leichter lösbar ist als die Frage, welche Funktion stets bestimmte Randwerte/Randbedingungen erfüllt (Randwertproblem, kniffeliger und oft besser mit analytischen Überlegungen lösbar - manchmal aber auch garnicht).
    Gruss

    P.S.: Nachstehend wieder eine Rückübersetzung aus Fortran-90 bzw. ursprünglich Turbopascal. F90 bedient sich bei Subroutinen des Call by Reference, sodaß Parameter-Arithmetik sich auf das Aufrufende Programm auswirkt: Große Stolperfalle!!!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht (12. August 2014 um 21:08)

  • Abt. Datenstruktur DEQue: Nachtrag DEQ.inc Include
    =================================

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    Einmal editiert, zuletzt von Frank A. (17. August 2014 um 20:36) aus folgendem Grund: Codetags gesetzt, anstatt Quotetags.

  • Abt. Diverse Links
    ===========
    Html/pdf: Albertson/Hutchinson: Discrete mathematical Algorithms (downloadable version), engl.
    PDF: Prof. Ulrich Hoffmann, Uni Lüneburg: Mathematik für Wirtschaftsinformatiker, deutsch, 235 Seiten
    PDF-Slides: Richard Mayr, Univ. Edinburgh: Discrete Mathematics, Chapter 3: Algorithms, engl., 28 Slides
    PDF: Conrado Martínez, Univ. Politècnica de Catalunya, Spain: Applications of Discrete Mathematics to the Analysis of Algorithms, engl., 40 pages
    PDF-Slides: Prof. Steven Evans, Discrete Mathematics: Number Theory and Cryptography, Chapter Modular Arithmetics, engl.,
    Html mit PDF-Links: Edward A. Bender & S. Gill Williamson: Foundations of Combinatorics with Applications
    Metalink: Free Online Mathematics Books
    ACM TOMS Algorithm 419: Jenkins-Traub-Algorithm Polynomial Root Solver (Free Windows Version with setup.exe)

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    3 Mal editiert, zuletzt von p. specht (14. August 2014 um 20:27)

  • P.S. zu oben:
    ========
    PDF-Slides: Dominic Schuhmacher et.al., Univ. Zürich: Die Irrfahrt - eine Entdeckungsreise in die Welt des Zufalls, deutsch, 75 Folien (U.a.: Wann zerfließt ein Wassertropfen?)
    PDF: Stefanie Endres (Hausarbeit, Univ. Würzburg): Irrfahrten: Alle Wege führen nach Rom, deutsch, 114 Seiten, mit zahlreichen Beispielen
    PDF-Slides: Beatrice Paoli, FWS-Referat: Methoden zur Analyse sozialer Netzwerke, deutsch, 42 Folien, (Impfstrategien, Mutierende Zufallsnetzwerke)
    Wikipedia: Petrinetze

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Test-StringArray$
    ==============
    Manchmal braucht man mal schnell 15000 Teststrings zufälliger Länge...

    Code
    CLS:randomize:font 2
    Declare a$[14999]
    a$[]=mkstr$(chr$(32+rnd(128)),rnd(55))
    a$[]=a$[]+printme():waitinput
    :proc printme :print a$[&index]:endproc


    Das wievielte Array (Laufnummer in Reihenfolge wie Declared) ist d![] ?:

    Code
    cls:declare a%[],b$,c&[],d![],e$[10],f$[]
    var ArrayNr&=d![]:print " d![] ist als ";ArrayNr&;". Array deklariert!":waitinput

    Gruss

    P.S.: Bin auf der Suche nach den Bereichsgrenzen für die Variablendefinitionen, Arrays-Deskriptoren etc. Weiss jemand genaueres? (Es wird wohl heute nicht mehr so funktionieren wie beim Commodore PET oder C=64 von dunnemals, oder? Da standen diese Grenzen sogar im Quick guide/User manual!)

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    4 Mal editiert, zuletzt von p. specht (15. August 2014 um 17:43)

  • Und weil Bugs halt kommen und gehen wie sie wollen: Statt a$[]=a$[]+printme():waitinput muss es, um die Inhalte von a$[] zu erhalten, natürlich lauten: a$[]=a$[ &index ]+printme():waitinput
    PrintMe() sollte dann eigentlich auch einen Leerstring zurückliefern, oder man erspart sich die Stringaddition und liefert gleich a$[&index] zurück. Einer der ersten "Bugs" war übrigens keiner, sondern eine Motte - eigentlich müsste es also Moth heissen. "Bug" im Sinne von 'Kleiner Krabbler' (Unberechenbare Kleinigkeit) geht aber angeblich auf Edison und seinen Phonographen zurück.
    Gruss
    Ach so, ja: Abt. Links für Lärm-Liebhaber: Virtual Online-Synthesizer Keyboard. Macht Spaß!
    [Blockierte Grafik: http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/H96566k.jpg/640px-H96566k.jpg]

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    4 Mal editiert, zuletzt von p. specht (17. August 2014 um 20:25)

  • Abt. Fixe String-Arrays: So weit, so breit
    =========================
    Die bisherigen Erkenntnisse betreffend Speicherverwaltung von "mit fester Anzahl deklarierte String-Arrays" (hier: in Profan-11) sind weiterhin dürftig:

    1) 'a%=a$[]' liefert für absolut ALLE Arrays eine Platzziffer in Reihenfolge der declare-ten Arrays.
    2) Der Befehl 'a%=Addr(a$[])' stürzt bei fest declare-ten Stringarrays zwar nicht ab, verweist aber auf Verwaltungsspeicher, der mit Profan-Mitteln nicht gültig auslesbar ist (Exeption Error).
    3) Erkennbar war lediglich, dass jedem String eines 'Feste-Anzahl-Arrays' (Speicherort mit 'a%=Addr(a$[&Loop])' ermittelt) ein Long mit der Länge des Strings VORANGEHT und ...
    4) eine einzelne Null als Endbyte dient (wie in der Hilfe beschrieben).
    5) Ein weiteres Long unmittelbar VOR der Längenangabe enthält stets '1': Vermutlich eine Datentyp-Angabe.

    Gruss

    P.S: Bei dynamischen Stringarrays führt schon das genannte 'a%=Addr(a$[])' zum Absturz mit Exeption error!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Sehenswertes
    ---------------------
    Youtube: 15 Sort-Algorithmen, multimedial in 6 Minuten dargestellt
    Youtube: Quicksort mit Lego in deutsch erklärt
    Html (engl.): The Basics of Game Physics Engines
    Gruss

    P.S.: Es scheint große Mode zu werden, die Soundtracks von Wayne Lyttles 'Animusic' (Computeranimierte Musik) in normalen Orchestern oder Bands nachzuspielen: Beispiel 1 (Amateurband), Beispiel 2 (Orchestral)

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Velocity Verlet Integrator
    ==================
    Das große Dilemma bei der numerischen Lösung von Feldgleichungen ist folgendes: Man muss entweder zuerst 2 Orte und die verstrichene Zeit kennen, um eine Durchschnittsgeschwindigkeit berechnen zu können (von der dann aber z.B. die Induktion und auf den Weg zurückwirkende magnetische Kräfte abhängen). Oder man muss bei Kenntnis des Ausgangsortes, der Richtung und Geschwindigkeit den nächsten Bahnpunkt berechnen, die wirkenden nichtlinearen Reibungskräfte sind aber z.B. vom Weg ZWISCHEN Ausgangs- und nächstem Bahnpunkt abhängig ... den man aber noch nicht kennt! Problem erkannt? Fehler-Minimierung allein hilft da wenig, es geht nämlich noch um weitere Eigenschaften, die so ein Simulationsalgorithmus erfüllen muss:

    Das Geheimnis vieler Physik-Simulationen ist Velocity Verlet Integration, ein schnelles Integrationsverfahren für Newton'sche Bewegungsgleichungen, das sogar das hochgenaue 'Runge-Kutta-4./5.Ordnung (RKF45)'-Verfahren übertrifft, - allerdings NICHT an Genauigkeit, sondern an Energie-Konstanz! Runge-Kutta neigt nämlich im Laufe der Zeit dazu, durch systematische Fehler und Rundungsfehler immer mehr Energie in das simulierte System (etwa ein Pendel) zu pumpen.

    Das kann beim vorgestellten VELOCITY VERLET-Verfahren (sehr ähnlich dem 'Leapfrog'-Verfahren, zu deutsch etwa 'Bockspringen') nicht passieren, da es ein ZEITUMKEHRBARES, SYMPLEKTISCHES Verfahren ist, dessen Fehler sich bis auf einen kleinen Anteil gegenseitig weitestgehend aufheben. Zeitumkehrbar heißt: Durch Vorzeichenänderung im Zeitschritt gelangt man wieder an die Ausgangsposition. Symplektisch bedeutet, daß physikalische Erhaltungsgrößen wie Impuls, Energie, Entropie (weitesgehend) erhalten bleiben.

    Gruss
    P.S.: Anbei ein bewusst äußerst einfach gehaltenes Verfahrensbeispiel (In Physik-Engines geht's dann gleich in allen 3 Freiheitsgraden der Translation und 3 der Rotation zur Sache)

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. AKIMA-Interpolation mit Kubischen Splines
    ------------------------------------------------------
    Ein von US-Volkswirt Hiroshi Akima 1978 vorgestelltes Verfahren nutzt gegenüber der üblichen "linearen Interpolation" zwischen Stützstellen Polynome dritten Grades. In deren Berechnung aus den (auch unregelmäßig verteilten!!) Stützstellen (Messwertetabelle y=F(x)) gehen auch die jeweils benachbarten Stützstellen ein sowie zusätzlich ein gewogener Anstieg, und zwar der Mittelwert aus den Anstiegen zu den benachbarten Stützpunktwerten. Nicht sehr klar? Na, Hauptsache es funktioniert!
    Gruss
    P.S.: In einem revidierten Verfahren hat Akima das 1992 auf Gitterpunkte erweitert, sodaß durch einige diskrete Werte beliebig geformte glatte Flächen definiert werden können, was z.B. im KFZ-Bau verwendet wird.

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!