ALGORITHMEN UND ANDERES ZEUG - Teil XIII

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

  • Abt. In Reih´ und Glied
    ===============
    Aus der Schulmathematik ist vielen sicher noch der "kleine Gauß" geläufig: Der Lehrer wollte in Ruhe Zeitung lesen und stellte den Schülern daher die Aufgabe, alle Zahlen von 1 bis 100 zu addieren. Der junge Gauß bemerkte, daß 1+100=101, 2+99=101, 3+98=101,... bis 50+51 immer 101 ergab und knallte nach etwa 12 1/2 Sekunden (dramatisierte Version) seine Schiefertafel auf den Lehrertisch, angeblich mit den Worten "Ligget se!" (hdt.: Da liegt das Ergebnis!). Etwas allgemeiner formuliert lautet die Lösungsformel für derartige Probleme:
    SUM( i | i=1 to N) = (N+1)*N / 2

    Archimedes, der geniale alte Grieche, war bei der Untersuchung seiner berühmten Spirale auf ein verwandtes Problem gestoßen und hatte es folgendermaßen gelöst:
    SUM( i^2 | i=1 to N-1 ) = 1²+2²+3²+...+(n-1)² = n^3/3 - n^2/2 + n/6
    Um Vergleichbarkeit mit dem Gauß-Problem herzustellen, wollen wir die Quadrate voll bis N aufaddieren. Die Formel wird nur wenig komplizierter:
    SUM( i^2 | i=1 to n )= (n+1)^3/3-(n+1)^2/2+(n+1)/6

    Es ergibt sich nun in weiterer Folge die Frage, wie 1³+2³+3³+...+n³ formelmäßig ausgedrückt werden könnte. Nach mehreren Versuchen ergab sich dann dieser interessante Zusammenhang:
    SUM( i^3 | i=1 to N) = ( N/2*(N+1) )^2 = KleinerGauß^2

    Gruss

    P.S.: Anbei nochmal die Rechengesetze für Reihen (bzw. Teilsummen):
    Spoiler anzeigen

    SUM(x=1,n;G(x)+c) == n*c + SUM(g(x))

    SUM(x=1,n;a*G(x)) == a*SUM(g(x))

    SUM(x=1,n;a*G(x)+c) == n*c + a*SUM(g(x))

    SUM(x=1,n;G(x)+F(x))== SUM(x=1,n;G(x)) + SUM(x=1,n;F(x))


    Arithmetische Reihen:
    A(n)=n*(2*a1+(n-1)*d)/2 mit d=a2-a1

    Geometrische Reihen:
    B(n)=b1*(q^n-1)/(q-1) mit q=b2/b1


    ANWENDUNGSBEISPIELE:
    -----------------------------

    INVESTITIONSBEURTEILUNG DURCH BARWERTBERECHNUNG
    Mit Periodenzinsfaktor q=1+p%/100, Dauer = n Perioden gilt:
    * Nachschüssiger_Investitionsbarwert = NettoReturnJePeriode * (q^n-1)/(q^n*(q-1))
    Man kann aber auch den erwarteten ENDWERT zum Vergleich heranziehen:
    Investitionsendwert Ev = NettoReturnJePeriode * (q^n-1)/(q-1) = InvBarwert * q^n

    * Wenn vorschüssig:
    Ev=R*q*(q^n-1)/(q-1), Bv=R*(q^n-1)/(q^(n-1)*(q-1))
    mit En = Bn*q^n bzw. Ev=En*q, Bv = Bn*q (da 1. Periode schon zählt).

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von p. specht ()

  • Abt. Geile Schnitte
    ============
    Mit Schnitten kann man Dinge teilen - auch mathematische Dinge wie z.B.:

    Linien:
    * 1 Punkt auf einer Linie trennt diese in 2 Hälften.
    * n Punkte auf einer Linie trennen diese in n+1 Abschnitte.

    Ebenen:
    Hier sind folgende Überlegungen ausschlaggebend:
    n Linien trennen bei geeigneter Lage ein Gebiet in max. a(n) Gebiete,
    n+1 Linien trennen diese Gebiete in max. a_n+1 = a_n + (n+1) Gebiete,
    nämlich die bisherigen plus n+1 neue Gebiete! Nichtrekursiv bedeutet das:
    * Max. Anzahl der Gebiete a_n = 1 + n*(n+1)/2 = (n^2+n+2)/2

    Und wie steht es mit Teilungen des
    3D-Raumes durch Ebenen?
    * n Ebenen zerlegen den Euklidischen Raum in maximal r_n Teilräume:
    r_n+1 = r_n + a_n , wobei
    r_n= 1 + a0+a1+a2+...+a(n-1) mit a(k) = (k^2+k)/2+1, mit anderen Worten:
    r_n= 1 + SUM(k=0..n-1; a_k) = maximale Zahl an Teilräumen r,
    in die n Ebenen den 3D-Raum zerlegen. Nichtrekursiv ausgedrückt gilt dann:

    r_n = (n^3+5*n+6)/6 (Steiner-Formel)

    Gruss

    P.S.: Clever, dieser Jakob Steiner! Ihm verdanken wir auch viele weitere technisch wichtige Erkenntnisse, etwa zu Trägheitsachsen (Steinerscher Satz) oder in der Statistik (Verschiebungssatz)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

  • Abt. Programmierprojekte
    ================
    Anders als wir Hobbyisten sind EDV-Softwareschmieden gehalten, Ihre Angebote auf einer realistischen Abschätzung des erforderlichen Aufwandes basieren zu lassen (plus branchenüblicher Gewinnaufschlag). In einem engl. Youtube-Video wurde dabei folgendes 12-Schritte-Modell als Basis für die Abschätzung des nötigen Personaleinsatz-Aufwandes genommen:

    1. Beschreibung der Ausgangssituation
    2. Detaillierte Problembeschreibung
    3. Lösungsideen
    4. Lösungsauswahl, Pflichtenheft, Vertragsunterzeichnung
    5. Umsetzungskonzepte, Wahl der Sprache
    6. Zerlegung in Teilschritte/Teilprobleme
    7. Umsetzungsvariantenauswahl
    8. Programmmodule bzw. Klassen realisieren
    9. Funktionen bzw. Methoden schaffen
    10. Performance-Check bzw. nötige Maschinennähe
    11. Funktionstest bzw. Qualitätskontrolle, Nachbetreuung, Einschulung
    12. Synthese des Gesamtdesigns, Dokumentation, Rechnungsabschluß

    Klingt irgendwie logisch, setzt aber viel Erfahrung zum Zeitaufwand in den einzelnen Phasen voraus.
    Viele Hobby-Programmierer würden m.E. so manches Projekt sein lassen, gäben sie sich Rechenschaft über den tatsächlich notwendigen Aufwand... Mit anderen Worten: Gut, daß ich davon keine Ahnung habe!

    Gruss

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Abt. Reihen
    =======
    waren ein Hauptthema von Leonhard Euler, der zuerst sein rechtes Auge wegen einer Infektion verlor und einige Jahre später wegen Grauem Star (damals inoperabel) auch links sein Augenlicht verlor. Seine Produktivität, gemessen an mathematischen Veröffentlichungen, machte in der Folge einen Sprung: NACH OBEN! Schließlich hatte er die überlebenden fünf seiner 13 Kinder zu ernähren!
    Insgesamt 96 (!) wissenschaftliche Innovationen und 57 Bände mathematische Literatur verdanken wir seinem phänomenal guten Gedächtnis (Gauß z.B. kam später lediglich auf 40 mathematische Veröffentlichungen).

    Einfachstes Beispiel einer Euler´schen Produktreihe:
    SUM( log(i); i=1 to N) = log(PROD( i; i=1 to N))
    Gruss

    P.S.: Prüfprogramm anbei:

    Quellcode

    1. cls
    2. set("Numwidth",20)
    3. set("decimals",15)
    4. declare i&,n&,s!,p!
    5. print " N SUM(LN(i)) = LN(PROD(i))"
    6. whileloop 30:n&=&Loop
    7. clear s!,p!
    8. whileloop n&:i&=&Loop
    9. s!=s!+ln(i&)
    10. endwhile
    11. p!=1
    12. whileloop n&:i&=&Loop
    13. p!=p!*i&
    14. endwhile
    15. print " n=";if(n&<10," ","");trim$(str$(n&)),s!,ln(p!)
    16. endwhile
    17. waitinput
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Abt. Polynominversion
    ==============
    Durch Polynomanpassung (Polynome sind ja sozusagen das Gummi-Lineal der Mathematik) kann so manche Formel für Vorgänge in Natur, Wirtschaft und Technik gefunden werden, die zwar einen Zusammenhang beschreibt, der aber nicht kausal erklärt werden kann: Etwa wenn Börsennotierungen (Input) von Firmen mit der Anzahl freigesetzter Mitarbeiter (Output) zusammenzuhängen scheinen.

    Um mehr Erklärungskraft zu erzeugen, hilft dann manchmal Formel-Inversion, sprich: Die Umstellung der Formel nach der anderen Seite. Man versucht dadurch, die Ergebnisvariable mit der unabhängogen Variable zu vertauschen und dabei eine "Gegenformel" zu finden: Wirkt sich die Freisetzung von Mitarbeitern (Input) auf den Börsenkurs (Output) aus, weil z.B. sinkende Lohnkosten die Coupon-schneidenden Aktionäre und kurzsichtigen Spekulanten auf größere Gewinnausschüttungen hoffen lassen? Verrückte Welt...

    Anbei ein Programm zur Polynominversion im obigen Sinne.
    Gruss

    P.S.: Das Programm kann Formeln bis zum Grad 7 invertieren, der Koeffizient a1 darf dabei aber nicht Null sein!

    Brainfuck-Quellcode

    1. Windowtitle "Polynom-Inversion: Aus Y=a0+a1*X+a2*x^2+... wird X=b0+b1*Y+b2*X^2+..."
    2. Windowstyle 24:Cls '(D) Demo 2017-05 by P.Specht, Vienna/EU. No warranty whatsoever!
    3. '****************************************************
    4. '* Program to demonstrate the series reversion *
    5. '* ------------------------------------------------ *
    6. '* Reference: BASIC Scientific Subroutines, Vol. II *
    7. '* By F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1].*
    8. '* *
    9. '* F90 Version by J.-P. Moreau, Paris. *
    10. '* (www.jpmoreau.fr) *
    11. '* XProfan 11.2 Version by P.Specht, Vienna/Austria *
    12. '* ------------------------------------------------ *
    13. '* SAMPLE RUN: *
    14. '* What is the degree of the input polynomial: 3 *
    15. '* *
    16. '* Input the coefficients as prompted: *
    17. '* *
    18. '* A( 0) = 1 *
    19. '* A( 1) = 1 *
    20. '* A( 2) = 1 *
    21. '* A( 3) = 1 *
    22. '* *
    23. '* The reversed polynomial coefficients are: *
    24. '* *
    25. '* B( 0) = 9 *
    26. '* B( 1) = 1 *
    27. '* B( 2) = 0 *
    28. '* B( 3) = -1 *
    29. '* B( 4) = 0 *
    30. '* B( 5) = 3 *
    31. '* B( 6) = 0 *
    32. '* B( 7) = -12 *
    33. '* *
    34. '****************************************************
    35. Set("decimals",15)_Declare A![10],B![10],i&,n&,z!
    36. Print "\n Grad des Polynoms?: ";:Input n&
    37. Print "\n Bitte die Koeffizienten des Polynoms wie abgefragte eingeben:\n"
    38. WhileLoop 0,n&:i& = &Loop
    39. Print " a(";i&;") = ";:Input z!:A![i&]=z!
    40. EndWhile:Print
    41. Reverse_coeff(A![],B![])
    42. ::::ClearClip
    43. If A![1]<>0
    44. print " Die reversen Polynom-Koeffizienten lauten:\n"
    45. WhileLoop 0,7:i&=&Loop
    46. If Abs(B![i&]) < Val("1e-20")
    47. B![i&] = 0
    48. EndIf
    49. Print " b(";i&;") = ";Format$("%g",B![i&])
    50. ::::PutClip Format$("%g",B![i&])+","
    51. EndWhile
    52. EndIf:Print "\n OK"
    53. WaitInput:END
    54. Proc Reverse_coeff :Parameters A![],B![]
    55. '******************************************************
    56. '* Series reversion - This routine takes a polynomial *
    57. '* Y = A(0) + A(1) * X + ... and returns a polynomial *
    58. '* X = B(0) + B(1) * Y + ... A(1) must be <> 0. *
    59. '* The degree of reversion is limited to seven. *
    60. '* -------------------------------------------------- *
    61. '* Reference: CRC Standard Mathematical Tables, *
    62. '* 24th edition. *
    63. '******************************************************
    64. Declare a1!,a2!,a3!,a4!,a5!,a6!,a7!,aa!,bb!
    65. a1!=A![1]
    66. a2!=0
    67. If a1!=0
    68. print " Fehler: Division durch 0! A(1) darf nicht Null sein!":Return
    69. else
    70. B![1]=1/a1!
    71. aa!=1/a1!
    72. EndIf
    73. bb!=aa!*aa!
    74. aa!=aa!*bb!
    75. B![2]=-a2!/aa!
    76. a3!=A![3]
    77. aa!=aa!*bb!
    78. B![3]=aa!*(2*a2!*a2! - a1!*a3!)
    79. a4!=A![4]
    80. aa!=aa!*bb!
    81. B![4]=aa!*(5*a1!*a2!*a3! - a1!*a1!*a4! - 5*a2!*a2!*a2!)
    82. a5!=A![5]
    83. aa!=aa!*bb!
    84. B![5]=6*a1!*a1!*a2!*a4! + 3*a1!*a1!*a3!*a3! + 14*a2!*a2!*a2!*a2!
    85. B![5]=B![5] - a1!*a1!*a1!*a5! - 21*a1!*a2!*a2!*a3!
    86. B![5]=aa!*B![5]
    87. a6!=A![6]
    88. aa!=aa!*bb!
    89. B![6]=7*a1!*a1!*a1!*a2!*a5! + 7*a1!*a1!*a1!*a3!*a4! + 84*a1!*a2!*a2!*a2!*a3!
    90. B![6]=B![6] - a1!*a1!*a1!*a1!*a6! - 28*a1!*a1!*a2!*a2!*a4!
    91. B![6]=B![6] - 28*a1!*a1!*a2!*a3!*a3! - 42*a2!*a2!*a2!*a2!*a2!
    92. B![6]=aa!*B![6]
    93. a7!=A![7]
    94. aa!=aa!*bb!
    95. B![7]=8*a1!*a1!*a1!*a1!*a2!*a6! + 8*a1!*a1!*a1!*a1!*a3!*a5!
    96. B![7]=B![7] + 4*a1!*a1!*a1!*a1!*a4!*a4! + 120*a1!*a1!*a2!*a2!*a2!*a4!
    97. B![7]=B![7] + 180*a1!*a1!*a2!*a2!*a3!*a3! + 132*a2!*a2!*a2!*a2!*a2!*a2!
    98. B![7]=B![7] - a1!*a1!*a1!*a1!*a1!*a7! - 36*a1!*a1!*a1!*a2!*a2!*a5!
    99. B![7]=B![7] - 72*a1!*a1!*a1!*a2!*a3!*a4! - 12*a1!*a1!*a1!*a3!*a3!*a3!
    100. B![7]=B![7] - 330*a1!*a2!*a2!*a2!*a2!*a3!
    101. B![7]=aa!*B![7]
    102. B![0]=0
    103. aa!=A![0]
    104. WhileLoop 1,7:i&=&Loop
    105. B![0]=B![0] - B![i&]*aa!
    106. aa!=aa!*A![0]
    107. EndWhile
    108. EndProc
    109. ' End of file reverse.prf
    Alles anzeigen
  • Abt. Gegenwartsforschung?
    =================
    Viele Politiker denken immer noch, der Staat müsse in Konjunkturtälern Schulden machen, die er in Hockkonjunkturzeiten wieder zurückzahlt (... hat er aber nie!). Doch gegenwärtig gibt es keine identifizierbare Konjunktur-Wellen mehr (sondern -Umbrüche und -Gischt) und auch die Inflationsrate blieb lange unter 2,2 % (weil die Gehälter, anders als die Firmengewinne, seit ca. 20 Jahren netto nicht mehr steigen).

    Mit anderen Worten: Alte Modelle über Ursachen und Wirkungen stimmen nicht mehr. Nichtmal theoretisch. Auch Prof. Gunter Dueck sieht deshalb Re-orientierungsbedarf, analysiert und seziert in diesem Vortrag aber auch die Beharrungs- und Trägheitskräfte der Gesellschaft. Meine Folgerung daraus: Unsere Staatslenker brauchen keine Zukunftsforschung mehr, sondern Gegenwartsforschung!

    Gruss

    P.S.: Auch jüngere Vorträge von Herrn Dr. Dueck behandeln dieses Thema (Ok, damit oute ich mich nun endgültig als Dueck-Fan).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Abt. Kommt das Internet of Things IoT mit JSON ?
    ================================
    Es ist soweit: Das Internet der Dinge verspricht nun doch, eine heisse Sache zu werden: Vernetzung von Haushaltsgeräten, Alarmanlagen, intelligenten Kühlschränken etc. hat sachlich Vorteile, stiftet aber auch Nutzen puncto Bequemlichkeit, Komfort, Wellness - natürlich auch Prestige für die Pioniere dieser Technologie. Nachteile wie Abhängigkeit von Technologie und Elektrizität sowie ständige Überwachbarkeit von Aufenthaltsort und Tätigkeit werden von Otto Normalverbraucher vermutlich ignoriert werden.

    Darüber hinaus sind für Bastler nun auch schon empfindliche Sensoren, Mess- und Regelteile preiswert verfügbar, die via WIFI- und anderen digitalen Netzen vom echten "Home-Computer" als elektronischen Hausmeister auslesbar und fernsteuerbar sind. Zusammen mit neu aufkommenden Internetdiensten, die Daten in computerlesbarer Form (via XML oder JSON) zur Verfügung stellen, ergeben sich neue Automatisierungs- und Einsatzmöglichkeiten:

    * Lichtsteuerung, Pflanzenbewässerung, Beschattung, Rolladensteuerung,
    * Logistik bis hin zur Schnäppchenjagd,
    * "Nie wieder Hochzeitstag vergessen samt automatischer Geschenk-Beschaffung" bis zu
    * echten Sicherheitsanwendungen mit automatischem Polizei-, Rettungs- oder Feuerwehrnotruf,
    * Heimkontrolle via netfähiger Kamera per Handy, Seniorenalarm bei Nichtbewegung, ...
    * Garagentorfernsteuerung, Heizungskontrolle selbst von anderen Kontinenten aus,
    * Tourenplanung mit öffentlichen Verkehrsmitteln, mit Minutencountdown ...
    * Gesundheitsüberwachung, Sport nach anerkannten Trainingsprogrammen, Lehren und Lernen,
    * ... und das wird noch lange nicht alles sein, denkbar sind z.B. neue Dienste wie Einholung meiiner Einkaufsrechnungen in maschinenlesebarer Form (via e-mail?) für die persönliche Finanzübersicht.

    Alle Bausteine dazu stehen nun preiswert zur Verfügung, wie der interessanten Youtube-Serie (engl.) eines Schweizer Bastlers zu entnehmen ist.
    Gruss

    P.S.: Das sollte keine Werbung für XProfan X4 und dessen JSON-Fähigleit sein, aber für diese kommende Welt ist man damit jedenfalls gut vorbereitet!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von p. specht ()

  • Abt. Berühmte mathematische Formel- und Tabellensammlung
    =======================================
    Die Chemical Rubber Coproration CRC aus Cleveland, Ohio war und ist berühmt für ihre übersichtlich gegliederte Formelsammlung, die seit 1964 herausgegeben wird. Während der Letztstand zwar schon in 31ster Auflage vorliegt, erhalten dieses Werk nur ausgesucht gute Kunden. Eine 634-seitige Ausgabe (21. Auflage) als pdf im Internet zu finden ist deshalb geradezu sensationell.

    Gruss
  • Abt. Explizite Formeln für Exponentialreihen
    ============================
    In Beitrag 42 weiter oben war ich doch recht stolz, die explizite Formel für die Summe von
    1^3+2^3+3^3+...+n^3 als Quadrat der Gaußschen Summenformel gefunden zu haben.
    In der Mathematik (geistiger Höchstleistungssport) sollte man als Normalo heutzutage mit Sicherheit nicht mehr an eigene "mathematische Erstbesteigungen" glauben - die Enttäuschung folgt sonst auf dem Fuße. So erging es auch mir: Herr Festungsbaumeister Johannes Faulhaber kam mir ein bisschen zuvor und hat dieses Problem in ganz allgemeiner Form schon A.D. 1598 (!) gelöst:

    Die FAULHABERsche FORMEL lautet: Die SUMME aller (i=0..N mit i^k) =
    1/(k+1)*SUMME(j=0..k: Binomial(k+1 über j )*(j.te Bernoullizahl)*n^(k+1−j)

    Gruss

    P.S.: Dazu im Spoiler die expliziten Werte bis zur 12. Potenz in Freeprofan-geeigneter Form
    Spoiler anzeigen
    1^0+2^0+3^0+...+n^0 = n
    1^1+2^1+3^1+...+n^1 = 1/2*n^2+1/2*n (Gaußsche Summenformel)
    1^2+2^2+3^2+...+n^2 = 1/3*n^3+1/2*n^2+1/6*n (Quadratische Pyramidalzahl)
    1^3+2^3+3^3+...+n^3 = 1/4*n^4+1/2*n^3+1/4*n^2 (Quadrat der Summe der ersten n Zahlen)
    1^4+2^4+3^4+...+n^4 = 1/5*n^5+1/2*n^4+1/3*n^3−1/30*n
    1^5+2^5+3^5+...+n^5 = 1/6*n^6+1/2*n^5+5/12*n^4−1/12*n^2
    1^6+2^6+3^6+...+n^6 = 1/7*n^7+1/2*n^6+1/2*n^5−1/6*n^3+1/42*n
    1^7+2^7+3^7+...+n^7 = 1/8*n^8+1/2*n^7+7/12*n^6−7/24*n^4+1/12*n^2
    1^8+2^8+3^8+...+n^8 = 1/9*n^9+1/2*n^8+2/3*n^7−7/15*n^5+2/9*n^3−1/30*n
    1^9+2^9+3^9+...+n^9 = 1/10*n^10+1/2*n^9+3/4*n^8−7/10*n^6+1/2*n^4−3/20*n^2
    1^10+2^10+3^10+...+n^10 = 1/11*n^11+1/2*n^10+5/6*n^9−n^7+n^5-1/2*n^3+5/66*n
    1^11+2^11+3^11+...+n^11 = 1/12*n^12+1/2*n^11+11/12*n^10−11/8*n^8+11/6*n^6−11/8*n^4+5/12*n^2
    1^12+2^12+3^12+...+n^12 = 1/13*n^13+1/2*n^12+n^11−11/6*n^9+22/7*n^7−33/10*n^5+5/3*n^3−691/2730*n

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Abt. Höhere Programmierparadigmen
    =======================
    (Auszug aus den Mitschriften zu einem Youtube-Vortrag)

    Thema "Use Cases" (Business rules)

    Beispiele für problemspezifische Anwendungsschemata
    ------------------------------------------------------------
    Auftragsannahme (Programmiert als Device-Independent Business rule)

    Daten:
    - kundenID
    - - Kunden-Kontaktinfo
    - Lieferadresse
    - Versandart
    - Zahlungsinformationen

    Erst-Abfolge:
    - Verkaufsinnendienst startet Auftrag und gibt obige Daten ein
    - Das System überprüft alle Eingaben
    - System schafft Auftragsschein und vergibt AuftragsID
    - System exekutiert Auftrag via Zuständige Stellen

    Ausnahmevorgänge:
    z.B: Datenvalidierungsfehler
    - System zeigt Fehler an
    - - und bietet Verbesserungsmöglichkeit
    - - oder Vorgangsabbruch an.

    Gegenbeispiel, wann Datenisolierung nicht möglich ist:
    ----------------
    "Auftragsabwicklung" ist als Business rule notwendigerweise Process- and Device-dependent

    Gruss
  • Abt. Bernoulli-Zahlen
    =============
    In Beitrag 50 kommen die sog. Bernoulli-Zahlen (gesprochen ´Bernui´) vor. Die Familie Bernoulli stammte ursprüngliche aus den Niederlanden und wanderte via Frankfurt am Main schließlich nach Basel in der Schweiz ein. Sie brachte vom 17. Jahrhundert an bis heute begabte Mathematiker, Physiker und Wissenschaftler hervor.

    Die Entdeckung der Bernoulli-Zahlen um ca. 1703 (veröffentlicht erst 1713, also 8 Jahre nach seinem Ableben) verdanken wir Jakob (I.) Bernoulli. Anlaß war tatsächlich das in Beitrag 50 geschilderte Problem, allerdings findet sich die Hauptanwendung der Bernoulli-Zahlen heute in der sog. Euler-MacLaurin-Formel, die eine numerische Approximation des "Bestimmten Integrals" durch Einsetzen der Ableitung an den Integrationsgrenzen erlaubt.

    Anbei ein Programm zur Berechnung dieser Zahlenwerte bis zur 28. Bernoullizahl.

    Gruss

    P.S.: Eines der ersten Programme der Welt beschäftigte sich mit der Berechnung dieser Bernoulli-Zahlen. Es stammte 1843 aus einer Veröffentlichung von Lady Ada Lovelace, der ersten Programmiererin der Welt, und war für den ersten echten (Turing-mächtigen) Computer der Welt gedacht, die Analytical Engine von Charles Babbage (... leider nie fertiggestellt).

    Brainfuck-Quellcode

    1. WindowTitle "Die BERNOULLI-ZAHLEN bis B_28 berechnen":WindowStyle 24:CLS
    2. Set("decimals",17)
    3. '*********************************************************************
    4. '* This program computes Bernoulli number Bn using subroutine BERNOA *
    5. '* ----------------------------------------------------------------- *
    6. '* SAMPLE RUN: *
    7. '* *
    8. '* Compute Bernoulli number Bn for n = 0,1,...,10. *
    9. '* *
    10. '* Please enter Nmax: 10 *
    11. '* *
    12. '* n Bn *
    13. '* -------------------------- *
    14. '* 0 0.100000000000D+01 *
    15. '* 1 -0.500000000000D+00 *
    16. '* 2 0.166666666667D+00 *
    17. '* 4 -0.333333333333D-01 *
    18. '* 6 0.238095238095D-01 *
    19. '* 8 -0.333333333333D-01 *
    20. '* 10 0.757575757576D-01 *
    21. '* -------------------------- *
    22. '* *
    23. '* ----------------------------------------------------------------- *
    24. '* REFERENCE: "Fortran Routines for Computation of Special Functions,*
    25. '* jin.ece.uiuc.edu/routines/routines.html". *
    26. '* F90 Release By J-P Moreau, Paris. *
    27. '* (www.jpmoreau.fr) *
    28. '* *
    29. '* XProfan 11.2a-Version by P.Specht, Vienna/Austria *
    30. '* No warranty whatsoever! *
    31. '*********************************************************************
    32. ' PROGRAM MBERNOA
    33. Declare B![200],n&,k&
    34. Print
    35. nochma:
    36. Print "\n Bitte Nmax eingeben: ";:Input N&
    37. If n&>29:Print " Zu groß!":goto "nochma":endif
    38. BERNOA(N&,B![])
    39. Print "\n n Bn "
    40. Print "---------------------------"
    41. Print " ";0,Tab(11);Format$("%g",B![0])
    42. Print " ";1,Tab(11);Format$("%g",B![1])
    43. WhileLoop 2,N&,2:k&=&Loop
    44. Print " ";k&,Tab(11);Format$("%g",B![k&])
    45. EndWhile
    46. Print "---------------------------"
    47. WaitInput
    48. END
    49. Proc BERNOA :Parameters N&,BN![]
    50. ' ======================================
    51. ' Purpose: Compute Bernoulli number Bn
    52. ' Input : n --- Serial number
    53. ' Output: BN(n) --- Bn
    54. ' ======================================
    55. ' IMPLICIT DOUBLE PRECISION (A-H,O-Z)
    56. Declare S!,R!,j&,k&,m&
    57. BN![0]=1
    58. BN![1]=-0.5
    59. WhileLoop 2,n&:m&=&Loop
    60. S!=-(1.0e0/(M&+1)-0.5)
    61. WhileLoop 2,M&-1:k&=&Loop
    62. R!=1
    63. WhileLoop 2,K&:j&=&Loop
    64. R!=R!*(J&+M&-K&)/J&
    65. EndWhile
    66. S!=S!-R!*BN![K&]
    67. EndWhile
    68. BN![M&]=S!
    69. EndWhile
    70. WhileLoop 3,N&,2:m&=&Loop
    71. BN![M&]=0
    72. EndWhile
    73. Return
    74. EndProc
    75. ' end of file mbernoa.prf
    Alles anzeigen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von p. specht ()

  • Abt. Zukunftsfeste Aus- und Weiterbildung
    ===========================
    Umbrüche fordern Opfer. Den gehorsamen Anweisungsausführer von Standardprozessen wird es in Kürze nicht mehr geben. Beispiel: Jobabbau bei Banken und Ersatz der Ein- und Auszahlungs-Funktionen von Bankkassieren durch Automaten. Und alles was man auch googlen kann erfordert in Zukunft keine menschlichen Berater mehr, die mit standardisierten Frage-Antwortspielen individuelle Spar- und Investitionspläne erarbeiten: Prof Dr. Gunter Dueck nennt diese "Flachbildschirm-Rückseitenberater". Er forderte schon 2011 konsequent ein neues Bildungssystem, das experimentier- und innovationsfreudige Charaktere zum Bildungsideal macht (Youtube-Link).
    Gruss

    P.S. (Meinung:) Die Produktionsmittel konzentrieren sich also noch mehr auf wenige Unternehmen. Wird wohl Zeit, a la long die 20-Stundenwoche zu fordern, soll es nicht zur Armutsfalle für fast alle kommen... Wer dagegen ist, kann ja sein christliches Gewissen erforschen und unbezahlt mehrarbeiten...

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von p. specht ()

  • Abt. Gültigkeit von JSON-Datenstrukturen
    ==========================
    kann man auf der Internetseite jsonlint.com/ per copy & paste überprüfen lassen. Selbstverständlich nicht mit Echtdaten, da vermutlich Namen und mail-Adressen gesammelt werden - wie immer bei Gratis-Services. Auch die Feldnamen könnten für Betriebsspionage ganz interessant sein, was bei privaten Anwendungen aber vermutlich nicht ins Gewicht fällt. Ein deutsches Tutorial ist auch verfügbar.

    Gruss

    P.S. - Mein Kommentar: Zum üben ganz gut...
  • Internet-Prognose 2017
    ===============
    Ausgangsbasis: 3.4 Milliarden Internetuser bei 10% Wachstum / Jahr
    Trends:
    1. Solides Smartphone-Wachstum, wird aber langsamer (10% gegenüber 20% p.a.)
    2. Online-Werbung wird Onlineshop, bereits messbar, noch leichter handhabbar
    3. Interaktive Spiele stellen eine Lawine von Produktinnovationen bereit und
    __ werden die Basis für moderne Aus- und Weiterbildungssysteme (Webinars, MOOC etc)
    4. Medien wie Videos, Musik-& Spiele-DVDs, Bücher etc erfahren weitere Verkaufseinbrüche
    __ Statt dessen wachsen Bezahl-Streamingdienste wie Spotify (+9%)
    5. Das Chinesische Internet wird Basis weltweiter Unterhaltung und Inhaltsübermittlung
    __ (US capital fonds investieren dort kräftig)
    6. Das Indische Internet entwickelt starke Konkurrenz zum Nutzen der Konsumenten
    7. Es entstehen Crowdfinanzierte Public-Private Partnership-Unternehmen
    8. Großflächig entstehen Data-Centers weltweit.
    9. Das Gesundheitswesen profitiert als erstes vom den Durchbrüchen bei KI
    10. Weltweite BranchenClouds erlauben firmenübergreifende Just-in-time Supply-Chains

    Gruss

    P.S.: Quelle: Mehrere U.S.-Youtubevorträge
  • Abt. Nichtganzzahlige Ableitungen
    =========================
    Den Anstieg ZWISCHEN zwei Punkten zu definieren ist leicht: Um wieviel ändert sich die Höhe h, wenn ich z.B. eine Einheit (z.B. einen Meter) nach rechts (oder links) gehe: Anstieg = (h2 - h1)/(x2-x1). Komplizierter wird die Sache, wenn man den Anstieg in einem EINZIGEN Punkt definieren will: x2 = x1 bedeutet ja Division durch Null, und das geht bekanntlich nicht.

    Leibnitz und Newton sei Dank - wissen wir doch aus der Schule, was eine Ableitung an der Stelle x einer Funktion f(x) ist. Die Lösung für das EIN-Punkt-Problem bei der Suche des Anstieges lautet also: Die Ableitung einer Funktion y=f(x) nach der x-Achse ist dy/dx (de-ypsilon nach de-ix), und bei den meisten Funktionen folgt sie einfachen, relativ leicht zu merkenden Umwandlungsregeln, die man auf die betrachtete Funktion anwendet. Anm.: Es gibt kompliziertere Funktionen, die haben z.B. komplexe Ableitungen. Mache Funktionen haben garkeine oder sie bleibt undefiniert (Anstieg an einem Kantenpunkt beispielsweise).

    Bei vielen Funktionen lassen sich auch Ableitungen von Ableitungen bilden: Die erste Ableitung des Ortes nach der Zeit ist z.B. die Geschwindigkeit, die zweite Ableitung (die Änderung der Geschwindigkeit nach der Zeit) gibt die Beschleunigung an usw. usw. Wir kennen dann die 1., 2., 3. Ableitung usw., also die meisten ganzzahligen Ableitungen.

    Ein relativ neuer Zweig der Mathematik beschäftigt sich nun mit der Frage, ob es auch gebrochenzahlige Ableitungen (Youtube: "Fractional calculus") gibt! Was wäre denn z.B. die 2 1/2 -te Ableitung von y=x^4?

    Auch für gebrochenzahlige Ableitungen gibt es reale Anwendungsfälle: Sie erlauben beispielsweise in der Steuer- und Regeltechnik, die Ausregelzeit bei Störungen zu minimieren, ohne daß Sollwerte überregelt werden (Gefahr bei Störgrößenaufschaltung) oder aber nicht so richtig erreicht werden. Forscher bilden damit auch Modelle des Verhaltens von Menschenansammlungen in Panik-geneigten Situationen, tragen so zur Sicherheit bei.

    Aber wie berechnen? Dazu mußte man sich genauer ansehen, wie eigentlich aus der Zweipunkt-Anstiegsformel die Einpunkt-Anstiegsformeln folgen. Man erhält diese durch einen Grenzwert-Übergang (Limes, lim), wenn die Differenz zwischen x2 und x1 -siehe oben- gegen Null geht. Die n.te Ableitung einer Funktion ergibt sich dann zu:

    d^n(f(x))/dx^n = lim(eps>>>0;{1/eps^2*SUM(j=0..n; (-1)^j * BinCoeff(n,j)*(x-j*eps))}

    Für ganzzahlige Ableitungen liefert diese Formel die selben Ergebnisse wie die nach Ableitungsregeln ermittelten. Aus der vorstehenden Formel sehen wir aber: Wir brauchen offenbar gebrochenzahlige Binärkoeffizienten! Gibt es die?
    Ja, weil es n! auch für nichtganze n gibt: Die sog. Gamma-Funktion. Daraus folgt z.B. für n = -1/2: T_(1/2)=sqrt(pi())
    bzw. für beliebige n: T_(n). An ganzzahligen Stellen stimmt T_(n) mit (n-1)! überein, ansonsten sind diese Werte tabelliert. Folglich lässt sich auch ein gebrochener Binärkoeffizient errechnen: Statt Bincoeff(n über j) schreiben wir T_(z+1)/T_(z+1-j) mit z aus |R. Daher wird aus der iterativen obigen Formel nun für die z. Ableitung:

    d^z(f(x))/dx^z = Limes(eps>>>0; {1/eps^z*SUM[j=0..abs((x-x0)/eps); T_(z+1)/(j!*T_(z+1-j)) * f(x-j*eps) ]}

    und die Sache ist bestmöglich geregelt. Die Formel wird uns z.B. in fahrerlosen Autos begegnen, erlaubt sie doch noch schnellere Reaktionen als alle klassischen Regelkreise!

    Gruss

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Abt. Wunderzahlen
    ============
    13*53^2*3853*96179=
    13.532.385.396.179
    ...gefunden von James David (kein Mathematiker) in einem Wettbewerb. Preisgeld: 1000 $ !
    Das Beispiel widerlegt eine Hypothese von J.H.Conway (u.a. Erfinder des Spiels LIFE) , dass sukzessives Primfaktorzerlegen mit anschließendem "Herabziehen" stets in einer einzigen großen Primzahl endet.

    Oder:

    Hier eine Formel (gefunden von Richard Savey in 2004), die jeweils alle Ziffern von 1 bis 9 enthält:
    (1+9^-4^(6*7))^3^2^85 = exp(1), - die Eulersche Zahl, Basis des natürlichen Logarithmus, auf die unglaubliche Genauigkeit von 18.457.734.525.360.901.453.873.569 Kommastellen genau! (Achtung, XProfan braucht bei Hoch-Zahlen hoch Zahlen Klammerung, um die mathematisch richtige Berechnungsreihenfolge sicherzustellen!)
    Gruss

    P.S.: Normalos können also doch noch was Neues finden! Quelle: Youtube

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von p. specht ()

  • Abt. Partitionen zählen
    ==============
    Anbei ein rekursives Zählprogramm für die Anzahl möglicher Zerschnipselungen (="Partitionen") eines N Einheiten langen Stabes (="Anordnung von Elementen") in Teilstrecken der Länge von 1 bis maximal M (= "Klassen bis Klassengröße M").
    Gruss

    Quellcode

    1. WindowTitle "Teilungsmöglichkeiten zählen":WindowStyle 24:cls
    2. Print "\n Dieses Programm zählt die möglichen Teilungen von N Elementen"
    3. print "\n für zulässige Teilungsgrößen von 1 bis M Elementen.\n"
    4. declare n&,m&,count!
    5. nochmal:
    6. clear n&,m&,count!
    7. print "\n Gesamtlänge N = ";:input n&
    8. print "\n Max. Teillänge M = ";:input m&
    9. print "\n Count ergibt ";format$("%g",Count_partitions(n&,m&));" mögliche Teilungen!\n"
    10. waitinput:cls:goto "nochmal"
    11. proc count_partitions :parameters n&,m&
    12. if n&=0:return 1
    13. elseif n&<0:return 0
    14. elseif m&=0:return 0
    15. else
    16. return count_partitions(n&-m&,m&)+count_partitions(n&,m&-1)
    17. endif
    18. Endproc
    Alles anzeigen
    P.S. Probe: count(6,4) sollte 9 ergeben:

    6 = 2 + 4
    6 = 1 + 1 + 4
    6 = 3 + 3

    6 = 1 + 2 + 3
    6 = 1 + 1 + 1 + 3
    6 = 2 + 2 + 2

    6 = 1 + 1 + 2 + 2
    6 = 1 + 1 + 1 + 1 + 2
    6 = 1 + 1 + 1 + 1 + 1 + 1

    ... stimmt also!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von p. specht ()