ALGORITHMEN TEIL XI: Genaue Planung ersetzt Zufall durch Irrtum

    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.

    • Der Quellcode sieht dann aber sehr kryptisch aus.
      Wenn man als Weinigprogrammierer dann nach
      acht oder vierzehn Tagen wieder auf seinen Code
      schaut, muß man zuerst wieder die .ph Datei
      kontaktieren, damit man weiß, was T, CM, P usw.
      bedeutet.

      Naja, wer es so möchte.

      Ansonsten gute Idee.
    • Hm stimmt, Heinz!
      Das bringt mich aber zur nächsten Frage:
      Gibt es eine Möglichkeit, den Quelltext nach vollständiger Substitution der "~"-Ausdrücke einzusehen bzw. sogar abzuspeichern? ~P ~F etc. wären dann nur als Eingabehilfe zu verstehen...
      Gruss

      P.S.: Die Idee mit Kürzeln als Befehl wurde schon bei Commodore verwendet. So wurde dort u.a.´?´ zu ´PRINT´ etc. etc.
    • Abt. Print-Font checken
      ===============
      Ärgerlich, wenn man deutsche Texte mit Umlauten korrekt wiedergeben will, und dann passt der Print-Font nicht. Damit das nicht nochmal passiert, kann man das nun mit beiliegendem Machwerk sofort prüfen. Naja ...
      Gruss

      Quellcode

      1. Cls:declare ä$,ö$,ü$,ß$,§$,Ä_$,Ö_$,Ü_$,ß_$
      2. ä$="ä":Ä_$="Ä":ö$="ö":Ö_$="Ö":ü$="ü"
      3. Ü_$="Ü":ß$="ß":ß_$="SS":§$="§"
      4. font 2:Print "\n\n Passenden Font prüfen:"
      5. font 0:Print "\n\n Font 0: ";ä_$,ö_$,ü_$,ä$,ö$,ü$,ß$,ß_$,§$
      6. font 2:Print "\n Font 2: ";ä_$,ö_$,ü_$,ä$,ö$,ü$,ß$,ß_$,§$
      7. font 1:Print "\n Font 1: ";ä_$,ö_$,ü_$,ä$,ö$,ü$,ß$,ß_$,§$
      8. Waitinput
    • Marc Bonus schrieb:

      Kennt ihr schon die Formel 0-0=0? Das ist die Formel des Lebens. Man kommt mit Nichts und geht mit Nichts.

      Es bleibt nur die Erinnerung. Manche Esoteriker meinen die Zeitspur wird holographisch in einer Kugel 20 cm über dem Körper gespeichert. Ein Wesen das das lesen kann sieht dort alle Einzelheiten aus allen deinen Inkarnationen.
      Also alle dort abgespeicherten Nullen. Durchgezählt erkennt man dann wenigstens die Anzahl der Inkarnationen. Ich glaub' da kann ich mit leben...
      Programmieren, das spannendste Detektivspiel der Welt.
    • Michael Wodrich schrieb:

      Marc Bonus schrieb:

      Kennt ihr schon die Formel 0-0=0? Das ist die Formel des Lebens. Man kommt mit Nichts und geht mit Nichts.

      Es bleibt nur die Erinnerung. Manche Esoteriker meinen die Zeitspur wird holographisch in einer Kugel 20 cm über dem Körper gespeichert. Ein Wesen das das lesen kann sieht dort alle Einzelheiten aus allen deinen Inkarnationen.
      Also alle dort abgespeicherten Nullen. Durchgezählt erkennt man dann wenigstens die Anzahl der Inkarnationen. Ich glaub' da kann ich mit leben...
      Im Christentum heißt ja auch die Seele lebt fort nach dem Tod. Wo sie allerdings vor der Geburt war, da schweigt sie sich aus.
    • Marc Bonus schrieb:

      Michael Wodrich schrieb:

      Marc Bonus schrieb:

      Kennt ihr schon die Formel 0-0=0? Das ist die Formel des Lebens. Man kommt mit Nichts und geht mit Nichts.

      Es bleibt nur die Erinnerung. Manche Esoteriker meinen die Zeitspur wird holographisch in einer Kugel 20 cm über dem Körper gespeichert. Ein Wesen das das lesen kann sieht dort alle Einzelheiten aus allen deinen Inkarnationen.
      Also alle dort abgespeicherten Nullen. Durchgezählt erkennt man dann wenigstens die Anzahl der Inkarnationen. Ich glaub' da kann ich mit leben...
      Im Christentum heißt ja auch die Seele lebt fort nach dem Tod. Wo sie allerdings vor der Geburt war, da schweigt sie sich aus.
      Das ist wie mit Profan-Programmen: Sie werden irgendwann geschaffen, arbeiten einige Zeit und enden schließlich irgendwo als externes Backup. Wenn dieser externe Speicher nicht mehr zugreifbar ist, beginnt das Spiel (von der guten Idee zum Programm) von neuem. Re-inkarnation!
    • Abt. Latein für Aufhörer
      ===============
      Headerdateien sind dazu da, Kurzformen durch Detailformen zu ersetzen. Etwas Ähnliches gibt es auch in der Sprache: In fast jeder Fachliteratur findet man Abkürzungen, die aus dem Lateinischen stammen. Bevor noch alle ausgestorben sind, die man fragen könnte was sie bedeuten, hier eine kurze Erklärung:

      e.g. ... exempli gratia ("dankenswerte\s Beispiel\e:")
      i.e. ... id est (that is, "soll heissen:")
      etc. ... et cetera ("und dergleichen")
      et al. ...et alii, et aliae oder et alia, ist Lateinisch und bedeutet wortwörtlich "unter anderen", i.S. (im Sinne) von "eine(r) unter vielen","als eine(r) von mehrerern". Das entspricht dann in etwa dem deutschen Kürzel "u.a." (unter anderem), "u.v.a." (unter vielen anderen) oder sogar
      "u.v.a.m." (und viele andere mehr)
      q.e.d. ... quod erat demonstrandum, deutsch: "Was zu beweisen war", "Was hiermit bewiesen ist.". Die Eindeutschung davon: w.z.z.w. oder seltener wzzw: "...was ja zu zeigen war!"
      etc. pp. ... "et cetera, perge, perge": Und so weiter und so fort ..., gerne eingedeutscht als "usw."
      dt. ... ", zu deutsch:", "heißt auf Deutsch:"
      a.Chr.n. ... ante Christum natum: ... (Jahre) vor Christi Geburt
      Christos ... "Der mit hl. Ölen Gesalbte"
      hl. ... heilig(-e/-r)
      A.D. ... anno domini ("Im Jahre unseres Herrn, des Christus)
      c.p. ... ceteris paribus ("unter sonst gleichen Bedingungen"), das Gegenteil davon wäre:
      m.m. ... mutatis mutandis ("unter Realbedingungen, wenn also alles was sich ändern könnte, frei ist sich auch zu ändern)

      Weitere detaillierte Angaben finden sich bei Interesse HIER!
      Gruss

      P.S.: In Vorlesungsverzeichnissen finden sich oft folgende Abkürzungen bei Zeitangaben:
      s.t. ... sine tempore (ohne "akademische Viertelstunde")
      c.t. ... cum tempore (eine Viertelstunde später kommt auch der Vortragende, weil er in der Zwischenzeit am Gang einen Kollegen getroffen und sich daher verplaudert hat, weil es im Lehrbetrieb ohnehin die einzige Möglichkeit ist, noch tatsächlich ein bisschen "Wissenschaft" zu machen)
      pps.: P.S. ... post scriptum ("Nachsatz")
      P³s.: pps. ... post post scriptum (i.S.v. "und nochwas:")
      i.S.v.: im Sinne von ... (dt.)
      fin ... (Finis, in alten Filmen am Abspann: engl.: finished, gerne auch als "The End" markiert: ENDE)

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

    • Abt. Quatsch
      ---------------
      Also irgendwie will es bei nachstehendem Quatschprogramm mit der Grammatik nicht klappen. Dennoch erinnern manche Aussagen fatal an Zeitungsüberschriften der letzen Zeit. Bitte nicht allzu sehr ärgern. Verbesserungsvorschläge hinsichtlich Satzstellung bitte in Form von Profan-Programmen!
      Gruss

      P.S.: Man sagt, wenn man 100 Affen sinnlos unendlich lange in 100 Laptops schreiben läßt, kommt irgendwann ein Werk von Göthe dabei heraus. Für das folgende Programm reichte ein Affe!

      Quellcode

      1. WindowTitle "Zeitungsquatsch":WindowStyle 24
      2. Window 0,0-%maxx,%maxy:cls:showmax
      3. var Q$="Taskforce,stehen vor der Tür,aller Zeiten,teure Preise,"+\
      4. "Countdown läuft,zeitnah,im Vorfeld,für Groß und Klein,"+\
      5. "auf einem guten Weg,Kartenhäuser,Tote gefordert,verheerend,"+\
      6. "kaum zu glauben,grünes Licht,zurückrudern,wer kennt das nicht,"+\
      7. "kein Einzelfall,warme Temperaturen,Nachbessern,schlagen Alarm,"+\
      8. "Geisterfahrer,zeitgleich,Sinn machen,Paukenschlag,"+\
      9. "zunächst unklar,Hochtouren,geschockt,alternativlos,"+\
      10. "Thermometer steigt,Zeit umstellen,vor Gericht verantworten,"+\
      11. "vorprogrammiert,mit voller Härte,auf dem Vormarsch,"+\
      12. "es kann nicht sein,Überfremdung,Luft nach oben,"+\
      13. "in Startlöchern stehen,auf offener Straße,Hochdruck,"+\
      14. "Menschen evakuiert,Sex-Täter,Datendiebstahl,Gewinnwarnung,"+\
      15. "nicht schlecht staunte,explodierende Kosten,Gutmensch,"+\
      16. "Abstellgleis,fieberhaft,Wetterchaos,an einem Strang ziehen,"+\
      17. "Wahlschlappe,Sünder,am Ende des Tages,Blutbad,durchgewinkt,"+\
      18. "Preisbremse,Weichen stellen,abgesegnet,frisches Geld,"+\
      19. "rote Linie,am helllichten Tag,klickten die Handschellen,"+\
      20. "reißt nicht ab,kalte Temperaturen,ein Stück weit,liegt auf Eis,"+\
      21. "wie durch ein Wunder,sozial schwach,Homo-Ehe,wichtig und richtig,"+\
      22. "Quantensprung,Spirale der Gewalt,sozialverträglich,"+\
      23. "teilweise verletzt,fit machen für,Überwiegende Mehrheit,"+\
      24. "guter Tag für,sagte gegenüber,Schock sitzt tief,Urnengang,"+\
      25. "neue Innovation,Notfahrplan,bis auf die Grundmauern,Luftschläge,"+\
      26. "Personalkarussell,aufs Tempo drücken,Nerven liegen blank,"+\
      27. "Zukunftsprognose,aus dem Fenster lehnen,jetzt ist es raus,"+\
      28. "traurige Gewissheit,Geld in die Hand nehmen,tragischer Tod,"+\
      29. "an den Rollstuhl gefesselt,Flüchtlingsansturm,Gesundheitsprävention,"+\
      30. "Das Boot ist voll,Muskelspiel,Multijobber,Prostitutionsschutzgesetz,"+\
      31. "Wahldebakel,schmerzhafte Einschnitte,in die Kassen spülen,schwere Verwüstung,"+\
      32. "Sex-Vorwürfe,Lücke,Kraut gewachsen,Sozialromantiker,Todeskandidat,"+\
      33. "Asylkritiker,integrationsunwillig,auseinanderdividieren,"+\
      34. "Integrationsverweigerer,Sozialtourismus,sintflutartiger Regen,"+\
      35. "Asylgegner,Lage eskaliert,mehrköpfige Familie,Rassenkonflikt,"+\
      36. "billiger Populismus,brutaler Mord,schlechter Tag für,"+\
      37. "hermetisch abgeriegelt,erdrutschartig,menschliche Katastrophe,"+\
      38. "protestiert für,Vorankündigung,Stuhl wackelt,angebliche Bilder,"+\
      39. "Überfremdungsbefürworter,Nacht hell erleuchtet,zentrale Eckpunkte,"+\
      40. "Thermometer fällt,raumfremde Menschen,es fällt Neuschnee,"+\
      41. "unschuldige Frauen,wie Strohhalme,Rotationseuropäer,"+\
      42. "illegale Flüchtlinge,Flüchtlingslücke,zusammenaddieren,"+\
      43. "regelrecht hingerichtet,Passdeutsche,Flüchtlingstsunami,"+\
      44. "nicht unweit,grundrechtsschonend,positiver Erfolg,"+\
      45. "Flüchtlingssaison,Einfallsrouten,anbetrifft,Bootsmigrant,"+\
      46. "Durchmarschsieg,TOP-Wachstum," +\
      47. "Floskeln gedroschen,ins Verhältnis zueinander gesetzt,"+\
      48. "auf einem guten Weg,Kartenhäuser,im Vorfeld,grünes Licht,"+\
      49. "schlagen Alarm,mit voller Härte,nachbessern,kein Einzelfall,"+\
      50. "Überfremdung,Gewinnwarnung,Datendiebstahl,Paukenschlag,"+\
      51. "auf offener Straße,durchgewinkt,auf Hochtouren,Luft nach oben"
      52. var S$="Menschen,Autos,Häuser,Leute,Stabmixer,Straßenlampen"
      53. var T$="sind,waren,wären,können,könnten,haben,hätten,würden gerne"
      54. declare TXT$:usefont "Arial",100,20,0,0,0
      55. Randomize
      56. Repeat
      57. TextColor @RGB(0,0,0),-1
      58. TXT$=substr$(Q$,1+rnd(138),",")
      59. Txt$=upper$(left$(Txt$,1)) + right$(txt$,len(txt$)-1)
      60. TXT$=Txt$+" "+substr$(S$,1+rnd(6),",")+" "+\
      61. substr$(T$,1+rnd(8),",")+" "+\
      62. substr$(Q$,1+rnd(138),",")+\
      63. substr$("!,?,.",1+rnd(3),",")
      64. DrawText 123,167,TXT$
      65. waitinput 2000
      66. cls
      67. until 0
      Alles anzeigen

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

    • Abt. Schon wieder falsch
      ===============
      Da lagen die Auguren offenbar schon wieder falsch: Nach der Trump-Wahl war prognostiziert, daß alle Welt in Gold flüchten würde. So mancher Händler rieb sich schon die Hände. Tja, es sieht derzeit jedenfalls nicht so aus, als würde diese Rechnung aufgehen - aber bekanntlich gilt: Nix genaues weiß man nicht. Prognosen sind bekanntlich besonders schwer, wenn sie die Zukunft betreffen...
      Gruss

      Quellcode

      1. WindowTitle "Goldpreisvertonung 4.1.-25.11.2016 (Trump-Wahl 9.11.2016)"
      2. WindowStyle 24:window 0,0-%maxx,%maxy:showmax:color 14,1:font 2
      3. var D$="1120,1121,1121,1125,1123,1143,1141,1144,1142,1143,1142,1135,1147,1148,"+\
      4. "1148,1144,1144,1138,1132,1136,1137,1154,1166,1175, Trump-Wahl ,1170,1176,1160,1162,"+\
      5. "1161,1162,1172,1172,1173,1165,1173,1169,1167,1167,1162,1163,1164,1160,"+\
      6. "1160,1162,1162,1166,1168,1165,1163,1163,1164,1160,1161,1156,1156,1154,"+\
      7. "1146,1145,1140,1139,1136,1140,1142,1141,1138,1139,1131,1130,1129,1129,"+\
      8. "1124,1127,1122,1131,1133,1134,1150,1172,1170,1173,1179,1187,1175,1177,"+\
      9. "1179,1181,1183,1187,1190,1188,1193,1192,1189,1186,1190,1183,1175,1175,"+\
      10. "1176,1177,1170,1170,1167,1174,1177,1177,1178,1183,1179,1182,1187,1184,"+\
      11. "1190,1195,1198,1199,1195,1191,1190,1189,1182,1172,1174,1172,1174,1179,"+\
      12. "1182,1180,1170,1173,1169,1172,1178,1185,1185,1181,1181,1181,1189,1189,"+\
      13. "1193,1190,1192,1191,1192,1197,1197,1198,1207,1199,1213,1206,1205,1209,"+\
      14. "1207,1201,1207,1198,1212,1222,1223,1213,1215,1218,1215,1213,1208,1207,"+\
      15. "1202,1200,1208,1208,1207,1200,1203,1199,1196,1196,1199,1199,1200,1199,"+\
      16. "1196,1204,1207,1203,1205,1200,1197,1194,1191,1192,1211,1211,1210,1217,"+\
      17. "1226,1231,1225,1224,1223,1233,1235,1239,1212,1207,1212,1213,1202,1199,"+\
      18. "1187,1183,1187,1191,1183,1185,1202,1200,1189,1181, US-Vorwahlkämpfe ,1108,1112,1116,1122,"+\
      19. "1131,1129,1129,1132,1145,1142,1175,1161,1142,1141,1149,1140,1136,1139,"+\
      20. "1129,1121,1116,1107,1107,1101,1092,1091,1095,1092,1093,1086,1085,1085,"+\
      21. "1088,1090,1084,1087,1090,1092,1093,1097,1094,1094,1108,1111,1113,1115,"+\
      22. "1117,1120,1113,1117,1128,1127,1125,1121,1134,1132,1120,1123,1121,1111,"+\
      23. "1117,1116,1109,1111,1110,1121,1128,1121,1122,1114,1117,1114,1119,1118,"+\
      24. "1123,1119,1108,1106,1102,1100,1096,1093,1100,1094,1105,1104,1106,1113,"+\
      25. "1103,1098,1103,1095,1091,1095,1086,1092,1093,1101,1104,1100,1103,1102,"+\
      26. "1096,1095,1087,1085,1093,1086,1072,1079,1085,1083,1069,1068,1067,1080,"+\
      27. "1084,1085,1091,1094,1094,1087,1094,1088,1088,1101,1115,1117,1106,1104,"+\
      28. "1108,1112,1119,1119,1110,1111,1111,1112,1119,1130,1135,1136,1145,1137,"+\
      29. "1136,1146,1147,1155,1158,1156,1157,1158,1143,1141,1143,1131,1140,1141,"+\
      30. "1133,1131,1120,1117,1122,1121,1135,1122,1109,1106,1100,1088,1108,1101,"+\
      31. "1090,1082,1088,1080,1085,1083,1084,1078,1100,1098,1095,1080,1059,1052,"+\
      32. "1057,1061,1071,1050,1034,1035,1031,1027,1026,1034,1032,1029,1033,1032,"+\
      33. "1025,1019,1019,1026,1025,1027,1027,1028,1021,1020,1013,1012,1012,1006,"+\
      34. "1010,999,997,999,999,1001,997,991,997,998,1003,1000,1000,1008,1010,"+\
      35. "1014,1013,1009,1019,1009,1015,1009,1003,1000,998,982"
      36. declare sz&,data$[]:data$[]=explode(d$,",")
      37. sz&=sizeof(data$[])-1
      38. moveto 1,400
      39. line 0,(1500-val(data$[sz&])) - sz&*2.5,1500-val(data$[sz&])
      40. moveto 0,1300-val(data$[sz&])
      41. Whileloop sz&,0,-1
      42. lineto 2.5*(sz&-&Loop),1300-val(data$[&Loop])
      43. if val(data$[&Loop])=0
      44. locate 4,(sz&-&Loop)/3.5
      45. print data$[&Loop],
      46. endif
      47. waitinput 10
      48. sound 2*(data$[&Loop]-900),45
      49. endwhile
      50. waitinput
      Alles anzeigen
    • Abt. Gauss´sche Fehlerfunktion für selten tabellierte Bereiche
      ======================================
      Vorab der englische Begleittext zum übersetzten Quelltext:
      Spoiler anzeigen
      The error function erf(x) can be approximated with an asymptotic series.
      x -t^2 dt
      erf(x) = 2/sqrt(pi) Sum e
      0
      This function or its complement, erfc(x) = 1 - erf(x), is often involved
      in the solutions to heat transfer and ionic diffusion problems. It also
      appears in statistics. In many cases, there is need to know the value of
      erf(x) for large values of the argument ( x > 3); tables seldom cover
      this range adequately.
      Peirce gives a convenient asymptotic expansion for positive values of x:
      ___________1____ 1 x 3_____ 1 x 3 x 5
      erf(x) = 1 - ---- + ----------- - --------- + ...
      _________2x^2 _(2x^2)^2 __(2x^2)^3
      As with most asymptotic series, the above expression eventually diverges.
      However, we can again terminate the summation at the smallest term and
      use the magnitude of the next term as a measure of the error bound. This
      is done in program ASYMERF: The input is X, the returned values are
      Y = erf(X), Y1 = erfc(X), the error estimate E and the number of terms
      summed, N.
      For x <= 3, a rapidly convergent Taylor series approximation can be used:
      erf(x) = (2/sqrt(pi)) (x - x^3 / 3 + x^5 / (5 * 2!) - x^7 / (7*3!) + ...)

      ... und hier das Näherungsprogramm:

      Brainfuck-Quellcode

      1. WindowTitle " Asym-Erf(), die Gauss-Fehlerfunktion in asymptotischer Näherung "
      2. ' Quelle: http://jean-pierre.moreau.pagesperso-orange.fr/Basic/asymerf_bas.txt
      3. ' (D) Demo 2016/11 transponiert nach XProfan 11.2a by P. Specht, Vienna / Austria
      4. ' Keine wie auch immer geartete Gewähr! No warranty whatsoever!
      5. '****************************************************
      6. '* Program to demonstrate ASYMERF *
      7. '* ------------------------------------------------ *
      8. '* Reference: BASIC Scientific Subroutines, Vol. II *
      9. '* by F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1].*
      10. '* ------------------------------------------------ *
      11. '* SAMPLE RUN: *
      12. '* Find the value of ERF(X)=2*Exp(-X*X)/SQRT(PI) *
      13. '* *
      14. '* Input X ? 3 *
      15. '* ERF(X)= .9999779 with error estimate= -.00000000 *
      16. '* Number of terms evaluated was 10 *
      17. '* *
      18. '* Input X ? 4 *
      19. '* ERF(X)= 1.0000000 with error estimate= 0.0000000 *
      20. '* Number of terms evaluated was 17 *
      21. '****************************************************
      22. ' DEFINT I-N : DEFDBL A-H, O-Z
      23. WindowStyle 24:CLS:font 2:Declare x!,y!,e!,n&:Set("decimals",17)
      24. Tests:
      25. Print "\n\n Die Gauss-Fehlerfunktion Erf(x) für den Wert x = ";:Input x!
      26. 'Gosub "S1000"
      27. S1000
      28. Print
      29. Print "\n Erf(x) für den Wert x= ";x!;" beträgt: ";format$("0.######",y!)
      30. PRINT " mit einer Fehleabschätzung zu ";format$("##0.##########",e!)
      31. PRINT
      32. PRINT " ";n&;" Terme wurde berücksichtigt.";
      33. WaitInput
      34. Goto "Tests"
      35. '***********************************************************
      36. '* Asymptotic series expansion of the integral of *
      37. '* 2 EXP(-X*X)/(X*SQRT(PI)), the normalized error function *
      38. '* (ASYMERF). This program determines the values of the *
      39. '* above integrand using an asymptotic series which is *
      40. '* evaluated to the level of maximum accuracy. *
      41. '* The integral is from 0 to X. The input parameter, X *
      42. '* must be > 0. The results are returned in Y and Y1, *
      43. '* with the error measure in E. The number of terms used *
      44. '* is returned in N. The error is roughly equal to first *
      45. '* term neglected in the series summation. *
      46. '* ------------------------------------------------------- *
      47. '* Reference: A short table of integrals by B.O. Peirce, *
      48. '* Ginn and Company, 1957. *
      49. '***********************************************************
      50. Proc S1000
      51. Declare c1!,c2!,y1!
      52. n& = 1 : y! = 1 : c2! = 1 / (2 * Sqr(x!))
      53. 'G1100:
      54. Repeat
      55. y! = y! - c2!
      56. n& = n& + 2: c1! = c2!
      57. c2! = -c1! * n& / (2 * x! * x!)
      58. 'Test for divergence - The break point is roughly N=X*X
      59. Case ABS(c2!) > Abs(c1!) : BREAK ':= Goto "G1200"
      60. ' Continue summation
      61. Until 0 ':= Goto "G1100"
      62. ' G1200:
      63. n& = (n& + 1) / 2
      64. e! = EXP(-x! * x!) / (x! * 1.772453850905516)
      65. y1! = y! * e!
      66. y! = 1 - y1!
      67. e! = e! * c2!
      68. RETURN
      69. 'End of file Asymerf.prf
      Alles anzeigen
    • Abt. Polynome mal anders
      =====================
      Die Polynominterpolation mittels Tschebyschow-Polynomen zeichnet sich durch einen sehr günstigen, gleichmäßigen Fehlerverlauf aus. Dazu sind als Interpolationsstellen die geeignet verschobenen Nullstellen eines Tschebyschow-Polynoms passenden Grades zu verwenden. Die nachstehenden Programme erlauben die Berechnung der Polynom-Koeffizienten geeignet zu wählenden Grades.
      Gruss

      P.S.: Weiteres zur Person bei Interesse im Spoiler
      Spoiler anzeigen

      Dem russischen Mathematiker Pafnuti Lwowitsch Tschebyschow (1821-1894) verdanken wir Erkenntnisse auf den Gebieten Mechanik und Ballistik (Tschebyschow-Mechanismus), Analysis (Interpolation und Approximation mittels Tschebyschow-Polynomen), Funktionentheorie (Tschebyschow-Funktion), Zahlentheorie (Theorie der Kongruenzen, Tschebyschow-Distanz, Primzahlentheorie, Satz von Bertrand-Tschebyschow), sowie Wahrscheinlichkeitstheorie (Tschebyschow-Ungleichung) und Statistik (Tschebyschow´s Schwaches Gesetz der großen Zahlen), ferner auf dem Gebiet Elektrotechnik (Tschebyschow-Filter).

      1870 baute er eine mechanische Rechenmaschine unter Verwendung des von ihm erfundenen Tschebyschow-Lambda-Mechanismus , welcher den Bewegungspfad eines Pferdehufes imitiert und auch in seiner vierfüssigen, "Plantigrade" genannten Gehmaschine verwendet wurde.

      Die nach Tschebyschow benannten rekursiven Polynome spielen in der angewandten Mechanik und Robotik eine große Rolle: Tschebyschow-Polynome erster Art sind Lösung der Tschebyschow-Differentialgleichung (1−x^2)*y´´−x*y′+n^2*y = 0 , Tschebyschow-Polynome zweiter Art sind Lösung von (1−x^2)*y´´ −3*x*y′ + n*(n+2)*y = 0. In beiden Fällen bilden sie ein System, in dem Beschleunigung, Geschwindigkeit, Masse und ggf. Dämpfung in einem (im physikalischen Sinne) gut handhabbaren Zusammenhang stehen. Ihre eleganteste Funktionsdarstellung findet sich mit
      T(n, cos(⁡ phi)) = cos(n*phi) als das zweidimensionale Bild einer auf einen stehenden Zylinders vom Umfang n abgewickelten, auf -1 bis 1 normierten Cosinusfunktion der Frequenz n (Alles klar?).

      Brainfuck-Quellcode

      1. WindowStyle 24:Font 2:Set("decimals",5)
      2. WindowTitle "ChebySer: Tschebyschowpolynomkoeffizienten für unterschiedliche Grade (Formeloptimierung)"
      3. ' Quelle: http://jean-pierre.moreau.pagesperso-orange.fr/Basic/chebyser_bas.txt
      4. ' Transponiert nach XProfan 11.2a (D) Demo by P.Specht, Vienna/Austria
      5. ' No warranty whatsoever! Keine wie auch immer geartete Gewähr!
      6. '****************************************************
      7. '* Program to demonstrate Chebyser subroutine *
      8. '* ------------------------------------------------ *
      9. '* Reference: BASIC Scientific Subroutines, Vol. II *
      10. '* by F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1].*
      11. '* ------------------------------------------------ *
      12. '* SAMPLE RUN: *
      13. '* *
      14. '* Chebyshev polynomial coefficients for degree 2 *
      15. '* A( 0) = -1 *
      16. '* A( 1) = 0 *
      17. '* A( 2) = 2 *
      18. '* *
      19. '* Chebyshev polynomial coefficients for degree 3 *
      20. '* A( 0) = 0 *
      21. '* A( 1) = -3 *
      22. '* A( 2) = 0 *
      23. '* A( 3) = 4 *
      24. '* *
      25. '* Chebyshev polynomial coefficients for degree 4 *
      26. '* A( 0) = 1 *
      27. '* A( 1) = 0 *
      28. '* A( 2) = -8 *
      29. '* A( 3) = 0 *
      30. '* A( 4) = 8 *
      31. '* *
      32. '* Chebyshev polynomial coefficients for degree 5 *
      33. '* A( 0) = 0 *
      34. '* A( 1) = 5 *
      35. '* A( 2) = 0 *
      36. '* A( 3) = -20 *
      37. '* A( 4) = 0 *
      38. '* A( 5) = 16 *
      39. '* *
      40. '* Chebyshev polynomial coefficients for degree 6 *
      41. '* A( 0) = -1 *
      42. '* A( 1) = 0 *
      43. '* A( 2) = 18 *
      44. '* A( 3) = 0 *
      45. '* A( 4) = -48 *
      46. '* A( 5) = 0 *
      47. '* A( 6) = 32 *
      48. '* *
      49. '* Chebyshev polynomial coefficients for degree 7 *
      50. '* A( 0) = 0 *
      51. '* A( 1) = -7 *
      52. '* A( 2) = 0 *
      53. '* A( 3) = 56 *
      54. '* A( 4) = 0 *
      55. '* A( 5) = -112 *
      56. '* A( 6) = 0 *
      57. '* A( 7) = 64 *
      58. '* *
      59. '* Chebyshev polynomial coefficients for degree 8 *
      60. '* A( 0) = 1 *
      61. '* A( 1) = 0 *
      62. '* A( 2) = -32 *
      63. '* A( 3) = 0 *
      64. '* A( 4) = 160 *
      65. '* A( 5) = 0 *
      66. '* A( 6) = -256 *
      67. '* A( 7) = 0 *
      68. '* A( 8) = 128 *
      69. '* *
      70. '* Chebyshev polynomial coefficients for degree 9 *
      71. '* A( 0) = 0 *
      72. '* A( 1) = 9 *
      73. '* A( 2) = 0 *
      74. '* A( 3) = -120 *
      75. '* A( 4) = 0 *
      76. '* A( 5) = 432 *
      77. '* A( 6) = 0 *
      78. '* A( 7) = -576 *
      79. '* A( 8) = 0 *
      80. '* A( 9) = 256 *
      81. '* *
      82. '* Chebyshev polynomial coefficients for degree 10 *
      83. '* A( 0) = -1 *
      84. '* A( 1) = 0 *
      85. '* A( 2) = 50 *
      86. '* A( 3) = 0 *
      87. '* A( 4) = -400 *
      88. '* A( 5) = 0 *
      89. '* A( 6) = 1120 *
      90. '* A( 7) = 0 *
      91. '* A( 8) = -1280 *
      92. '* A( 9) = 0 *
      93. '* A( 10) = 512 *
      94. '* *
      95. '****************************************************
      96. 'DEFINT I-N
      97. 'DEFDBL A-H, O-Z
      98. Declare i&,n&,j&
      99. CLS
      100. PRINT
      101. Declare B![10,10]
      102. WhileLoop 2,10:n&=&Loop
      103. S1000 ' Proc-Aufruf
      104. PRINT " Tschebyschowpolynom-Koeffizienten für Polynomgrad ";n&
      105. Print
      106. WhileLoop 0,n&:i&=&Loop
      107. PRINT " A(";i&; ") = ";B![n&,i&]
      108. EndWhile
      109. Print : Case n&<10:WaitInput
      110. EndWhile
      111. PRINT
      112. END
      113. Proc S1000
      114. '********************************************************
      115. '* Chebyshev series coefficients evaluation subroutine *
      116. '* ---------------------------------------------------- *
      117. '* The order of the polynomial is n. The coefficients *
      118. '* are returned in the array B(i,j), i is the degree of *
      119. '* the polynomial, j is the coefficient order. *
      120. '********************************************************
      121. 'Establish t0 and t1 coefficients
      122. B![0,0]=1:B![1,0]=0:B![1,1]=1
      123. 'Return if order is less than two
      124. Case n&<2:Return
      125. WhileLoop 2,n&:i&=&Loop
      126. WhileLoop i&:j&=&Loop
      127. 'Basic recursion relation
      128. B![i&,j&]=2*B![i&-1,j&-1]-B![i&-2,j&]
      129. EndWhile
      130. B![i&,0]= -1*B![i&-2, 0]
      131. EndWhile
      132. EndProc
      133. 'End of file Chebyser.prf
      Alles anzeigen


      Nachstehend ein weiteres Progamm zum Thema.

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

    • Falls man den Werte-Gültigkeitsbereich einschränken kann, genügen Tschebyschow-Polynome geringeren Grades, die auch schneller zu berechnen sind. Das nachstehende Programm erlaubt so eine Grad-Reduktion:

      Brainfuck-Quellcode

      1. WindowStyle 24:Font 2:Set("decimals",17)
      2. WindowTitle "ChebeCon: Vereinfachung von Approximationspolynomen nach Tschebyschow"
      3. ' Quelle: http://jean-pierre.moreau.pagesperso-orange.fr/Basic/chebecon_bas.txt
      4. ' transponiert nach XProfan 11.2a (D) Demo 2016-12 by P.Specht, Vienna/Austria
      5. ' No warranty whatsoever! Ohne jegliche Gewähr!
      6. '*****************************************************
      7. '* Program to demonstrate Chebyshev economization *
      8. '* ------------------------------------------------- *
      9. '* Reference: BASIC Scientific Subroutines, Vol. II *
      10. '* by F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1]. *
      11. '* ------------------------------------------------- *
      12. '* SAMPLE RUN: *
      13. '* What is the degree of the input polynomial: ? 15 *
      14. '* *
      15. '* What is the degree of the desired economized *
      16. '* polynomial: ? 9 *
      17. '* *
      18. '* What is the range of the input polynomial: ? 1.57 *
      19. '* *
      20. '* Input the coefficients: *
      21. '* C( 0) = ? 0 *
      22. '* C( 1) = ? 1 *
      23. '* C( 2) = ? 0 *
      24. '* C( 3) = ? -.166666666 *
      25. '* C( 4) = ? 0 *
      26. '* C( 5) = ? .00833333333 *
      27. '* C( 6) = ? 0 *
      28. '* C( 7) = ? -.0001984127 *
      29. '* C( 8) = ? 0 *
      30. '* C( 9) = ? .000002755732 *
      31. '* C( 10) = ? 0 *
      32. '* C( 11) = ? -.000000025052109 *
      33. '* C( 12) = ? 0 *
      34. '* C( 13) = ? .00000000016059045 *
      35. '* C( 14) = ? 0 *
      36. '* C( 15) = ? -.00000000000076471635 *
      37. '* *
      38. '* The Chebyshev series coefficients are: *
      39. '* *
      40. '* A( 0) = 0.0000000000 *
      41. '* A( 1) = 1.1334708982 *
      42. '* A( 2) = 0.0000000000 *
      43. '* A( 3) = -0.1378841454 *
      44. '* A( 4) = 0.0000000000 *
      45. '* A( 5) = 0.0044798168 *
      46. '* A( 6) = 0.0000000000 *
      47. '* A( 7) = -0.0000674667 *
      48. '* A( 8) = 0.0000000000 *
      49. '* A( 9) = 0.0000005865 *
      50. '* A(10) = 0.0000000000 *
      51. '* A(11) = -0.0000000033 *
      52. '* A(12) = 0.0000000000 *
      53. '* A(13) = 0.0000000000 *
      54. '* A(14) = 0.0000000000 *
      55. '* A(15) = 0.0000000000 *
      56. '* *
      57. '* The economized polynomial coefficients are: *
      58. '* *
      59. '* C( 0) = 0.0000000000 *
      60. '* C( 1) = 0.9999999767 *
      61. '* C( 2) = 0.0000000000 *
      62. '* C( 3) = -1.6666647620 *
      63. '* C( 4) = 0.0000000000 *
      64. '* C( 5) = 0.0083329009 *
      65. '* C( 6) = 0.0000000000 *
      66. '* C( 7) = -0.0001980098 *
      67. '* C( 8) = 0.0000000000 *
      68. '* C( 9) = 0.0000025907 *
      69. '* *
      70. '*****************************************************
      71. 'DEFINT I-N
      72. 'DEFDBL A-H, O-Z
      73. DecLARE m&,m1&,x0!,i&,j&,cc$
      74. Declare b!,n&,L&
      75. CLS
      76. Print
      77. Print " Bitte den Grad des Original-Polynoms eingeben: ", :Input m&
      78. PRINT
      79. Print " Bitte den gewünschten Grad des vereinfachten Polynoms angeben: ",:Input m1&
      80. PRINT
      81. Print " Bitte den gewünschten Bereich (Range) angeben: ",:Input x0!
      82. Declare A![m&],B![m&,m&],C![m&]
      83. Print
      84. Print " Eingabe der Koeffizienten des Originalpolynoms:"
      85. Print
      86. WhileLoop 0,m&:i&=&Loop
      87. Print " C(";i&; ") = ";:Input Cc$
      88. C![i&]=Val(cc$)
      89. EndWhile
      90. Print
      91. S2000 ' Proc-Aufruf
      92. PRINT " Die Koeffizienten der Tschebyschow-Folge lauten: \n"
      93. WhileLoop 0,m&:i&=&Loop
      94. PRINT " A(";i&;") = ";+Format$( "#0.##########",A![i&])
      95. EndWhile
      96. Print:WaitInput 6000
      97. Print "\n Die Koeffizienten des vereinfachten Polynoms lauten: \n"
      98. WhileLoop 0,m1&:i&=&Loop
      99. PRINT " C(";i&,") = ";Format$("#0.##########",C![i&])
      100. EndWhile
      101. Beep:WaitInput
      102. END
      103. Proc S1000
      104. '********************************************************
      105. '* Chebyshev series coefficients evaluation subroutine *
      106. '* The order of the polynomial is n. The coefficients *
      107. '* are returned in the array B(i,j), i is the degree of *
      108. '* the polynomial, j is the coefficient order. *
      109. '********************************************************
      110. 'Establish t0 and t1 coefficients
      111. B![0,0] = 1: B![1,0] = 0: B![1,1] = 1
      112. 'Return if order is less than two:
      113. Case n& < 2 : Return
      114. WhileLoop 2,n&:i&=&Loop
      115. WhileLoop i&:j&=&Loop
      116. 'Basic recursion relation
      117. B![i&,j&] = 2*B![i&-1,j&-1]-B![i&-2,j&]
      118. EndWhile
      119. B![i&,0]= -1*B![i&-2,0]
      120. EndWhile
      121. EndProc
      122. Proc S2000
      123. '************************************************************
      124. '* Chebyshev economization subroutine. The program takes *
      125. '* the input polynomial coefficients, C(i), and returns the *
      126. '* Chebyshev series coefficients, A(i). The degree of the *
      127. '* series passed to the routine is m. The degree of the *
      128. '* series returned is m1. The maximum range of x is x0 used *
      129. '* for scaling. Note that the input series coefficients are *
      130. '* nulled during the process, and then set equal to the *
      131. '* economized series coefficients. *
      132. '************************************************************
      133. 'Start by scaling the input coefficients according to C(i)
      134. B!=x0!
      135. WhileLoop m&:i&=&Loop
      136. C![i&]=C![i&]*B!
      137. B!=B!*x0!
      138. EndWhile
      139. 'Call Chebyshev series coefficients subroutine
      140. WhileLoop m&,0,-1:n&=&Loop
      141. S1000 'proc-Aufruf
      142. A![n&]=C![n&]/B![n&,n&]
      143. WhileLoop 0,n&:l&=&Loop
      144. 'Chebyshev series of order l is substracted out of the polynomial
      145. C![L&]=C![l&]-A![n&]*B![n&,l&]
      146. EndWhile
      147. EndWhile
      148. 'Perform truncation
      149. WhileLoop 0,m1&:i&=&Loop
      150. WhileLoop 0,i&:j&=&Loop
      151. C![j&] = C![j&] + A![i&] * B![i&,j&]
      152. EndWhile
      153. EndWhile
      154. 'Convert back to the interval X0
      155. B!=1/x0!
      156. WhileLoop m1&:i&=&Loop
      157. C![i&]=C![i&]*B!
      158. B!=B!/x0!
      159. EndWhile
      160. EndProc
      161. 'End of file Chebecon.prf
      Alles anzeigen

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

    • Abt. Gauß ohne Graus
      ===============
      Die Gauß-Verteilung ist durch die bekannte Glockenkurve gegeben. Fragt man, wie wahrscheinlich ein Ereignis über einem bestimmten Grenzwert zu liegen kommt, dann kommt es auf die Fläche unter der Glocke ab diesem Grenzwert an. Flächen unter Kurven werden mathematisch als Integralfunktion dargestellt. Integrale ergeben sich oft als weitere, relativ leicht zu ermittelnde Formeln - dummerweise gerade im Falle der Gaußglocke aber nicht!
      Normalerweise müssen dann numerische Lösungsverfahren her (z.B. durch abschnittsweises Aufaddieren von Trapezflächen, in die man die Kurve zerhackt hat), um einen ungefähren Wert dieses Gauß-Integrals zu ermittelt. Das erscheint in der Praxis oft zu aufwendig, und man begnügt sich mit relativ einfach zu berechenden Näherungsformeln, die aber nur in einem eingeschränkten Wertebereich gelten.

      Die umgekehrte Frage, nähmlich für eine vorgegebene Wahrscheinlichkeit (=Fläche) jenen vorgenannten Grenzwert zu ermitteln, kann dann duch Umstellung so einer Näherungsformel auf die andere Variable ermittelt werden. Das nachstehende Progi tut genau das. Man spricht dann von der "Inversen Gaussfunktion". Vorgegeben wird die Fläche (= Wahrscheinlichkeit), heraus kommt der gesuchte Grenzwert, von dem aus bis zum Wert "+Unendlich" diese Fläche der Gaussglocke abgeschnitten wird. Eh ganz einfach, oder? Da staunt der Laie, und der Statistiker freut sich!
      Gruss

      Brainfuck-Quellcode

      1. WindowTitle "Formel für die Inverse des Normalverteilungsintegrals"
      2. ' Quelle: http://jean-pierre.moreau.pagesperso-orange.fr/Basic/invnorm_bas.txt
      3. ' Transponiert nach XProfan 11.2a (D) Demo by P.Specht, Vienna/Austria
      4. ' No warranty whatsoever! Keine Gewähr, für garnix!
      5. '****************************************************
      6. '* Program to demonstrate inverse normal subroutine *
      7. '* ------------------------------------------------ *
      8. '* Reference: BASIC Scientific Subroutines, Vol. II *
      9. '* By F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1].*
      10. '* ------------------------------------------------ *
      11. '* SAMPLE RUN: *
      12. '* *
      13. '* P(Z>X) X *
      14. '* ---------------- *
      15. '* 0.50 0.0000 *
      16. '* 0.48 0.0500 *
      17. '* 0.46 0.1002 *
      18. '* 0.44 0.1507 *
      19. '* 0.42 0.2015 *
      20. '* 0.40 0.2529 *
      21. '* 0.38 0.3050 *
      22. '* 0.36 0.3580 *
      23. '* 0.34 0.4120 *
      24. '* 0.32 0.4673 *
      25. '* 0.30 0.5240 *
      26. '* 0.28 0.5825 *
      27. '* 0.26 0.6430 *
      28. '* 0.24 0.7060 *
      29. '* 0.22 0.7719 *
      30. '* 0.20 0.8414 *
      31. '* 0.18 0.9152 *
      32. '* 0.16 0.9944 *
      33. '* 0.14 1.0804 *
      34. '* 0.12 1.1751 *
      35. '* 0.10 1.2817 *
      36. '* 0.08 1.4053 *
      37. '* 0.06 1.5551 *
      38. '* 0.04 1.7511 *
      39. '* 0.02 2.0542 *
      40. '* *
      41. '****************************************************
      42. 'DEFINT I-N
      43. 'DEFDBL A-H, O-Z
      44. Declare i&,x!,y!,from!,to!,step!
      45. CLS
      46. PRINT
      47. Print " Das Programm berechnet eine Näherung an das Integral der Gaussverteilung,"
      48. Print " und zwar die Fläche zwischen x und +Inf (rechte Seite!). Dazu wird nach "
      49. Print " Abramowitz/Stegun ein Rationales Polynom benutzt. Vorgegeben wird y, das "
      50. Print " zugehörige X dazu wird berechnet. "
      51. Print " Für y innerhalb [0 ... 0,5] ist die Genauigkeit besser als 0.0005"
      52. Print
      53. PRINT " P(Z>X) X "
      54. PRINT "----------------"
      55. from!=0.5:to!=0:step! = -0.02
      56. y!=from!
      57. i&=1
      58. Repeat
      59. S1000 ' Proc-Aufruf
      60. Case x!<0.000001:x!=0
      61. PRINT Format$(" 0.## ",y!),Tab(12),Format$("0.####",x!)
      62. CaseNot i& Mod 15: WaitInput
      63. inc i&
      64. y!=y!+step!
      65. Until y!<to!
      66. PRINT
      67. WaitInput
      68. END
      69. Proc S1000
      70. '***********************************************
      71. '* Inverse normal distribution subroutine *
      72. '* ------------------------------------------- *
      73. '* This program calculates an approximation to *
      74. '* the integral of the normal distribution *
      75. '* function from x to infinity (the tail). *
      76. '* A rational polynomial is used. The input is *
      77. '* in y, with the result returned in x. The *
      78. '* accuracy is better then 0.0005 in the range *
      79. '* 0 < y < 0.5. *
      80. '* ------------------------------------------- *
      81. '* Reference: Abramowitz and Stegun. *
      82. '***********************************************
      83. 'Define coefficients
      84. Declare c0!,c1!,c2!,d1!,d2!,d3!,z!
      85. c0! = 2.515517
      86. c1! = 0.802853
      87. c2! = 0.010328
      88. d1! = 1.432788
      89. d2! = 0.189269
      90. d3! = 0.001308
      91. Case y!=0:x!=1E13
      92. Case y!=0:Return
      93. z!=Sqrt(-1*Ln(Sqr(y!)))
      94. x! = 1+d1!*z!+d2!*Sqr(z!)+ d3!*z!*Sqr(z!)
      95. x! = (c0!+c1!*z!+c2!*Sqr(z!))/x!
      96. x! = z!-x!
      97. EndProc
      98. 'End of file invnorm.ba
      Alles anzeigen

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

    • Abt. 5-Sekunden-Sprachnachricht aufnehmen, wiedergeben und abspeichern
      ================================================
      ... wie in der XProfan-Hilfe angegeben plus eine Zeitabschnittsergänzung. Voraussetzung: Das Mikro wurde vorher mittels Rechtsklick auf das Lautsprechersymbol in der Taskleiste als Aufnahmegerät ausgewählt, und durch Druck auf "konfigurieren" im aufgehenden großen Menü "Spracherkennung" unter "Mikrofon einrichten" auf gute Empfindlichkeit eingestellt (Win-7).

      Bitte überprüfen, ob die Umgebungsvariable USERPROFILE zusammen mit \Desktop\Spruch.wav einen sinnvollen Pfad darstellt. Die jeweils letzte 5-Sekundenaufnahme sollte dann dort abgelegt sein. Achtung, wegen Abhängigkeit von Treibereigenheiten KEINE wie auch immer geartete GEWÄHR! Bei mir hat´s funktioniert.
      Gruss

      Quellcode

      1. Windowtitle "5-Sekunden-Nachricht"
      2. Windowstyle 24:Window 20,20-600,400
      3. Proc MSend :parameters Befehl$:declare Meldung$
      4. Print "Befehl: ";Befehl$:Meldung$ = @MCISend$(Befehl$)
      5. If %MCIError:Print "Fehler: ";:Else
      6. Print "OK! ";:EndIf:Print Meldung$
      7. endproc
      8. MSend "OPEN NEW TYPE WAVEAUDIO ALIAS SPRUCH"
      9. MSend "SET SPRUCH TIME FORMAT MILLISECONDS"
      10. MSend "RECORD SPRUCH FROM 0 TO 5000 WAIT"
      11. MSend "PLAY SPRUCH FROM 0 TO 5000"
      12. waitinput
      13. MSend "SAVE SPRUCH "+chr$(34)+GetEnv$("USERPROFILE")+"\desktop\SPRUCH.WAV"+chr$(34)
      14. waitinput 5000
      15. END
      Alles anzeigen
    • Abt. Tschebyschow-Approximation einer benutzerdefinierten Funktion
      ------------------------------------------------------------------------------
      Es gibt manchmal Funktionen, die sich einer exakten Berechnung hartnäckig entziehen. Dann sind gute Näherungen gefragt, die aber oft nur in einem definierten Intervallbereich ohne große Fehler funktionieren. Warum Tschebyschow-Polynome dafür besonders geeignet sind, wird kurz im Spoiler erklärt. Anschließend ein Demoprogramm, das zeigt wie genau Tschebeyschow-Polynome eine benutzerdefinierte Funktion annähern können.
      Gruss
      Spoiler anzeigen
      Ein Tschebyschow-Polynom vom Grade N wird mit Tn(x) bezeichnet und ist in expliziter Form gegeben durch: Tn(x) = Cos( n * Arccos(x) )

      Hieraus sieht man sofort die Verwandtschaft von Tschebyschow-Polynomen mit trigonometrischen Formeln. Aus der Taylorreihen-Entwicklung der vorgenannten Trigonometrie-Funktionen (Cos und Arccos) ergibt sich dann nach Tschebyschow die Darstellung als explizites Polynom:

      Grad: Wert:
      n = 0: T0(x) = 1
      n = 1: T1(x) = x
      n = 2: T2(X) = 2*x^2 - 1
      n = 3: T3(x) = 4*x^3 - 3*x
      n = 4: T4(x) = 8*x^4 - 8*x^2 + 1
      ... etc etc.

      Diese Tschebyschow-Polynome können durch Gewichtung mit dem Faktor 1 / sqrt(1 - x^2) im Bereich [-1 ... 1 ] als "Orthogonale Systeme" aufgefasst werden, also Funktionen die voneinander unabhängig sind. Orthogonal bedeutet geometrisch, daß die jeweiligen Funktionskurven aufeinander normal stehen, sprich: Einen 90°-Winkel miteinander einschließen. Multipliziert man jeweils zwei Tschebyschow-Polynome von unterschiedlichem Grad, dann kommt dabei stets 0 heraus!

      Tschebyschow-Polynome vom Grad N haben dabei im Intervall [-1 ... 1] genau N Nullstellen, die an folgenden Stellen liegen: x = Cos( Pi * (k - 1/2) / n ) für k = 1, 2, ..., n . Im selben Intervall gibt es N + 1 Extremwerte (Maxima plus Minima) an den Stellen x = Cos( Pi*k / n ) für k = 0, 1, ... ,n. Alle Maxima nehmen den Wert y=+1 an, alle Minima den Wert -1. Gerade diese Eigenschaft macht Tschebyschow-Polynome so nützlich bei der Approximation komplizierter Funktionen (Man könnte die Methode als eine Art "Halbe Fourieranalyse und -Synthese" auffassen, vergleichbar auch mit Einseitenband-Kurzwellenfunk).

      Brainfuck-Quellcode

      1. WindowTitle "Tschebyschow-Approximation einer benutzerdefinierten Funktion"
      2. ' Quelle: http://jean-pierre.moreau.pagesperso-orange.fr/Basic/tchebysh_bas.txt
      3. ' Transponiert nach XProfan 11.2a (D) Demo by P.Specht, Vienna/Austria
      4. ' No warranty whatsoever! Ohne jegliche Gewähr! Nutzung auf eigene Gefahr!
      5. '********************************************************
      6. '* Chebyshev Approximation of a user defined real *
      7. '* function FUNC(X) in double precision. *
      8. '* ---------------------------------------------------- *
      9. '* SAMPLE RUN: *
      10. '* (Approximate sin(x) from x=0 to x=PI). *
      11. '* *
      12. '* Chebyshev coefficients (N= 10 ): *
      13. '* 0.944002431536470 *
      14. '* -0.000000000000000 *
      15. '* -0.499403258270407 *
      16. '* -0.000000000000000 *
      17. '* 0.027992079617546 *
      18. '* -0.000000000000000 *
      19. '* -0.000596695195801 *
      20. '* 0.000000000000000 *
      21. '* 0.000006704175524 *
      22. '* 0.000000000000000 *
      23. '* X Chebyshev Eval. SIN(X) *
      24. '*----------------------------------------- *
      25. '* 0.00000000 0.00000005 0.00000000 *
      26. '* 0.34906585 0.34202018 0.34202014 *
      27. '* 0.69813170 0.64278757 0.64278761 *
      28. '* 1.04719755 0.86602545 0.86602540 *
      29. '* 1.39626340 0.98480773 0.98480775 *
      30. '* 1.74532925 0.98480773 0.98480775 *
      31. '* 2.09439510 0.86602545 0.86602540 *
      32. '* 2.44346095 0.64278757 0.64278761 *
      33. '* 2.79252680 0.34202018 0.34202014 *
      34. '* 3.14159265 0.00000005 0.00000000 *
      35. '* *
      36. '* Basic Release By J-P Moreau, Paris. *
      37. '* (www.jpmoreau.fr) *
      38. '* XProfan 11-release by P.Specht, Vienna / Austria *
      39. '* ---------------------------------------------------- *
      40. '* REFERENCE: "Numerical Recipes, The Art of Scientific *
      41. '* Computing By W.H. Press, B.P. Flannery, *
      42. '* S.A. Teukolsky and W.T. Vetterling, *
      43. '* Cambridge University Press, 1986" *
      44. '* [BIBLI 08]. *
      45. '********************************************************
      46. 'PROGRAM PART 1: TESTCHEBY
      47. 'DEFDBL A-H, O-Z
      48. 'DEFINT I-N
      49. WindowStyle 24:Window 0,0-%maxx,%maxy-40:Font 2:Set("Decimals",17)
      50. Declare N&,Zero!,Pi!,x0!,x1!, half!,two!,A!,B!,BmA!,BpA!
      51. Declare i&,j&,k&,y!,xx!, func!
      52. Declare fac!,sum! , f0$,f1$ ,dx!,x!
      53. Declare m&,d!,dd!,y2!,sv!, chebev!
      54. ZERO! = 0 : Pi! = 4*Arctan(1) ':Print Pi!:WaitInput
      55. N& = 10
      56. Declare C![N&], F![N&]
      57. X0! = ZERO!: X1! = Pi!
      58. Gosub "ES1000" 'call CHEBFT(X0,X1,C,N)
      59. Print "\n\n Tschebyschow-Koeffizienten für Grad N = "; N&; \
      60. ":\n ----------------------------------------------------"
      61. F0$ = "###0.###############;###0.###############;###0.###############"
      62. WhileLoop n&:i&=&Loop
      63. Print " C(";int(i&-1);") = ";Format$(F0$,C![I&])
      64. EndWhile
      65. WaitInput 5000
      66. DX! = (X1!-X0!) / (N&-1)
      67. X! = X0! - DX!
      68. Font 0
      69. PRINT "\n\n x: Tschebyschow-Entwicklung: vgl.Orig SIN(X) "
      70. PRINT " ------------------------------------------------------------"
      71. F1$ = "###0.########"
      72. WhileLoop n&:i&=&Loop
      73. X! = X! + DX!
      74. ES2000 'call CHEBEV(X0,X1,C,N,X)
      75. Print " ";Format$(F1$, X!),
      76. Print Tab(20);Format$(F1$, CHEBEV!),
      77. Print Tab(40);Format$(F1$, Sin(X!) )
      78. EndWhile
      79. Beep: WaitInput
      80. End 'of main program
      81. 'user defined function FUNC(XX)
      82. Proc ES500
      83. FUNC! = Sin(XX!)
      84. EndProc
      85. ES1000:
      86. 'subroutine CHEBFT(A,B,C,N)
      87. '********************************************************
      88. '* Chebyshev fit: Given a real function FUNC(X), lower *
      89. '* and upper limits of the interval [A,B] for X, and a *
      90. '* maximum degree N, this routine computes the N Cheby- *
      91. '* shev coefficients Ck, such that FUNC(X) is approxima-*
      92. '* ted by: N *
      93. '* [Sum Ck Tk-1(Y)] - C1/2, where X and Y are *
      94. '* k=1 *
      95. '* related by: Y = (X - 1/2(A+B)) / (1/2(B-A)) *
      96. '* This routine is to be used with moderately large N *
      97. '* (e.g. 30 or 50), the array of C's subsequently to be *
      98. '* truncated at the smaller value m such that Cm+1 and *
      99. '* subsequent elements are negligible. *
      100. '********************************************************
      101. HALF! = 0.5: TWO! = 2
      102. A! = X0!: B! = X1!
      103. BMA! = HALF! * (B! - A!): BPA! = HALF! * (B! + A!)
      104. WhileLoop n&:k&=&Loop
      105. Y! = Cos(Pi! * (K&-HALF!)/N&)
      106. XX! = Y! * BMA! + BpA!
      107. ES500
      108. F![K&] = FUNC!
      109. EndWhile
      110. FAC! = TWO! / N&
      111. WhileLoop n&:j&=&Loop
      112. SUM! = ZERO!
      113. WhileLoop n&:k&=&Loop
      114. SUM! = SUM! + F![K&] * Cos((Pi!*(J&-1)) * ((K&-HALF!) / N&))
      115. EndWhile
      116. C![J&] = FAC! * SUM!
      117. EndWhile
      118. RETURN
      119. Proc ES2000 'function CHEBEV(A,B,C,M,X)
      120. '**********************************************************
      121. '* Chebyshev evaluation: All arguments are input. C is an *
      122. '* array of Chebyshev coefficients, of length M, the first*
      123. '* M elements of Coutput from subroutine CHEBFT (which *
      124. '* must have been called with the same A and B). The Che- *
      125. '* byshev polynomial is evaluated at a point Y determined *
      126. '* from X, A and B, and the result FUNC(X) is returned as *
      127. '* the function value. *
      128. '**********************************************************
      129. If ((X!-A!) * (X!-B!)) > ZERO!
      130. Print " X liegt nicht im Bereich!"
      131. Return
      132. EndIF
      133. M& = N&
      134. D! = ZERO!: Dd! = ZERO!
      135. Y! = (TWO!*X!-A!-B!) / (B!-A!) 'change of variable
      136. Y2! = TWO! * Y!
      137. WhileLoop m&,2,-1:j&=&Loop
      138. SV! = D!
      139. D! = Y2! * D! - Dd! + C![J&]
      140. Dd! = SV!
      141. EndWhile
      142. CHEBEV! = Y! * D! - Dd! + HALF! * C![1]
      143. EndProc
      144. 'end of file Tschebyschow-Approx.prf
      Alles anzeigen

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

    • Abt. Experimentierbrett für Lissajou-Figuren
      ============================
      Auf Oszilloskopen mit Leuchtröhre sah man früher oft interessante Figuren, die von einem in x- und in y-Achsenrichtung mit unterschiedlichen Frequenzen und Phasenlagen angesteuerten Leuchtpunkt erzeugt wurden. Im nachfolgenden Progi kann man sich diesbezüglich durch geeignetes Umprogrammieren austoben.
      Gruss

      P.S.: Wer immer Lust hat, Regler und Drehknöpfe einzubauen, ist dazu herzlich eingeladen. Berühmt sind die mit XProfan erreichbaren Grenzfrequenzen aber nicht, da müssten wir schon mit Inline-Assembler ran...

      Quellcode

      1. WindowTitle "Lissajou-Figuren":WindowStyle 24:Window 0,0-%maxx,%maxy:cls 0:showmax
      2. declare xg&,xh&,yg&,yh&,pi2!,w!,x!,y!,phi!,n!,ewig&
      3. xg&=width(%hwnd):xh&=xg&\2:yg&=height(%hwnd):yh&=yg&\2:pi2!=2*pi()
      4. Repeat
      5. n!=0
      6. whileloop 0,xg&,6
      7. n!=n!+0.1
      8. phi!=&Loop*pi2!/xg&
      9. MCLS xg&,yg&,0:StartPaint -1
      10. usepen 0, 1 ,$00FF00
      11. moveto xh&,yh&+300*sin(phi!)
      12. whileloop 0,xg&+5,6
      13. w!=&Loop*pi2!/xg&
      14. y!=sin(n!*w!+phi!)
      15. lineto xh&-500*sin(w!) , yh&+300*y!
      16. Endwhile
      17. EndPaint:MCopyBMP 0,0 - xg&,yg& >0,0;0
      18. endwhile
      19. until ewig&
      Alles anzeigen
    • Abt. Kleiner Rechner für Elektrotechnische Größen
      ===============================
      Ich darf testhalber meinen Rechner für Spannung, Strom, Leistung und Widerstand in Beta-Version vorstellen. Dabei wurde versucht, die vorsintflutliche Technik der Kreuz- und Quer-Rechnerei umzusetzen, was die korrekte Anwendung aller bekannten Formeln und deren sämtlicher Umkehrungen erfordert. Weiters waren Fehleingaben abzufangen, und es mußte verhindert werden, daß Werte unter Wurzeln negativ werden. Das ganze ist zwar einigermaßen getestet, bleibt aber aus verständlichern Gründen ohne jegliche Gewähr!
      Gruss
      P.S. EDIT: Kleiner Fehler entdeckt, bei Eingabe des 4. und 3. Wertes passt noch etwas nicht. Bleibe dran...
      P.P.S.: Eine Einrastfunktion auf DIN-Normwertreihen wäre sinnvoll, eventuell auch Widerstands-Farbcodes. Aber das ist eine andere Geschichte...

      Quellcode

      1. WindowTitle " P.Specht´s U I P R Einphasen-Kreuz-& Quer-Rechner"
      2. ' (D) Demo 2016-12 by P.Specht, Vienna/Austria. NO WARRANTY WHATSOEVER!
      3. WindowStyle 24:font 2:set("decimals",17):Window 400,175
      4. Declare U!,I!,P!,R!, u$,i$,p$,r$ , l1$,l2$,l3$
      5. font 2:print "\n Dieser Rechner verknüpft die vier Größen "
      6. print " Spannung, Strom, Leistung und Widerstand. "
      7. font 0:print " Die letzten beiden Eingaben stellen die "
      8. print " jeweils vorgegebenen Größen dar. Die an-"
      9. print " deren beiden Werte werden errechnet und "
      10. font 2:print " sind in fetter Schrift dargestellt."
      11. font 0:print " RETURN springt von Feld zu Feld. Ohne Einga-"
      12. print " bewerte (zB: 1e-6) wird nichts verändert,"
      13. print " sondern nur weitergesprungen! ";
      14. font 2:print " [Start]";:waitinput
      15. Repeat:Cls
      16. if (l1$="U") or (l2$="U"):font 0:else:font 2:endif
      17. locate 3,1 :Print " Spannung U [Volt V] = ";
      18. locate 3,26:Print format$("%g",U!);
      19. if (l1$="I") or (l2$="I"):font 0:else:font 2:endif
      20. locate 5,1 :Print " Strom I [Ampere A] = ";
      21. locate 5,26:Print format$("%g",I!);
      22. if (l1$="P") or (l2$="P"):font 0:else:font 2:endif
      23. locate 7,1 :Print " Leistung P [Watt W] = ";
      24. locate 7,26:Print format$("%g",P!);
      25. if (l1$="R") or (l2$="R"):font 0:else:font 2:endif
      26. locate 9,1 :Print " Widerstand R [Ohm] = ";
      27. locate 9,26:Print format$("%g",R!);
      28. locate 3,26:input u$:if u$>"":U!=val(u$):l3$=l2$:l2$=l1$:l1$="U":goto "calc":endif
      29. locate 5,26:input i$:if i$>"":I!=val(i$):l3$=l2$:l2$=l1$:l1$="I":goto "calc":endif
      30. locate 7,26:input p$:if p$>"":P!=val(p$):l3$=l2$:l2$=l1$:l1$="P":goto "calc":endif
      31. locate 9,26:input r$:if r$>"":R!=val(r$):l3$=l2$:l2$=l1$:l1$="R":goto "calc":endif
      32. calc:
      33. if l1$="U"
      34. if l2$="U":l2$=l3$:l3$="" :goto "calc"
      35. elseif l2$="I":P!=U!*I!:case i!=0:i!=val("1e-50"):R!=abs(U!/I!)
      36. elseif l2$="P":case u!=0:u!=val("1e-50"):I!=P!/U!:case P!=0:P!=val("1e-50"):R!=abs(sqr(U!)/P!)
      37. elseif l2$="R":case r!=0:r!=val("1e-50"):I!=U!/R!:P!=sqr(U!)/R!
      38. endif
      39. elseif l1$="I"
      40. if l2$="U":l1$="U":l2$="I":goto "calc"
      41. elseif l2$="I":l2$=l3$:l3$="" :goto "calc"
      42. elseif l2$="P":case i!=0:i!=val("1e-50"):U!=P!/I!:R!=P!/sqr(I!)
      43. elseif l2$="R":U!=I!*R!:P!=sqr(I!)*R!
      44. endif
      45. elseif l1$="P"
      46. if l2$="U":l2$="P":l1$="U":goto "calc"
      47. elseif l2$="I":l2$="P":l1$="I":goto "calc"
      48. elseif l2$="P":l2$=l3$:l3$="" :goto "calc"
      49. elseif l2$="R":U!=sqrt(abs(P!*R!)):case R!=0:R!=val("1e-50"):I!=sqrt(P!/R!)
      50. endif
      51. elseif l1$="R"
      52. if l2$="U":l2$="R":l1$="U":goto "calc"
      53. elseif l2$="I":l2$="R":l1$="I":goto "calc"
      54. elseif l2$="P":l2$="R":l1$="P":goto "calc"
      55. elseif l2$="R":l2$=l3$:l3$="" :goto "calc"
      56. endif
      57. endif
      58. until 0
      Alles anzeigen

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