Algorithmen, Teil IX.: Computer und andere Haustiere

    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. Wurzelbehandlung (Heron)
      ====================
      Das Heron-Verfahren zum Quadratwurzelziehen, hier auf XProfan-nahe Genauigkeit.
      Gruss

      P.S.: Daß auch die Lösungen von Polynomgleichungen als Wurzeln bezeichnet werden, ist auf eine kapitale Fehlübersetzung zurückzuführen. Details hier!

      Quellcode

      1. Windowtitle "Heron-Verfahren für das Wurzelziehen"
      2. Windowstyle 24:Window 800,600:declare v!,w!,f!
      3. set("decimals",17)
      4. whileloop 0,46:v!=2^(&Loop-16):w!=heronsqrt(v!)
      5. f!=w!-sqrt(v!):print v!,tab(30);w!,tab(59+(f!>=0));f!
      6. endwhile :waitinput :END
      7. proc heronsqrt :parameters a!:declare xn!,x!:xn!=2
      8. repeat :x!=xn!:xn!=0.5*(x!+a!/x!)
      9. until abs(xn!-x!)=0:return xn!
      10. endproc
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Ordnung muß sein
      ===============
      Der gute alte XCopy-Befehl aus Dos-6.2 wird auch heute noch (in emulierter Form) in Windows-Betriebssystemen zur Verfügung gestellt. Befehlszeilen-Schalter erlauben dabei, hierarchische Verzeichnissen samt allen Unterverzeichnissen, aber OHNE die darin befindlichen Dateien, zu kopieren. Auf Deutsch: Man kann damit neue Archive - z.B. für das aktuelle Jahr - anlegen, wobei die bewährte Archivstruktur des Vorjahres kopiert wird. Das erspart das mühsame händische Anlegen relativ stark verzweigter Directories (Verifiziert zumindest bis Win-7 64 SP1).

      Die nötigen Befehlzeilen-Schalter lauten bei mir:
      XCopy /T /E Quellpfad Zielpfad
      weil ich auch leergebliebene Verzeichnisse mitzukopieren pflege.
      Bitte die Befehlszeile stets an den eigenem Bedarf anpassen!

      Eine Beschreibung ALLER Befehlszeilenparameter erhält man nach Aufruf von CMD.EXE in der Cmd-Eingabezeile durch Eingabe von HELP XCOPY <Eingabetaste>. Bei meiner Win-7-Version wurden so die nachstehenden Schalter angezeigt (Spoiler aufklappen!).
      Gruss

      P.S.: Für Leute, die mit dem alten DOS-Schrott aus Windows-Vorzeiten nicht viel am Hut haben: Das sogenannte CMD-Fenster startet man z.B. in der "Start" - "Ausführen" Eingabezeile mit:
      Cmd <Eingabetaste>. HELP XCOPY liefert dann Hilfe-Informationen. Ein laufender Befehl kann normalerweise mit STRG+C abgebrochen werden. Beendet wird das CMD-Fenster durch Eingabe des Befehls EXIT<Eingabetaste>.
      Spoiler anzeigen

      Kopiert Dateien und Verzeichnisstrukturen.


      XCOPY Quelle [Ziel] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
      [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
      [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
      [/EXCLUDE:Datei1[+Datei2][+Datei3]...]

      Quelle Die zu kopierenden Dateien.

      Ziel Position und/oder Name der neuen Dateien.

      /A Kopiert nur Dateien mit gesetztem Archivattribut, ändert das Attribut nicht.

      /M Kopiert nur Dateien mit gesetztem Archivattribut,
      setzt das Attribut nach dem Kopieren zurck.

      /D:M-T-J Kopiert nur die an oder nach dem Datum geänderten Dateien.
      Ist kein Datum angegeben, werden nur Dateien kopiert,
      die neuer als die bestehenden Zieldateien sind.

      /EXCLUDE:Datei1[+Datei2][+Datei3]...
      Gibt eine Liste von Zeichenfolgen an. Jede Zeichenfolge sollte in einer einzelnen
      Zeile in der Datei angezeigt werden. Wenn eine der Zeichenfolgen Teil des absoluten Verzeichnispfads der zu kopierenden Datei ist, wird diese Datei vom Kopiervorgang
      ausgeschlossen. Beispiel: Bei der Zeichenfolge \obj\ oder .obj werden alle Dateien
      unterhalb des Verzeichnisses OBJ bzw. alle Dateien mit der Erweiterung .obj vom
      Kopiervorgang ausgeschlossen.

      /P Fordert vor dem Erstellen jeder Zieldatei eine Bestätigung.

      /S Kopiert Verzeichnisse und Unterverzeichnisse, die nicht leer sind.

      /E Kopiert alle Unterverzeichnisse (leer oder nicht leer).
      Wie /S /E. Mit dieser Option kann die Option /T geändert werden.

      /V überprft die Größe jeder neuen Datei.

      /W Fordert vor dem Beginn des Kopierens zu einem Tastendruck auf.

      /C Setzt das Kopieren fort, auch wenn Fehler auftreten.

      /I Falls das Ziel nicht vorhanden ist und mehrere Dateien kopiert
      werden, nimmt XCOPY an, dass das Ziel ein Verzeichnis ist.

      /Q Zeigt beim Kopieren keine Dateinamen an.

      /F Zeigt die Namen der Quell- und Zieldateien beim Kopieren an.

      /L Listet die Dateien auf, die ggf. kopiert werden.

      /G Ermöglicht das Kopieren von verschlüsselten Dateien an ein Ziel, an dem
      Verschlüsselung nicht unterstützt wird.

      /H Kopiert auch Dateien mit den Attributen 'Versteckt' und 'System'.

      /R Überschreibt schreibgeschützte Dateien.

      /T Erstellt die Verzeichnisstruktur, kopiert aber keine Dateien.
      Leere Verzeichnisse oder Unterverzeichnisse werden nicht kopiert.
      Um auch diese zu kopieren, müssen Sie die Optionen /T /E angeben.

      /U Kopiert nur Dateien, die im Zielverzeichnis vorhanden sind.

      /K Kopiert Attribute. Standardmäßig wird 'Schreibgeschützt' gelöscht.

      /N Beim Kopieren werden die erstellten Kurznamen verwendet.

      /O Kopiert Informationen über den Besitzer und die ACL.

      /X Kopiert Dateiüberwachungseinstellungen (bedingt /O).

      /Y Unterdrückt die Aufforderung zur Bestätigung, dass eine
      vorhandene Zieldatei überschrieben werden soll.

      /-Y Fordert zur Bestätigung auf, dass eine bestehende
      Zieldatei berschrieben werden soll.

      /Z Kopiert Dateien in einem Modus, der einen Neustart ermöglicht (Systembootdateien!)

      /B Kopiert den symbolischen Link anstelle des Ziels des Links.

      /J Kopiert ohne E/A-Puffer. Für große Dateien empfohlen.


      Die Option "/Y" kann in der Umgebungsvariable COPYCMD vordefiniert sein.
      Sie kann mit "/-Y" in der Befehlszeile deaktiviert werden.
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Spaß mit Zahlen
      ==============
      In einem Youtube-Vortrag (engl.) berichtet der Astronom Sean Caroll an einer Stelle von der Größenordnung der Vakuum-Energie (aka. Dunkle Energie), die das Universum auseinanderbeschleunigt und nennt die Zahl
      10^-8 erg / cm³. Das sind nicht gerade ISO-Maßeinheiten, dachte ich, da muss man schon mal umrechnen. Vielleicht kann ja jemand die folgenden Umrechnungsschritte nachkontrollieren:

      Dark Energy = Vacuum Energy of Empty Space = -10^-8 erg/cm³
      ... wobei 1 erg = 10^-7 [Joule = N.m = W.s], daher gilt: -10^-8 erg/cm³ =
      = -10^-15 J/cm³ = -10^-12 J/dm³ = -10^-9 J/m³ = -1 J / km³ = -1 W s/km³,
      Wir rechnen um auf übliche Haushaltseinheiten: 1 kWh = 3600000 Ws, daher
      -10^-8 erg/cm³ = -2,777777....*10^-6 kWh/km³ (Kilowattstunden je Kubikkilometer Weltraum)
      Da man Weltraum aber in Lichjahren misst, (1 Lichtjahr [Ly] = 9460730472580,800 km),
      reden wir über 8,4678666462371516595551248694562*10^38 km³, sprich
      846786664623715165955512486945620000000 Kubikkilometer, in denen also
      23.521.851.795.103.199.054.319.791.304.044 kWh pro Kubiklichtjahr unser Universum auseinandertreiben.

      Mensch, das kann sich bei den heutigen Energiepreisen ja bestenfalls Dagobert Duck leisten!
      Oder hab ich mich irgendwo verrechnet?
      Gruss

      P.S.: Jetzt weiß ich, warum meine Großmutter immer meinte: Junge, dreh das Licht ab wenn du rausgehst!
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Mottenkiste des vergessenen Wissens
      ============================
      Mensch, ich verblöde mir in letzter Zeit selbst unter der Hand. Höchste Zeit, selten gebrauchtes Schulwissen wieder mal aufzufrischen. (Das Symbol ==> soll bedeuten "daraus folgt').

      Grundregeln des Differenzierens
      =====================
      Sir Isaak Newton stand angeblich in Briefwechsel mit Gottfried Leibnitz, die heute beide als Erfinder der Infinitesimalrechnung gelten. Bloß daß Newton später glaubte, Leibnitz habe sein Know-How geklaut! Egal, hier die längst vergessenen Regeln:

      f, y, U, V ... Funktionen der veränderlichen Variable (hier: x), nach der dann auch differenziert wird.

      a, b: const! ==> a+b = k, a-b = c ==> k, c: const!
      # Konstante Summanden kann man zusammenfassen

      y = f(x) = n*x + c = n*x^1 + c
      ==> y'= dy/dx = n*x^0 + 0 = n*1+0 = n
      # Konstantenregel: Konstante Summanden werden zu 0, sie "verschwinden".

      # Faktorenregel: Funktional von x unabhängige Faktoren bleiben stehen.
      y = a*f(x) ==> y'=a*f'(x)

      # Summenregel: (U+V)'= U'+ V', oder ausführlicher:
      d( U(x) + V(x) )dx' = dU(x)/dx + dV(x)/dx

      # Produktregel:
      (U*V)'=U'*V + V'*U, oder ausführlicher:
      d( U(x)+V(x) )/dx = dU(x)/dx * V(x)+ dV(x)/dx * U(x)

      # Quotientenregel:
      (U/V)' = (U'V - V'U)/V^2, oder ausführlicher:
      d( U(x)/V(x) )/dx = (dU(x)/dx*V(x) - dV(x)/dx*U(x)) / V(x)^2

      # Kettenregel:
      dY(x)/dx = dY(t)/dt * dt(x)/dx, oder anders ausgedrückt:
      dG(F(x))/dx = dG(f)/df * dF(x)/dx
      ' Das bedeutet, Ableitungen verschachtelter Funktionen sind multiplikativ:
      ' Ableitung der 'Äusseren' Funktion (nach Wertänderung der Inneren Funktion)
      ' MAL der Ableitung dieser 'Inneren' Funktion nach der ursprünglichen Variable

      # Umkehrregel:
      dx(y)/dy =( 1 )/( dy(x)/dx )

      # Ableitung in Parameterform: t = param.
      dy(x)/dx = ( dy(t)/dt ) / ( dx(t)/dt )

      # Logarithmische Ableitung:
      dF(x)/dx = F(x) * d( ln(F(x) )/dx

      # Potenzregel:
      y=x^n ==> y'= dy/dx = n * x^(n-1)

      # Polarkoordinaten-Regel:
      Sei x=r*cos(w); y=r*sin(w) , dann gilt:
      y'= dy(x)/dx = (dr(w)/dw*sin(w)+r*cos(w)) / (dr(w)/dw*cos(w)-r*cos(w))

      # Implizit Differenzieren: d(F(x,y)/dxy = -1 * F_x1/F_x2
      dF(x1,x2)/dx = -1 * ( d(F(x1,x2)/dx1 ) / ( d(F(x1,x2)/dx2 )

      Gruss


      P.S.: Noch einige wichtige Basisdifferenziale anbei. Und so haben wir das Ganze mal auch in XProfan-tauglicher Form!
      Spoiler anzeigen

      ------------------------------------
      Wichtige Basis-Differenziale
      ------------------------------------
      y=exp(x) ==> y'=exp(x) 'so ist exp() ja definiert!
      y=exp(k*x) ==> y'= k*exp(k*x)
      y=a^x ==> y'= a^x *ln(a)
      y=ln(x) ==> y'= 1/x
      y=log_a(x) ==> y'= 1/(x*ln(a))

      Ableitung der Winkelfunktionen:
      y= sin(x) ==> y'= cos(x)
      y= cos(x) ==> y'= -sin(x)
      y= -sin(x) ==> y'= -cos(x)
      y= -cos(x) ==> y'= sin(x)
      y= tan(x) ==> y'= 1/sqr(cos(x)) = 1+sqr(tan(x))
      Wegen cot(x)=1/tan(x):
      y= cot(x) ==> y'= -1/sqr(sin(x)) =-1-1/sqr(tan(x))
      y= arcsin(x) ==> y'= 1/sqrt(1-sqr(x))
      y= arccos(x) ==> y'= -1/sqrt(1-sqr(x))
      y= arctan(x) ==> y'= 1/(1+sqr(x))
      y= arccot(x) ==> y'= -1/(1+sqr(x))

      Ableitung der Hyperbelfunktionen:
      y= sinh(x) ==> y'= cosh(x)
      y= cosh(x) ==> y'= sinh(x)
      y= tanh(x) ==> y'= 1/sqr(cosh(x))
      y= coth(x) ==> y'= -1/sqr(sinh(x))
      y= arsinh(x) ==> y'= 1/[+]sqrt(1+sqr(x))
      y= arcosh(x) ==> y'= 1/[+,-]sqrt(sqr(x)-1) für x>1
      y= artanh(x) ==> y'= 1/(1-sqr(x)) für abs(x)<1
      y= arcoth(x) ==> y'= 1/(1-sqr(x)) für abs(x)>1
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Gärtner-Ellipse
      =============
      Im Frühjahr blüht's, die Gärtner schlagen aus... und pflanzen ihre Rabatte gerne und oft in Ellipsenform. Nun hat nicht jeder Pflanzer zufällig einen PC oder wissenschaftlichen Taschenrechner dabei - also muss man sich mit einer Schnur behelfen. Die Sache läuft folgendermaßen:

      1. Zwei Punkte suchen, die die größte Ellipsenausdehnung = "Große Ellipsenachse" markieren. Provisorisch Pflöcke schlagen. Schnur per großer Schlaufenbildung beidseitig provisorisch locker gespannt anpflocken.
      2. Mittels "Schnur-Faltung" den Mittelpunkt der Ellipse suchen, dann im ca. rechten Winkel dazu einen Punkt suchen, der die halbe Breite der Ellipse ergeben wird. Auch den Gegenpunkt gegenüber prüfen (z.B. ob der Ellipse etwas im Weg wäre). Dort nun kleinen Pflock schlagen und beide Schlaufen der Schnur einhängen.
      3. Faltpunkt der Schnur (= Halbe Länge) mit der Großen Achse (einmal links, einmal rechst vom Mittelpunkt) zum Schnitt bringen: Das sind die Brennpunkte der Ellipse, wo nun größere Pflöcke reinkommen (Eventuell kann man dazu schon den jeweilis nächsten Pflock von Punkt 1 verwenden).
      4. Schnurschlaufen vom Hilfspflock lösen, je eine um einen der Brennpunkt-Pflöcke legen, mit Setzholz oder dem Hilfspflock aus Punkt 2 oder sogar mit professioneller Markerkreide im laufenden "Schnurfalz" dahingleiten und die Ellipse am Boden markieren. Dabei muß die Schnur eventuell über die Brennpunktpflöcke gehoben werden. Der Rest ist Gartenarbeit...

      Gruss

      P.S.: Wer die Zahl der einzukaufenden Pflanzen ermitteln will: Die Ellipsenfläche ergibt sich aus den Achsenlängen zu A [m²] = Große_Achse_[m] * Kleine_Achse_[m] * Pi() / 4, der einzukaufende Besatz über alle Pflanzenarten aus der durchschnittlichen Setzdichte je Quadratmeter * Ellipsenfläche.
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Korrektur zu 2 Beiträgen weiter oben:
      # Polarkoordinaten-Regel: Sei x=r*cos(w); y=r*sin(w) , dann gilt:
      y'= dy(x)/dx = (dr(w)/dw*sin(w)+r*cos(w)) / (dr(w)/dw*cos(w)-r*SIN(w))
      Sorry!

      Abt. Diverse Ellipsengleichungen
      =====================
      Für eine Ellipse in zentraler Normallage gilt bekanntlich:
      a: Große Halbachse, b: Kleine Halbachse

      (x/a)^2 + (y/b)^2 = 1

      bzw. obiges nach y aufgelöst: y = (b* +-sqrt(a^2-x^2))/a

      Anmerkung: In Polarkoordinaten sieht es noch einfacher aus
      (w: Winkel der Radialstrecke): x = a * cos(w) : y = b * sin(w)

      Wir verzichten darauf, statt x in obiger Formel a*cos(w) einzu-
      setzen, das ergäbe die sog. Halbparametrische Darstellung.
      Wäre ja auch doof, weil sich dann sofort y=b*sin(w) ergäbe,
      weil bekanntlich gilt: sin(w)^2=1-cos(w)^2

      Gruss

      P.S.: Nachstehend noch ein bisschen was für Mathe-Nerds.
      Spoiler anzeigen

      A. Fläche unter dem Ellipsenbogen im I. Quadranten:

      F = Integral(x=0..a; b/a*sqrt(a^2-x^2) ) =(a^2*b*arcsin(x/abs(a))+b*x*sqrt(a^2-x^2))/(2*a) + C
      C = Integrationskonstante. Hinweis: Beim bestimmten Integral gilt
      C = 0 und A = F(x_o)-F(x_u)

      B. Eine weitere (2.) Integration liefert:

      FF(y(x)) = (3*a^2*b*x*asin(x/abs(a))+sqrt(a^2-x^2)*(b*x^2+2*a^2*b))/(6*a)
      Folgt z.B. die x-Beschleunigung eines Körpers zwangsweise einer Ellipsengleichung,
      so kann man durch die 2. Integration auf den jeweiligen x-Ort des Körpers rückschließen.
      So arbeiten GPS-Systeme in Tunnels (wenn also keine Satellitenverbindung besteht).


      C. Die Ableitungen des Ellipsenbogens im I. Quadranten lauten:

      y' = -(b*x)/(a*sqrt(a^2-x^2))
      y''= -(a*b*sqrt(a^2-x^2))/((x-a)^2*(x+a)^2)
      y''' = (3*a*b*x*sqrt(a^2-x^2))/((x-a)^3*(x+a)^3)
      y^(4') = (12*a*b*x^2+3*a^3*b)/(sqrt(a^2-x^2)*(x^6-3*a^2*x^4+3*a^4*x^2-a^6))
      y^(5') = -(15*a*b*x*(4*x^2+3*a^2))/((x-a)^4*(x+a)^4*sqrt(a^2-x^2))
      y^(6') = (45*a*b*(8*x^4+12*a^2*x^2+a^4))/((x-a)^5*(x+a)^5*sqrt(a^2-x^2))
      y^(7') = (315*a*b*x*sqrt(a^2-x^2)*(8*x^4+20*a^2*x^2+5*a^4))/((x-a)^7*(x+a)^7)
      y^(8') = (315*a*b*(64*x^6+240*a^2*x^4+120*a^4*x^2+5*a^6))/((x-a)^7*(x+a)^7*sqrt(a^2-x^2))
      y^(9') = (2835*a*b*x*sqrt(a^2-x^2)*(64*x^6+336*a^2*x^4+280*a^4*x^2+35*a^6))/((x-a)^9*(x+a)^9)
      y^(10')= (14175*a*b*(128*x^8+896*a^2*x^6+1120*a^4*x^4+280*a^6*x^2+7*a^8))/((x-a)^9*(x+a)^9*sqrt(a^2-x^2))
      y^(11')= (155925*a*b*x*sqrt(a^2-x^2)*(128*x^8+1152*a^2*x^6+2016*a^4*x^4+840*a^6*x^2+63*a^8))/((x-a)^11*(x+a)^11)
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Ellipsenbogenlänge
      ===============
      Bogenlängen von Kurvenstücken werden mathematisch-analytisch durch Integration über unendlich kleine Geradenstückchen entlang der Kurve ermittelt. Die Formel dazu lautet:
      L = Integral (x=[Anfang..Ende]; SQRT( 1 + ( Kurvenanstieg_auf_Höhe_x )^2) ; dx).

      Allerdings gibt es Funktionen, die sich beharrlich jeder Integration entziehen, weil es in der Schul-Mathematik schlicht keine Regel dazu gibt, die die Sache nicht noch komplizierter machen würde!
      Die Ellipsenkurve y = b/a * Sqrt( a^2 - x^2) beispielsweise erzeugt genau solche Komplikationen. Seit etwa 1680 plagten sich die größten Mathematiker ihrer Zeit um eine Lösung, bis schließlich um 1880 die Erkenntnis dämmerte (und bewiesen wurde), daß eine "geschlossene Darstellung", also eine Lösungsangabe durch Kombination bekannter Funktionen schlicht und einfach nicht möglich ist.

      Was zuerst als "Schande der Mathematik" galt, wurde zu einem Glücksfall: Man erkannte völlig neue Gruppen von Funktionen (u.a. Elliptische Funktionen {Heisse Sache in der Cryptographie}, Gaußsche Glockenkurve, Bessel-Zylinderfunktionen etc. etc.), die ausschließlich durch Integrale darstellbar sind. Dadurch wurde die Suche nach schnellen Approximationsalgorithmen befeuert. Man erkannte, daß jeweils ganz unterschiedliche Lösungsverfahren für bestimmte Klassen von Integralfunktionen geeignet waren, andere dagegen nicht - oder zumindest nicht so elegant.

      Die Ellipsenbogenlänge ist deshalb nur durch Näherungsverfahren ermittelbar. Dabei spielt der Tradeoff zwischen Geschwindigkeit und Genauigkeit eine besondere Rolle. Für meinen privaten Bedarf (Gärtner-Ellipsen) reicht die untenstehende Formel jedenfalls locker aus!
      Gruss

      Brainfuck-Quellcode

      1. WindowTitle "Ellipsenumfangsstück mit 4. Näherungsformel berechnen"
      2. '(CL)Copyleft 2015-06 by P.Specht, Vienna 'Q: Wikipedia; OHNE JEGLICHE GEWÄHR!
      3. WindowStyle 24
      4. declare a!,b!,w1!,w2!,tmp!
      5. rept:
      6. cls
      7. font 2
      8. Print "\n Umfangsstück einer Ellipse in zentraler Normallage im I. Quadranten"
      9. Print " -------------------------------------------------------------------"
      10. print "\n Bitte Ellipsendaten eingeben:\n"
      11. h1:
      12. print " Große Halbachse a = ";:input a!
      13. if (a!<0):beep:Print " Positive Werte bitte!":goto "h1":endif
      14. h2:
      15. print " Kleine Halbachse b = ";:input b!
      16. if (a!=0) and (b!=0):print "\n ... AUF WIEDERSEHEN! ":waitinput:End:endif
      17. if (b!<0):beep:Print " Positive Werte bitte!":goto "h2":endif
      18. if b!>a!:tmp!=a!:a!=b!:b!=tmp!:print "\n Normallage (a>b) durch Achsentausch hergestellt!":endif
      19. tmp!=sqrt(sqr(a!)-sqr(b!))/a!
      20. print "\n Numerische Exzentrizität (Quetschung) Epsilon = ";format$("%g",tmp!)
      21. if tmp!>0.98:beep:color 14,0:
      22. print "\n *** Genauigkeitswarnung (Hohe Exzentrizität)! ***"
      23. color 0,15:endif
      24. Repeat
      25. print "\n"
      26. print " Bogenlänge im I. Quadranten berechnen "
      27. print " ----------------------------------- "
      28. g1:
      29. print " ab Zentriwinkel w1 [°] = ";:input w1!
      30. if (w1!<0) or (w1!>90):beep:Print " Wert zw. 0° und 90° bitte!":goto "g1":endif
      31. g2:
      32. print " bis Zentriwinkel w2 [°] = ";:input w2!
      33. if (w2!<0) or (w2!>90):beep:Print " Wert zw. 0° und 90° bitte!":goto "g2":endif
      34. case (w1!=0) and (w2!=0):break
      35. if w1!>w2!:tmp!=w1!:w1!=w2!:w2!=tmp!:endif
      36. print "\n Die Bogenlänge zwischen diesen Winkeln beträgt ";
      37. print format$("%g", L4(a!,b!,w2!*pi()/180) - L4(a!,b!,w1!*pi()/180) )
      38. print
      39. waitinput
      40. cls
      41. until %key=27
      42. goto "rept"
      43. End
      44. proc L4 :parameters a!,b!,w!:case a!=0:return 0
      45. var eps2!=1-sqr(b!)/sqr(a!):var sw!=sin(w!):var ssw!=sqr(sw!)
      46. var sssw!=ssw!*sw!:var sssssw!=sssw!*ssw!:var cw!=cos(w!):var scw!=sw!*cw!
      47. var L4!=a!*(w!+0.25*eps2!*(scw!-w!)+0.015625*sqr(eps2!)*(2*sssw!*cw!+3*scw!-3*w!))+\
      48. a!*(0.00130208333333333333*eps2!*sqr(eps2!)*(8*sssssw!*cw!+10*sssw!*cw!+15*scw!-15*w!))
      49. Return L4!
      50. endproc
      Alles anzeigen
      P.S.: Für wenig gequetschte Ellipsen mag die oben verwendete, durch Polynom-Anpassung gefundene schnelle Formel ja genau genug sein - bei starker Exzentrizität wird jedoch die 5%-Fehlermarke überschritten! Bei Bedarf müssten dann andere Verfahren herangezogen werden, etwa das Duplikationstheorem, der AGM-Algorithmus (Arithmetisch-geometrisches Mittel) oder die Landen-Transformation.
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • [Blockierte Grafik: http://www.roseninsel.org/index.php/component/joomgallery/image?view=image&format=raw&type=orig&id=28]Bittesehr, hier ein Beispiel: Damit die Einzelbeete überall gleich breit werden, muss man (am besten von außen nach innen) die Ellipsenachsen beidseitig um die selbe Strecke kürzen.
      Gruss
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
    • Abt. Ellipsenumfang
      =============
      nach der Näherungsformel von Ramanujan berechnen - das hatten wir als Algorithmus schon mal. Hier wird das Ergebnis aber in die Zwischenablage kopiert, was für Vergleichszwecke mit genaueren Verfahren (Kontrolle der Formel durch numerische Integration) wichtig ist.
      Gruss

      Quellcode

      1. WindowTitle "Näherungsformel für den Umfang einer Ellipse"
      2. 'Q:http://www.mathematik.ch/anwendungenmath/ellipsenumfang/
      3. declare a!,b!,lambda!,U!,e!,epsilon!:Windowstyle 24
      4. font 2:set("decimals",17):Sprungmarke1:
      5. Cls
      6. print "\n\n Große Halbachse a = ";:input a!
      7. print "\n Kleine Halbachse b = "; :input b!
      8. print "\n\n Gemäß Näherungsformel von Ramanujan "
      9. print "\n beträgt der Umfang der Ellipse: ";
      10. lambda!=(a!-b!)/(a!+b!)
      11. U!=(a!+b!)*pi()*(1+3*sqr(lambda!)/(10+sqrt(4-3*sqr(lambda!))))
      12. print U!:clearclip:putclip str$(U!)
      13. print "\n Der Wert wurde in die Zwischenablage kopiert."
      14. print "\n\n Die Lineare Exzentrizität e beträgt: ";
      15. e!=if( a!>b!, sqrt(sqr(a!)-sqr(b!)), -1*sqrt(sqr(b!)-sqr(a!)) )
      16. print e!
      17. print "\n Numerische Exzentrizität eps beträgt: ";
      18. epsilon!= if(a!>b!, sqrt(1-sqr(b!)/sqr(a!)), -1*sqrt(sqr(b!)/sqr(a!)-1) )' = e/a
      19. print epsilon!
      20. waitinput
      21. Goto "Sprungmarke1"
      22. End
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
    • Abt. Schmiegekreis an Ellipse
      ===================
      Hier eine weitere Nonsens-Demo zum Thema Ellipsen: Schmiegekreise in einen Ellipsenpunkt weisen dort die selbe Krümmung auf wie die Ellipse selbst - und anschmiegen kann bekanntlich nicht schlecht sein!
      Gruss

      P.S.: Die Figur, die ein Schmiegekreis mit seinem Mittelpunkt beschreibt, heißt allgemein "Evolute", im speziellen Fall der Ellipse nicht Astrid, sondern "Schiefe Astroide". Jetzt wisst Ihr also auch, wer sich da anschmiegt!

      Quellcode

      1. WindowTitle "Schmiegekreis an Ellipsenpunkt"
      2. ' Early-Alpha-Version 2015-7 by P. Specht, Wien. Ohne jedwede Gewähr!
      3. WindowStyle 24:font 2:randomize
      4. declare xh!,yh!, r!,x!,y!,a!,b!, v!,w!,f!, xm!,ym!, xx!,xxx!,aa!,bb!,aaa!,aaaa!
      5. Window 0,0-%maxx,%maxy:xh!=int(width(%hwnd)/2):yh!=int(height(%hwnd)/2)
      6. CLS 0:f!=-pi()/180
      7. a!=200
      8. b!=200
      9. Repeat
      10. aa!=sqr(a!):aaa!=aa!*a!:aaaa!=sqr(aa!):bb!=sqr(b!)
      11. WHILELOOP 0,360:v!=&loop*f!
      12. x!=a!*cos(v!)
      13. case abs(x!)>=abs(a!):goto "skip" ' Div/0 Problem! Endpunkte erfordern andere Formeln
      14. MCLS %maxx,%maxy,0 '$FFFFFF
      15. StartPaint -1
      16. usepen 0,1,rgb(0,255,0):line 0,yh! - 2*xh!,yh!:line xh!,0 - xh!,2*yh!
      17. usebrush 0,rgb(0,0,0):usepen 0,2,rgb(255,255,255)
      18. ellipse xh!+a!,(yh!-b!) - xh!-a!,yh!+b!
      19. DrawText 20,20," Ende: ESC gedrückt halten! "
      20. xx!=sqr(x!)
      21. y!=((&Loop<=180)-(&Loop>180))*b!/a!*sqrt(aa!-xx!):xxx!=xx!*x!
      22. r!=((xx!-aa!)*sqrt(aa!-xx!)*((-(bb!-aa!)*xx!-aaaa!)/(xx!-aa!))^(3/2))/(aaa!*abs(a!)*b!)
      23. xm!= -((bb!-aa!)*xxx!)/aaaa!
      24. ym!=((y!>=0)-(y!<0)) * (bb!-aa!)*sqr(xx!-aa!)/(aaa!*b!*sqrt(aa!-xx!))
      25. usepen 0,17,rgb(255,0,255):line xh!+x!,(yh!-y!) - xh!+x!+1,yh!-y!
      26. usepen 0,2,rgb(255,0,0):moveto xh!+xm!+r!,yh!-ym!
      27. whileloop 0,360,sqrt(a!+b!)/3:w!=&Loop*-f!
      28. lineto xh!+xm!+r!*cos(w!),yh!-ym!-r!*sin(w!)
      29. endwhile
      30. usepen 0,12,rgb(255,255,0):line xh!+xm!,(yh!-ym!) - xh!+xm!,yh!-ym!
      31. EndPaint:MCopyBMP 0, 0 - %maxx,%maxy > 0, 0; 0
      32. skip:
      33. waitinput 10
      34. x!=x!+3
      35. case (%key=27) :BREAK
      36. ENDWHILE
      37. ' Ellipsenveränderung:
      38. a!=a!*1.05
      39. b!=b!*0.95
      40. UNTIL %key=27
      41. END
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Taugt's nix? Mach doch 'nen miesen Bildschirmschoner draus!
      ===========================================
      (Bezieht sich auf oben :cursing: )
      Gruss

      P.S.: Zum Vergleich ein Schoner aus Amiga-Zeiten

      Quellcode

      1. WindowTitle "BILDSCHIRMSCHONER mit Schmiegekreis an Ellipsenpunkt"
      2. '(CL) CopyLeft 2015-07 by P. Specht, Wien. Ohne jedwede Gewähr!
      3. WindowStyle 16 | 64 :font 2:randomize
      4. declare xh!,yh!, r!,x!,y!,a!,b!, v!,w!,f!, xm!,ym!, xx!,xxx!,aa!,bb!,aaa!,aaaa!
      5. declare x45!,y45!,c&
      6. Window 0,0-%maxx,%maxy:xh!=int(width(%hwnd)/2):yh!=int(height(%hwnd)/2)
      7. CLS 0:f!=-pi()/180
      8. start:
      9. a!=100
      10. b!=500
      11. MCLS %maxx,%maxy,0 '$FFFFFF
      12. Repeat
      13. aa!=sqr(a!):aaa!=aa!*a!:aaaa!=sqr(aa!):bb!=sqr(b!)
      14. x45!=a!*b!/sqrt(sqr(a!)+sqr(b!)):y45!=b!/a!*sqrt(sqr(a!)-sqr(x45!))
      15. 'MCLS %maxx,%maxy,0 '$FFFFFF
      16. c&=rgb(rnd(256),rnd(256),rnd(256))
      17. WHILELOOP 0,360,1+rnd(22):v!=&loop*f!
      18. x!=a!*cos(v!)
      19. case abs(x!)>=abs(a!):goto "skip" ' Div/0 Problem! Endpunkte erfordern andere Formeln
      20. ' MCLS %maxx,%maxy,0 '$FFFFFF
      21. StartPaint -1
      22. usepen 0,1,rgb(0,255,0):line 0,yh! - 2*xh!,yh!:line xh!,0 - xh!,2*yh!
      23. usebrush 0,rgb(0,0,0):usepen 0,2,rgb(255,255,255)
      24. ellipse xh!+a!,(yh!-b!) - xh!-a!,yh!+b!
      25. DrawText 20,20," Ende: ESC gedrückt halten! "
      26. xx!=sqr(x!)
      27. y!=((&Loop<=180)-(&Loop>180))*b!/a!*sqrt(aa!-xx!):xxx!=xx!*x!
      28. r!=((xx!-aa!)*sqrt(aa!-xx!)*((-(bb!-aa!)*xx!-aaaa!)/(xx!-aa!))^(3/2))/(aaa!*abs(a!)*b!)
      29. xm!= -((bb!-aa!)*xxx!)/aaaa!
      30. ym!=((y!>=0)-(y!<0)) * (bb!-aa!)*sqr(xx!-aa!)/(aaa!*b!*sqrt(aa!-xx!))
      31. usepen 0,17,rgb(255,0,255):line xh!+x!,(yh!-y!) - xh!+x!+1,yh!-y!
      32. usepen 0,2,c& 'rgb(255,0,0)
      33. moveto xh!+xm!+r!,yh!-ym!
      34. whileloop 0,360,sqrt(a!+b!)/3:w!=&Loop*-f!
      35. lineto xh!+xm!+r!*cos(w!),yh!-ym!-r!*sin(w!)
      36. endwhile
      37. usepen 0,12,rgb(255,255,0):line xh!+xm!,(yh!-ym!) - xh!+xm!,yh!-ym!
      38. usepen 0,12,rgb(0,255,0):line xh!+x45!,(yh!-y45!) - xh!+x45!+1,yh!-y45!
      39. EndPaint:MCopyBMP 0, 0 - %maxx,%maxy > 0, 0; 0
      40. skip:
      41. waitinput 12
      42. case (%key=27) :END
      43. ENDWHILE
      44. ' Ellipsenveränderung:
      45. a!=a!*1.05
      46. b!=b!*0.95
      47. UNTIL (%key=27) or (a!>900)
      48. GOTO "start"
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Erweiterte Suche unter modernen Windows-Versionen
      ======================================
      Aus der Windows-Onlinehilfe, zur allg. Kenntnisnahme (Anlaß: Ich selbst war 5 Jahre lang zu doof dazu, die Anleitung zu lesen und habe mich über die neue Suchfunktion nur grün und blau geärgert...)

      Hilfetext:: Suchvorgänge unter modernen Windows-Versionen können ausgeführt werden, indem Sie einfach nur ein paar Buchstaben in das Suchfeld eingeben. Ihnen stehen aber auch **erweiterte Suchmethoden** zur Verfügung. Details dazu nachstehend.
      Gruss
      Spoiler anzeigen

      ERWEITERTE SUCHMETHODEN
      =======================
      1. Tipp: Wenn
      Sie den Dateityp einer Datei kennen, können Sie im Suchfeld einfach die
      Dateierweiterung (z. B. "JPG") eingeben. Weitere Informationen zur
      Windows-Fotoanzeige finden Sie unter Suchen einer Datei oder eines
      Ordners.

      2. Tipp: Hinzufügen von Operatoren
      Eine Möglichkeit, einen Suchvorgang zu optimieren, besteht in der Verwendung der Operatoren UND, ODER und NICHT. Werden die Operatoren verwendet, müssen sie in Großbuchstaben eingegeben werden.

      tropisch UND Insel
      Hiermit werden Dateien gefunden, die die Wörter "tropisch" und "Insel" enthalten (auch wenn sich die Wörter in der Datei an verschiedenen Stellen befinden). Bei einem einfachen Textsuchvorgang wird das gleiche Ergebnis erzielt wie bei der Eingabe von "tropische Insel."

      tropisch NICHT Insel
      Hiermit werden Dateien gefunden, in denen das Wort "tropisch", aber nicht das Wort "Insel", enthalten ist.

      tropisch ODER Insel
      Sucht entweder nach tropisch oder nach Insel oder beides

      3. Tipp: Suchfilter
      Suchfilter sind eine neue Windows 7-Funktion, mit der die Suche nach Dateien nach ihren Eigenschaften (z. B. Autor oder Dateigröße) vereinfacht wird. Und so fügen Sie einer Suche einen Suchfilter hinzu:

      - Öffnen Sie den Ordner, die Bibliothek oder das Laufwerk, der bzw. die bzw. das durchsucht werden soll.

      - Klicken Sie auf das Suchfeld, und klicken Sie dann auf einen Suchfilter (z. B. Aufnahmedatum: in der Bildbibliothek).

      - Klicken Sie auf eine der verfügbaren Optionen. (Wenn Sie auf Aufnahmedatum: geklickt haben, wählen Sie z. B. ein Datum oder einen Datumsbereich aus.)

      Suchfilter "Aufnahmedatum" im Suchfeld
      Suchfilter "Aufnahmedatum"
      Sie können einer Suche mehrere Suchfilter hinzufügen und Suchfilter auch mit normalen Suchbegriffen kombinieren, um die Suche weiter einzugrenzen.

      Suchfilter "Markierungen" im Suchfeld
      Sie können zwei Suchfilter zum Suchen nach einem Bild verwenden, das die Markierung "Familie" aufweist und vor langer Zeit aufgenommen wurde.

      Hinweis: Abhängig von den Orten, an denen Sie suchen, sind nur bestimmte Suchfilter verfügbar. Wenn Sie z. B. in der Dokumentbibliothek suchen, werden andere Suchfilter als in der Bildbibliothek angezeigt. Sie können nicht festlegen, welche Suchfilter angezeigt werden, aber Sie können den Dateityp ändern, für den eine Bibliothek optimiert ist. Dadurch wiederum ändern sich die Suchfilter, die beim Suchen in dieser Bibliothek verfügbar sind. Informationen zu den dafür erforderlichen Schritten finden Sie unter "Anpassen einer Bibliothek".

      4. Tipp: Optimieren einer Suche mithilfe von Stichwörtern

      Sie können bestimmte Stichwörter verwenden, um nach einer Eigenschaft zu filtern, die beim Klicken in das Suchfeld nicht angezeigt wird. Zu diesem Zweck geben Sie in der Regel einen Eigenschaftenname gefolgt von einem Doppelpunkt oder manchmal auch von einem Operator und einem Wert ein. Bei Stichwörtern muss keine Groß-/Kleinschreibung beachtet werden.

      Beispielsuchbegriff

      System.FileName:~<"Notizen"
      Dateien, die im Namen mit "Notizen" beginnen. Die Zeichenfolge ~< bedeutet "beginnt mit".

      System.FileName:="Quartalsbericht"
      Dateien mit dem Namen "Quartalsbericht". Das Gleichheitszeichen (=) bedeutet "stimmt überein mit".

      System.FileName:~="Pro"
      Dateien, in dessen Namen das Wort "Pro" enthalten ist oder die die Zeichenfolge "pro" in einem anderen Wort enthalten (z. B. "Prozess" oder "Produkt"). Das Zeichen ~= bedeutet "enthält".

      System.Kind:<>Bild
      Dateien, die keine Bilder sind. Das Zeichen ~<> bedeutet "ist nicht".

      System.DateModified:25.05.2010
      Dateien, die an diesem Datum geändert wurden. Wenn Sie System.DateModified:2010" eingeben, werden nur Dateien zurückgegeben, die im Laufe des angegebenen Jahres geändert wurden.

      System.Author:~!"Wacker"
      Dateien, deren Autoren nicht "Wacker" im Namen haben. Das Zeichen ~! bedeutet "enthält nicht".

      System.Keywords:"Abendrot"
      Dateien, die als Markierung das Wort Abendrot aufweisen.

      System.Size:<1MB
      Dateien, die kleiner als 1 MB sind.

      System.Size:>1MB
      Dateien, die größer als 1 MB sind.


      Tipp 5: Sie können das Fragezeichen (?) als Platzhalter für ein einzelnes Zeichen und ein Sternchen (*) als Platzhalter für einen beliebige Anzahl von Zeichen verwenden.

      Sie können auch die Operatoren UND, ODER und NICHT mit Suchstichwörtern kombinieren. (Beachten Sie, wie sich durch die Verwendung von Klammern die Ergebnisse einer Suche ändern.)

      Beispielsuchbegriff Ergebnis

      System.Author:Roland UND Wacker
      Dateien, die von Roland erstellt wurden, sowie alle Dateien, in denen das Wort Wacker im Dateinamen oder in einer Dateieigenschaft vorkommt.

      System.Author:Roland UND System.DateModified:>2009
      Hiermit werden nur Dateien gefunden, die als von Roland nach 2009 erstellt wurden.

      System.Author:(Rol* UND Wacker)
      Dateien, die entweder "Rolf" und "Wacker" oder "Roland" und "Wacker" als Autoren aufweisen.

      System.Author"Roland Wacker"
      Dateien, die von einer Person mit genau diesem Namen erstellt wurden.


      Tipp 6: Suchen unter Verwendung natürlicher Sprache

      Sie können die Suche unter Verwendung natürlicher Sprache aktvieren, um Suchvorgänge einfacher auszuführen, d. h., ohne dass Doppelpunkte und ohne dass UND und ODER in Großbuchstaben eingegeben werden müssen. Vergleichen Sie z. B. diese beiden Suchvorgänge:

      Ohne natürliche Sprache Mit natürlicher Sprache

      System.Music.Artist:(Beethoven ODER Mozart) Musik Beethoven oder Mozart
      System.Kind:Dokument System.Author:(Roland UND Wacker) Dokumente Roland und Wacker

      So aktivieren Sie die Suche unter Verwendung natürlicher Sprache
      - Öffnen Sie die Ordneroptionen, indem Sie auf die Schaltfläche StartSchaltfläche "Start" klicken, auf Systemsteuerung klicken, auf Darstellung und Anpassung klicken und dann auf Ordneroptionen klicken.
      - Klicken Sie auf die Registerkarte Suchen.
      - Aktivieren Sie das Kontrollkästchen Unter Verwendung natürlicher Sprache suchen


      Tipp 7: Auch wenn die Suche unter Verwendung natürlicher Sprache aktiviert ist, können Sie das Suchfeld wie gehabt verwenden. Wenn Sie Operatoren oder Stichwörter für die Suche verwenden möchten, ist auch dies möglich. Der Unterschied besteht allein darin, dass Sie Suchvorgänge unter Verwendung einer weniger formalen Methode eingeben können. Hier sind einige Beispiele:

      E‑Mail heute
      Dokumente 2011
      Autor Susanna
      Bilder Urlaub

      Hinweis: Wenn Sie die Suche unter Verwendung natürlicher Sprache aktivieren, werden bei manchen Suchvorgängen mehr Ergebnisse als erwartet zurückgegeben. Wenn Sie z. B. nach "E‑Mail heute" suchen, werden alle Nachrichten angezeigt, die heute gesendet wurden, sowie alle Nachrichten, in deren Inhalt das Wort "heute" vorkommt.
      ---
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
    • Abt. Keine Schonzeit für Astroiden
      ======================
      ... hier der nächste sinnlose Bildschirmschoner. Einzig positive Meldung: Dabei ist es gelungen, den jeweiligen Ellipsenpunkt auf seine Evolute, die schiefe Asteroide mit einer vereinfachten Formel abzubilden (Beim ersten Versuch - einge Beiträge weiter oben - wurde ja nur vereinzelt der jeweilige Schmiegekreismittelpunkt ermittelt).
      Gruss

      P.S.:
      Spoiler anzeigen
      Die Idee war dabei, zu prüfen ob via zugehöriger Astroide (- selbst eine nicht-integrable Kurve) durch irgendeine Differenzoperation vielleicht doch noch eine geschlossene Integrationsformel für den
      Ellipsenumfang gefunden wäre, so nach dem Motte -1 x -1 = +1... Ein solches Unterfangen stellt sich allerdings als ähnlich sinnlos heraus wie die Idee, die Zahl Pi einfacher ermitteln zu können, in dem man sie erst mal durch die Zahl e (=Exp(1)) dividiert. Antwort: Kompletter Blödsinn, da kommt bloß etwas noch komplizierteres raus. Mist! Wieder nix mit der Fields-Medaille !

      Quellcode

      1. 'Windowtitle "BILDSCHIRMSCHONER: Schiefe Astroide als Evolute der Ellipse"
      2. '(CL) CopyLeft 2015-07 by P.Specht, Wien; OHNE JEGLICHE GEWÄHR!
      3. '(Vereinfachte Formeln für Schmiegekreis-Mittelpunkt und -Radius)
      4. Windowstyle 16 | 64 '24
      5. Window 0,0-%maxx,%maxy:Randomize:font 2
      6. var xh&=width(%hwnd)\2:var yh&=height(%hwnd)\2
      7. declare a!,b!,x!,y!,xa!,ya!,xe!,ye!,xo!,yo!,w!
      8. declare cw!,cccw!,sw!,sssw!,aa!,bb!,aambbda!,bbmaadb!
      9. declare r!,v!,xl!,yl!,xv!,yv!
      10. var f!=Pi()/180:usebrush 0,1
      11. MEHR:
      12. print "\n ENDE: ESC HALTEN! "
      13. a!=-400
      14. b!=200
      15. REPEAT
      16. aa!=sqr(a!):bb!=sqr(b!)
      17. if a!<>0:aambbda!=(aa!-bb!)/a!:else :aambbda!=10000:endif
      18. if b!<>0:bbmaadb!=(bb!-aa!)/b!:else :bbmaadb!=10000:endif
      19. usepen 0,1+rnd(15),rgb(255,0,0):Ellipse xh&-a!,yh&+b! - xh&+a!,yh&-b! 'Alternative A: Hier
      20. x!=a!:y!=0 : xe!=aambbda!:ye!=0
      21. whileloop 0,360,30 :w!=&Loop*f!
      22. cw!=cos(w!):cccw!=cw!*sqr(cw!):sw!=sin(w!):sssw!=sw!*sqr(sw!)
      23. 'Ellipsensegment:
      24. xa!=x!:ya!=y!:x!=a!*cw!:y!=b!*sw!
      25. ' usepen 0,1,rgb(255,0,0):line xh&+x!,(yh&-y!) - xh&+xa!,(yh&-ya!) 'Alternative B
      26. 'Zugehöriges Schief-Asteroidensegment:
      27. xo!=xe!:yo!=ye!:xe!=aambbda!*cccw!:ye!=bbmaadb!*sssw!
      28. ' usepen 0,1,rgb(0,0,255):line xh&+xe!,(yh&-ye!) - xh&+xo!,(yh&-yo!) ' Pos 1
      29. ' Schmiegekreis einzeichnen
      30. r!=sqrt(sqr(x!-xe!)+sqr(y!-ye!))
      31. usepen 0,1,rgb(255,200,255): ellipse xh&+xe!+r!,yh&+ye!+r! - xh&+xe!-r!,yh&+ye!-r!
      32. usepen 0,1,rgb(0,0,255):line xh&+xe!,(yh&-ye!) - xh&+xo!,(yh&-yo!) ' Alternative Pos. 2
      33. endwhile
      34. waitinput 10
      35. ' Achsenänderung per Durchlauf:
      36. a!=a!+1
      37. b!=b!-1
      38. if a!>800
      39. a!=-200
      40. b!=400
      41. endif
      42. until %key=27
      43. END
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Historische Algorithmen
      ===================
      Nur wenige können sich noch daran erinnern, daß es einmal Homecomputer gab, die noch keine FPU (Floating Point Unit) eingebaut hatten. Mit mathematischen Algorithmen war das deshalb so eine Sache: Nur mit Klimmzügen kam man über 10-stellige Genauigkeit hinaus! Das nachstehende Machwerk zeigt, wie man damals dennoch die Exponentialfunktion Exp() und den Natürlichen Logarihmus Ln() auf 14 gültige Stellen bringen konnte!

      Gruss

      P.S.: Eventuell könnte das ja für ein XProfan mit Quad-Precision einmal nützlich sein *LOL*. Selbsverständlich habe ich auch sämltiche GOTO's dringelassen. Geht ja um Geschichtsaufarbeitung :-) !

      Quellcode

      1. CLS
      2. ' Translation from a TrueBasic-Adaption of a Fortran 77 Pgm for XPROFAN 11.2a
      3. ' 2015-07 by P.Specht's 'Historic Algorithms for EXP and LN from Non-FPU-Times'
      4. set("decimals",18)
      5. 'Print "FORMAT CHECK"
      6. 'print exp(ln(7))
      7. 'print format$("0.###################e+0000",exp(ln(7)))
      8. 'print format$("0.###############",exp(ln(7)))
      9. 'print format$("%g",exp(ln(7)))
      10. 'waitinput
      11. ' Main Pgm
      12. Declare x!
      13. Print "\n\n Please compare FPU results vs. Proc results:\n"
      14. x!=1.9459101490553133
      15. print " EXP(";format$("%g",x!);") = ";format$("%g",exp(x!)),format$("%g",expn(x!))
      16. print "\n Absolute Error is "; format$("0.###e+000",exp(x!)-expn(x!))
      17. x!=7 '1.000001
      18. print "\n\n LN(";format$("%g",x!);") = ";format$("%g",ln(x!)),format$("%g",logm(x!))
      19. print "\n Absolute Error is "; format$("0.###e+000",ln(x!)-logm(x!))
      20. waitinput
      21. END
      22. proc EXPN :parameters x!
      23. 'no fpu'-style exponential function to achive 14 accurate digits
      24. declare w!,e!,u!,s!,t!,n!
      25. w!=0
      26. case x!<-709:goto "g25"
      27. e!=2.71828182845904524
      28. u!=abs(x!)
      29. w!=1
      30. g11:
      31. case u!<1 :goto "g15"
      32. w!=e!*w!
      33. u!=u!-1
      34. goto "g11"
      35. g15:
      36. s!=0
      37. t!=1
      38. n!=0
      39. g18:
      40. s!=s!+t!
      41. n!=n!+1
      42. t!=t!*u!/n!
      43. case (s!+t!)>s! :goto "g18"
      44. w!=s!*w!
      45. case (x!>=0) :goto "g25"
      46. w!=l/w!
      47. g25:
      48. 'y!=w!
      49. return w!
      50. endproc
      51. proc LOGM :parameters x!
      52. 'Logarithmus naturalis as Doubleprecision-function (14 digits)
      53. declare q!,r!,l!,u!,s!,t!,n!
      54. q!=0.693147180559945309 'ln(2)
      55. r!=1.414213562373095049 'sqrt(2)
      56. l!=0
      57. u!=x!
      58. if u!<=0:print "\n *** error: logm-argument <=0 *** "
      59. beep:waitinput:END
      60. endif
      61. case u!<1:goto "g16"
      62. g12:
      63. case u!<r!:goto "g20"
      64. u!=u!/2
      65. l!=l!+q!
      66. goto "g12"
      67. g16:
      68. case u!>(l/r!) :goto "g20"
      69. u!=2*u!
      70. l!=l!-q!
      71. goto "g16"
      72. g20:
      73. u!=u!-1
      74. s!=0
      75. t!=u!
      76. n!=1
      77. g24:
      78. s!=s!+t!/n!
      79. n!=n!+1
      80. t!=-u!*t!
      81. case (abs(s!)+abs(t!/n!))>abs(s!):goto "g24"
      82. L!=L!+s!
      83. 'y!=l!
      84. return l!
      85. endproc
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
    • Abt. Der verdammte Ellipsenumfang
      =======================
      Elliptische Probleme, etwa die Ermittlung der Bogenlänge von Ellipsen bestimmter Form und Abmessung, können alle auf bloß drei verschiedene Grundarten (Integrale über Bogensegmente einer Normalellipse mit kleiner oder aber großer Halbachse = 1 in fokaler Nulllage) zurückgeführt werden. Es gibt allerdings viele unterschiedliche Darstellungsformen dieser drei Arten - je nach Mathematiker, der sich damit verewigt hat, etwa die Legendre-Form, Gauss-Form, Jacobi-Form, die Riemann-Form und viele andere mehr.

      Leider wurde es Technikern dadurch sehr schwer gemacht, die richtige Formel zu finden und mit den jeweils einzusetzenden Parametern und den nötigen Vorfaktoren klarzukommen, sodaß sich bisher keine Standardform als Mainstream durchgesetzt hat und das Thema als "sehr exotisch" gilt.

      Das nachstehende Demo-Progi konzentriert sich auf die Legendre-Form der ...
      Unvollständigen elliptischen Integrale ...
      - 1. Art: F(phi_max,k) = Integral{phi=0..phi_max; 1/SQRT(1+k^2*sin(phi)^2); d_phi}; und
      - 2. Art: E(phi_max,k) = Integral{phi=0..phi_max; SQRT(1+k^2*sin(phi)^2); d_phi}
      (Unvollständig heißen die aber nur, weil nicht der ganze Viertelbogen der Ellipse interessiert, sondern eben nur ein zwischen 0° und einem Maximalwinkel liegender Teilbogen. Näheres siehe Wiki)
      Das Integral 3. Art ist noch deutlich komplizierter, seine Behandlung ist gelegentlich geplant.

      Grüsse von Z. Ahnpasta
      (hiermit bestellt)

      P.S.: Den Quellen zufolge (Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programm 1983 und TrueBasic-Modul 1997) beträgt die erreichbare Genauigkeit des Algorithmus 11 Nachkommastellen. In einem ungünstigen Grenzfall wurde allerdings nur eine Genauigkeit 10^-4 verifiziert. Das kommt vermutlich wegen eines Verfahrenswechsels bei Parameterwerten um 0.25 zustande. Basisalgorithmus ist hier die Landen-Transformation.

      P.P.S.: Wer noch einen funktionsfähigen, programmierbaren HP41 Taschenrechner sein Eigen nennt - Gratulation, er hat inzwischen ein wertvolles Museumsstück in Händen! Für alle anderen kann ich den Virtuellen HP41-Simulator V41 von Warren Furlow empfehlen. Ist, als läge er auf dem Desktop! Aber Vorsicht, Umgekehrte Polnische Notation (UPN) ist nicht jedermanns Sache!

      Brainfuck-Quellcode

      1. WindowTitle "Unvollständige Elliptische Integrale 1. und 2. Art {Legendre-F(phi,k), E(phi,k)}"
      2. ' Versuch (Early pre-alpha) - ohne jegliche Gewähr!
      3. '{Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programm 1983 und TrueBasic-Modul 1997
      4. ' 2015-07 nach XProfan 11.2a montiert - ACHTUNG: Ausschließlich als Demo!
      5. ' *** Möglicherweise bestehen Rechte Dritter! *** MfG Z. Ahnpasta
      6. Windowstyle 24:Cls:font 2:set("decimals",17)
      7. declare q!,k!,a!,d2r! , F!,Ellpci_e! : d2r!=pi()/180
      8. Whileloop 0,900,1'6
      9. q!=d2r!* &Loop/10 '30 '°
      10. k!=sin(q!) 'Hinweis: Das ist NICHT die 'Modulwinkel'-Version der Legendre-Normalform,
      11. 'k soll hier einfach nur den Definitionsbereich [0..1] durchlaufen!
      12. print "\n k = ";format$("00.0",&Loop);" °"
      13. Waitinput 2000 ' oder auskommentieren ...
      14. whileloop 0,90,15 : a!=d2r!* &Loop/10 '° in Zehntelgrad-Schritten
      15. '*************************************************************************
      16. 'Proc-Aufruf setzt 2 Ergebnisse:
      17. F!=Ellpci(a!,k!)
      18. 'Die ausserhalb des Proc definierte Variable Ellpci_E!
      19. 'bringt hier das 2. Ergebnis, E(phi,k) (Legendre-Form 2. Art) zurück.
      20. '*************************************************************************
      21. '*************************************************************************
      22. ' EINZELWERT-TEST, nachträglich eingefügt. Bitte die nachstehende Testzeile
      23. ' auskommentieren, falls nicht bestimmte Parameter getestet werden sollen!
      24. 'F!=Ellpci( 0.9, 0.9 ) :clearclip:putclip str$(Ellpci_E!):waitinput
      25. ' Ergebnis in der Zwischenablage 17-stellig verfügbar, um Präzision zu prüfen.
      26. '*************************************************************************
      27. '*************************************************************************
      28. 'Ausgabe:
      29. print " Phi = ";format$("00.0",&Loop);" °";
      30. print tab(15);"F(phi,k) = ";format$("%g",f!),
      31. print tab(45);"E(phi,k) = ";format$("%g",ellpci_e!)
      32. '*************************************************************************
      33. endwhile
      34. Endwhile
      35. waitinput
      36. END
      37. '{ VERIFIKATIONSTEIL
      38. '*************************************************************************
      39. ' Präzisionsausgabe von E(phi,k) online verfügbar auf:
      40. ' http://keisan.casio.com/exec/system/1244989948
      41. ' Weitere Kontrolle via Maxima-Funktion elliptic_e(phi(=a),m(=k^2))
      42. '*************************************************************************
      43. 'E(x,k) = Ellipci_E!
      44. '-----------------------------------
      45. '0.0, 0.0 = 0
      46. '0.0, 0.1 = 0
      47. '0.0, 0.4 = 0
      48. '0.0, 0.9 = 0
      49. '*** OK ! ***
      50. '-----------------------------------
      51. 'Keisan 0.6,0.4 = 0.5945980735117437678766
      52. 'Maxima 0.6,0.4^2 = 0.59459807351174
      53. 'Ellpci(0.6,0.4) = 0.59459807353087835
      54. '*** OK ! ***
      55. '-----------------------------------
      56. 'E(0.9,0.9) =
      57. 'Keisan(phi[rad],k): 0.808143018647826110606
      58. 'Maxima: elliptic_e(phi,k*k): 0.80814301864783
      59. 'Ellipci: 0.80818524219652310
      60. '*** MATHEMATISCH NICHT OK !!! (Technisch ausreichend) ***
      61. '---------------------------------------------------------
      62. 'Ellipci(0.9,sqrt(0.9)) = 0.79659968020564376
      63. 'Maxima's_elliptic_e(0.9,0.9=k^2) = 0.79659968020564
      64. 'Keisan_E(0.9,Sqrt(0.9)) = 0.796599680205643585782
      65. '*** OK ! ***
      66. 'Hinweis: Sqrt(0.9)=0.94868329805051379959966806332982
      67. '-----------------------------------
      68. '1.0, 0.0 = 1.570796326794896619231
      69. '= Pi()/2 = 1.5707963267948966192313216916398
      70. '*** OK ! ***
      71. '}*********************************************************
      72. Proc Ellpci :Parameters a!,k!
      73. ' a := Phi_max (sometimes called 'Amplitude')
      74. ' k := Modulus (In der Literatur wird auch m verwendet, mit m = k^2)
      75. ' F! = integral of first kind
      76. ' E! = integral of second kind
      77. ' Algorithm: Landen transformation with the DiDonato recurrence
      78. ' in specific ranges of the argument
      79. ' Proc uses external variable ellpci_e! for output of E!
      80. declare s! ,c!
      81. declare s0!,c0!, p0!,q0!
      82. declare s1!,c1!
      83. declare p1!,q1!, p2!,q2!
      84. declare s2!,s3!,s4!,s7!
      85. declare r0!,r1!,r2!, r7!
      86. declare n0!,n1!,n2!
      87. declare t0!,t1!,t2!,t3!,t7!
      88. declare d0!,d1!,d2!,d3!,d4!,d7!
      89. declare i1!,i2!,j1!,j2!,k1!,k2!, m7!,n7!
      90. declare L1!,L2!
      91. p2!=k!*k!
      92. q2!=(1-k!)*(1+k!)
      93. s!=sin(a!)
      94. c!=cos(a!)
      95. s0!=s!*s!
      96. c0!=c!*c!
      97. p0!=abs(k!*s!)
      98. q0!=abs(k!*c!)
      99. case p0!>=sqrt(.5):goto "ellpci_44"
      100. r1!=a!
      101. r2!=1
      102. s1!=0
      103. s2!=0
      104. n1!=1
      105. n2!=2
      106. t0!=a!*s0!
      107. t7!=s!*c!
      108. goto "ellpci_33"
      109. ellpci_29:
      110. n1!=n2!+1
      111. n2!=n1!+1
      112. t0!=s0!*t0!
      113. t7!=s0!*t7!
      114. ellpci_33:
      115. r0!=s1!
      116. r1!=(n1!*r1!-t7!)/n2!
      117. r2!=p2!*r2!/n2!
      118. s2!=s2!+r1!*r2!
      119. r2!=n1!*r2!
      120. s1!=s1!+r1!*r2!
      121. case abs(t0!)<abs(r0!):goto "ellpci_41"
      122. case abs(s1!)>abs(r0!):goto "ellpci_29"
      123. ellpci_41:
      124. f!=a!+s1!
      125. ellpci_e!=a!-s2!
      126. return f!
      127. print "Never reach 43-error!":waitinput
      128. ellpci_44:
      129. d7!=(1-p0!)*(1+p0!)
      130. d0!=sqrt(d7!)
      131. i2!=1
      132. j2!=1
      133. k2!=0
      134. m7!=0
      135. n7!=0
      136. s1!=0
      137. s2!=0
      138. s3!=0
      139. s4!=0
      140. t3!=q0!*d0!
      141. n0!=2
      142. goto "ellpci_63"
      143. ellpci_58:
      144. i2!=i1!
      145. j2!=j1!
      146. k2!=k1!
      147. n0!=n0!+2
      148. t3!=d7!*t3!
      149. ellpci_63:
      150. n1!=(n0!-1)/n0!
      151. n2!=(n0!+1)/(n0!+2)
      152. i1!=n1!*i2!
      153. j1!=n1!*n1!*q2!*j2!
      154. k1!=k2!+2/(n0!*(n0!-1))
      155. r0!=t3!/n0!
      156. m7!=n2!*n2!*q2!*(m7!-r0!*i1!)
      157. n7!=n1!*n2!*q2!*(n7!-r0!*i2!) '=Orig
      158. d1!=j1!
      159. d2!=n2!*j1!
      160. d3!=m7!-j1!*k1!
      161. d4!=n7!-n1!*q2!*j2!*k1! + q2!*j2!/(n0!*n0!)
      162. r0!=s3!
      163. s1!=s1!+d1!
      164. s2!=s2!+d2!
      165. s3!=s3!+d3!
      166. s4!=s4!+d4!
      167. case s3!<r0!:goto "ellpci_58"
      168. t0!=d0!+q0!
      169. r7!=t0!/4
      170. L1!= -1*ln(r7!)
      171. t7!=1+p0!
      172. s7!=t7!/2
      173. L2!= ln(s7!)
      174. 'k=1:Kreis, daher Arc=Kreisbogen[rad] 'Meine eigene Änderung!
      175. if L2!=0:ellpci_e!=sin(a!):beep:return Ln(tan(a!/2+Pi()/4)):End:endif
      176. t1!=(1+s1!)*L1!+q0!/d0!*L2!
      177. t2!=(.5+s2!)*q2!*L1!+1-q0!/d0!*(1-p0!)
      178. f!=t1!+s3!
      179. ellpci_e!=t2!+s4!
      180. case a!>=0:goto "ellpci_94"
      181. f!= -1*f!
      182. ellpci_e!= -1*ellpci_e!
      183. ellpci_94:
      184. return f!
      185. endproc
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Ach so ja: Sei die Numerische Exzentrizität der Ellipse Epsilon = sqrt(a^2-b^2)/a ; dann ist die Bogenlänge des Ellipsen-Teilbogens zwischen 0 und Phi: L= a * E(Phi, Epsilon) mit E=Unvollst.Ellipt.Integral_zweiter_Art, wie oben berechnet.
      Gruss

      P.S.: Im Anhang eine (unvollständige) Übersicht, welche speziellen mathematischen Funktionen es sonst noch gibt. Ich checke gerade, wofür die eigentlich gut sind.
      Spoiler anzeigen

      SPEZIELLE MATHEMATISCHE FUNKTIONEN
      ----------------------------------
      Gammafunktion
      Reziproke Gammafunktion
      Unvollständige Gammafunktion
      Log-Gammafunktion
      Polygammafunktion

      Betafunktion
      Unvollständige Betafunktion
      Inverse Unvollständige Betafunktion

      Zetafunktion
      (Omegafunktion)

      Besselfunktionen
      Besselfunktion erster Art
      Besselfunktion zweiter Art
      Modifizierte Besselfunktion erster Art
      Modifizierte Besselfunktion zweiter Art
      Hankelfunktion

      Sphärische Besselfunktion
      Sphärische Besselfunktion
      Sphärische Besselfunktion (Nullstellen)
      Sphärische Besselfunktion erster Art
      Sphärische Besselfunktion zweiter Art
      Modifizierte Sphärische Besselfunktion erster Art
      Modifizierte Sphärische Besselfunktion zweiter Art
      Sphärische Hankelfunktion

      Airyfunktion
      Airyfunktion (Nullstellen)
      Abgeleitete Airyfunktion
      Abgeleitete Airyfunktion (Nullstellen)

      Kelvinfunktion
      Kelvinfunktion erster Art
      Abgeleitete Kelvinfunktion erster Art
      Kelvinfunktion zweiter Art
      Abgeleitete Kelvinfunktion zweiter Art
      Kelvinfunktion dritter Art
      Abgeleitete Kelvinfunktion dritter Art

      Struvefunktion
      Modifizierte Struvefunktion

      Gauss'sche Fehlerfunktion
      Errorfunktion
      Inverse Errorfunktion

      Legendrefunktion
      Verbundene Legendrefunktion

      Bernoulli-Zahlen
      Euler-Mascheroni-Zahl

      Stirling-Zahhlen
      Stirling-Zahlen erster Art
      Stirling- Zahlen zweiter Art
      Stirlingzahlen-Tabellierung

      Fibonacci-Reihe
      Fibonaccifunktion

      Doppelfaktorielle

      Pochhammerfunktion

      Exponentialintegrale:

      Exponentialintegral En(x)
      Exponentialintegral Ei(x)
      Logarithmic integral li(x)

      Integralsinus Si(x)
      Integralkosius Ci(x)
      IntegralHyperbelsinus Shi(x)
      IntegralHyperbelcosinus Chi(x)

      Fresnel-Integral
      Fresnel-Sinusintegral S(x)
      Fresnel-Cosinusintegral C(x)

      Elliptische Integrale
      Komplettes Elliptisches Integral erster Art K(k)
      Komplettes Elliptisches Integral zweiter Art E(k)
      Komplettes Elliptisches Integral dritter Art P#(n,k)
      Unvollständiges Elliptisches Integral erster Art F(phi,k)
      Unvollständiges Elliptisches Integral erster Art F(f;k)
      Unvollständiges Elliptisches Integral zweiter Art E(phi,k)
      Unvollständiges Elliptisches Integral zweiter Art E(f;k)
      Unvollständiges Elliptisches Integral dritter Art P#(phi,n,k)
      Unvollständiges Elliptisches Integral dritter Art P#(f;n,k)

      Elliptische Funktionen (Umkehrfunktionen obiger Integrale)
      Jacobi-Ellipsenfunktion sn(u,k)
      Jacobi-Ellipsenfunktion cn(u,k)
      Jacobi-Ellipsenfunktion dn(u,k)
      Jacobi-Amplitudenfunktion am(u,k)

      Orthogonale Polynome (bilden ein Orthonormalsystem)
      Hermite-Polynom
      Legendre-Polynom
      Assoziiertes Legendrepolynom
      Tchebyschow-Polynom erster Art
      Tchebyschow-Polynom zweiter Art
      Laguerre-Polynom
      Assoziiertes Laguerrepolynom
      Gegenbauer-Polynom
      Jacobi-Polynom
      Sphärische Harmonische

      Hypergeometrische Funktion
      Gauss'sche Hypergeometrische Funktion
      Confluente Hypergeometrische Funktion erster Art
      Confluente Hypergeometrische Funktion zweiter Art
      Whittaker-Funktion erster Art
      Whittaker-Funktion zweiter Art
      Coulomb-Wellenfunktion
      Tricomi-Funktion U(a,b,z)
      Kummer-Funktion
      Kummer'sche Differentialfunktion

      Z-Normierungsfunktion
      ---
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Doch wieder vertont: Der Goldkurs unmittelbar vor der Griechenland-Entscheidung
      ======================================================
      Bisher, im Zeitraum 1. Jan. - 10. Juli 2015, war fast nix los - nachstehend der vertonte Beweis. Die Frage ist allerdings, ob es so fade weitergeht oder nicht doch einige Wellenbrecher auf uns zukommen. Man wird sehen - bzw. hören!
      Gruss

      P.S.: Nochmal kurz zu den Elliptischen Integralen von vorhin: Nicht vergessen, das sind Höhepunkte der Mathematik des 19. (!!) Jahrhunderts.

      Quellcode

      1. WindowTitle "Vor Griechenland-Entscheidung: Goldkursvertonung 1.Halbjahr 2015 (SCHNARCH!)"
      2. WindowStyle 24:CLS:print "\n Wert/1000 = Euro je Feinunze":var Data$=\
      3. "1041204,1036153,1053963,1052239,1045611,1050365,1063224,1056225,1053429,1055729,"+\
      4. "1051104,1052207,1051239,1050295,1053261,1055152,1053009,1046190,1060818,1056651,"+\
      5. "1048384,1045836,1052509,1048319,1048934,1049256,1052241,1055603,1052135,1043161,"+\
      6. "1058857,1060732,1050647,1054301,1045650,1045670,1050056,1046842,1049572,1051208,"+\
      7. "1055682,1053860,1049193,1049842,1049186,1049865,1046754,1046345,1053321,1047564,"+\
      8. "1044251,1050277,1041760,1042137,1067230,1059331,1083168,1070952,1088293,1097628,"+\
      9. "1083857,1082648,1087075,1087805,1088074,1092144,1095564,1087298,1083451,1092600,"+\
      10. "1084357,1082392,1085329,1090197,1090239,1088595,1079408,1078544,1071229,1073557,"+\
      11. "1063588,1074844,1062428,1068049,1051069,1058899,1062199,1065947,1054258,1056194,"+\
      12. "1039840,1053239,1063140,1053920,1070936,1075834,1049240,1044410,1075990,1059710,"+\
      13. "1095450,1091800,1100560,1103150,1090520,1103930,1097490,1093950,1107920,1101770,"+\
      14. "1113440,1108860,1120260,1118200,1120340,1114420,1113830,1116280,1131190,1123070,"+\
      15. "1123560,1120990,1127950,1118970,1136720,1132530,1133490,1137800,1113330,1114340,"+\
      16. "1113660,1112950,1113820,1114380,1110910,1102680,1099500,1112970,1098840,1106220,"+\
      17. "1095010,1095100,1106700,1099140,1097260,1100680,1088890,1090480,1085560,1091720,"+\
      18. "1086150,1085610,1096170,1096960,1091523,1094425,1080497,1081291,1087540,1084335,"+\
      19. "1097671,1088900,1091244,1096099,1094899,1083706,1096056,1088397,1079398,1081937,"+\
      20. "1077972,1077107,1090602,1082942,1086041,1088965,1082667,1082288,1081196,1083296,"+\
      21. "1084931,1081334,1073592,1085479,1073660,1076392,1062060,1061267,1057965,1054470,"+\
      22. "1055168,1062732,1061381,1069721,1068295,1062549,1059356,1062321,1072557,1060779,"+\
      23. "1081117,1077344,1073101,1079531,1080753,1074159,1092396,1082956,1096783,1091078,"+\
      24. "1096184,1092152,1103641,1094646,1106708,1101610,1108080,1111354,1128933,1104920,"+\
      25. "1122687,1120553,1114984,1114378,1129361,1119025,1131926,1138614,1132961,1133644,"+\
      26. "1141541,1136263,1150289,1148957,1107955,1130179,1121673,1110110,1113625,1112142,"+\
      27. "1099853,1096076,1082366,1107211,1055408,1082173,1044989,1049010,1049911,1047283,"+\
      28. "1035769,1035720,1025093,1030769,1025064,1030521,1023830,1023679,1017305,1014715,"+\
      29. "0998911,1005530,0983351,0974870"
      30. print:whileloop 264,1,-2
      31. print substr$(data$,&Loop,","),substr$(data$,&Loop-1,",");" ";:case %pos>60:print
      32. sound (val(substr$(data$,&Loop,","))-9600)/2000 , 66 :waitinput 70
      33. sound (val(substr$(data$,&Loop,","))-9600)/2000 , 66 :waitinput 70
      34. endwhile:waitinput:end
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. Von Elefanten und Diophanten
      ======================
      Diophantus von Alexandria gilt als der bedeutendste Mathematiker der Antike. Er schrieb noch auf Pergamentrollen und wirkte (genau weiß man es nicht) um ca. 250 nach Christus. Vor allem beschäftigte er sich mit praktischen Fragen des Handels, insbesondere mit GANZZAHLIGEN Aufgaben. Daher heißen derartige Aufgabenstellungen heute "Diophantische Gleichungen".

      Gruss

      P.S.: Elefanten können Diophantische Gleichungen trotz ihres hervorragenden Gedächtnisses und ihres großen Kopfes nicht lösen. Wir jetzt schon! Also, manchmal zumindest...

      Brainfuck-Quellcode

      1. WindowTitle upper$("Diphantische (=Ganzzahlig zu lösende) Gleichungen")
      2. ' Q: http://jean-pierre.moreau.pagesperso-orange.fr/Fortran/diophan_f90.txt
      3. ' (D) Demoware 2015-07 von F90 nach XProfan-11 by P.Specht, Wien
      4. ' Demo only. Original Copyright applies fully. Ohne jegliche Gewähr!
      5. WindowStyle 24:font 2:randomize:set("Decimals",10)
      6. CLS : var TRUE&=1:var FALSE&=0
      7. '**********************************************
      8. '* Solving a diophantian equation ax+by = c *
      9. '* (a,b,c,x,y are integer numbers) *
      10. '* ------------------------------------------ *
      11. '* Ref.: "Mathématiques en Turbo-Pascal *
      12. '* By M. Ducamp and A. Reverchon (2), *
      13. '* Eyrolles, Paris, 1988" *
      14. '* ------------------------------------------ *
      15. '* Sample run: *
      16. '* *
      17. '* SOLVING IN Z EQUATION AX + BY = C *
      18. '* *
      19. '* A = 3 *
      20. '* B = -2 *
      21. '* C = 7 *
      22. '* *
      23. '* Solutions are: *
      24. '* *
      25. '* X = 1 + 2*K *
      26. '* Y = -2 + 3*K *
      27. '* *
      28. '* F90 Version By J-P Moreau. *
      29. '* (www.jpmoreau.fr) *
      30. '**********************************************
      31. '* XProfan-11 Version By P.Specht, Vienna *
      32. '**********************************************
      33. Declare a!,b!,c!,p!,q!,x0!,y0!,iresult!,Diophantian!
      34. Dio_Main:
      35. Clear a!,b!,c!,p!,q!,x0!,y0!,iresult!,Diophantian!
      36. print "\n---------------------------------------------------------"
      37. print " LÖSE DIE ALL-GANZZAHLIGE GLEICHUNG: a * X + b * Y = c "
      38. print "---------------------------------------------------------"
      39. Print " a = ";:input a!
      40. Print " b = ";:input b!
      41. Print " c = ";:input c!
      42. print "---------------------------------------------------------"
      43. iresult! = Diophantian(a!,b!,c!)
      44. if iresult!>0
      45. print " Lösungen:\n\n X= Y= "
      46. print tab(4-(x0!<0));format$("%g",x0!)," + ";format$("%g",abs(q!));" * K"
      47. if (p!*q!)>0
      48. print tab(4-(Y0!<0));format$("%g",y0!)," - ";format$("%g",abs(p!));" * K"
      49. else
      50. print tab(4-(Y0!<0));format$("%g",y0!)," + ";format$("%g",abs(p!));" * K"
      51. endif
      52. print "\n mit K = {...,-3,-2,-1,0,+1,+2,+3,...} "
      53. else
      54. font 0:beep:print "\n Keine Lösungen gefunden!"
      55. endif
      56. font 2:print "---------------------------------------------------------\n"
      57. Waitinput 60000
      58. case %csrlin>50:cls
      59. GOTO "Dio_Main"
      60. proc Diophantian :parameters a!,b!,c!
      61. '***********************************************************
      62. '* Solving equation ax+by=c, a,b,c,x,y are integer numbers *
      63. '* ------------------------------------------------------- *
      64. '* INPUT: a,b,c coefficients of equation *
      65. '* OUTPUT: solutions are x0+kp and y0-kq, with k=0,1,2... *
      66. '* or k=-1,-2,-3... *
      67. '* The function returns TRUE if solutions exist (that is, *
      68. '* if the GCD of a,b is also a divisor of c). *
      69. '***********************************************************
      70. 'Integer Function Diophantian(a,b,c,x0,y0,p,q)
      71. Var TRUE!=1 : Var FALSE!=0
      72. declare aa!,bb!,pg!,x1!,x2!,y1!,y2!
      73. declare ifound!,GCD!,Diophantian!
      74. Diophantian!=FALSE!
      75. Case (a!=0) Or (b!=0):goto "Dio_return"
      76. aa!=a!:bb!=b! 'Send copies of a and b to function GCD!
      77. pg! = GCD(aa!,bb!) '(XProfan kapselt ohnehin selbst)
      78. a!=a!/pg!:b!=b!/pg!:c!=c!/pg!
      79. Case c!<>INT(c!):goto "Dio_return" ' pg must be also a divisor of c
      80. x1!=0: y2!=0 : ifound!=FALSE!
      81. Dio_10:
      82. y1!=(c!-a!*x1!)/b!
      83. if y1!=INT(y1!)
      84. x0!=x1!:y0!=y1!
      85. ifound!=TRUE!
      86. else
      87. x1!=-x1!:case x1!>=0:x1!=x1!+1
      88. x2!=(c!-b!*y2!)/a!
      89. if x2!=INT(x2!)
      90. x0!=x2!: y0!=y2!: ifound!=TRUE!
      91. else
      92. y2!=-y2!:case y2!>=0:y2!=y2!+1
      93. endif
      94. endif
      95. case ifound!=FALSE!:goto "Dio_10"
      96. p!=a! : q!=b!
      97. Diophantian!=TRUE!
      98. Dio_return:
      99. return Diophantian!
      100. Endproc
      101. Proc GCD :parameters a!,b!
      102. ' Greatest common divisor of two integer numbers
      103. declare r!,temp!,GCD!
      104. a!=int(abs(a!)):b!=int(abs(b!))
      105. if (a!>10^10) or (b!>10^10):GCD!=1:goto "gcd_exit":endif
      106. if (a!=0) OR (b!=0):GCD!=1:goto "gcd_exit":endif
      107. if a!<b!:temp!=a!:a!=b!:b!=temp!:endif
      108. GCD_1010:
      109. r!=a!-b!*int(a!/b!):a!=b!:b!=r!
      110. case (abs(r!)>10^-10):goto "GCD_1010"
      111. GCD!=a!
      112. GCD_exit:
      113. return gcd!
      114. endproc
      Alles anzeigen
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

    • Abt. XPIA reloaded
      ============
      1) Frank Abbing's genialen Inline-Assemblercodegenerator gibt es weiterhin inoffiziell (ohne Suport und gänzlich auf eigenes Risiko) auf seiner Homepage zum Download: XPIA.

      2) Dort holen sich XProfan- & Assemblerfans auch seine Makro-taugliche Programmierumgebung LemonEd.

      3) Der weiters nötige JWasm-Assembler ist nunmehr ein Sourceforge-Projekt: Der freie Clone zu Microsoft's MASM ist ein 32bit-Programm, kann aber 16-, 32- und 64-Bit Programme nativ erzeugen.

      4) Nach Installation der XPIA.exe, von JWasm.exe und polink.exe in jenes Verzeichnis, in dem auch die Profan.exe steht, wird innerhalb von XProfan-Programmen Assemblercode zwischen AsmStart und AsmEnd erkannt, wenn im Programmtext selbst irgendwo der Befehl $MAKE CLE (plus eine Leerzeile) auftaucht.

      5) Allfällige Parameter werden innerhalb des Assemblerteils mit para1 .. para14 bezeichnet und per MOV-Befehl in die gewünschten Register geholt.

      6) Eine Rückgabevariable, z.B. X&, kann von XProfan mittels des erweiterten Befehls AsmEnd X& aus dem EAX-Register abgeholt werden. Sollen mehrere Rückgabewerte übergeben werden, wird die Übergabe der Speicheradresse einer entsprechend großen XProfan-Bereichsvariable anzuraten sein.

      7) Hinweis: Sollte polink.exe einen Ausnahmefehler liefern ("Error: Pelles lenkäre doesnt work anymore"), dann kann man sich mit dem originalen MASM-Linker LNK56.exe aus Mikrosofts orginalem MASM-6 Paket (Damals noch gratis) behelfen, indem man ihn als Ersatz auf PoLiink.exe umbenennt. Bereitgestellt wird MASM-6 dankenswerter Weise noch immer auf der Coding Crew Homepage.

      8) Über den Registeraufbau einer Intel-kompatiblen CPU findet man bei den Herstellern ausführliche Informationen. Über wichtige Grundbefehle kann man sich bei diiesem Schülerprojekt informieren.

      Gruss

      P.S.: Im LemonEd kann man sich Werkzeuge zum Start von XPIA (oder auch XPSE, XPRR etc) definieren. In die Parameterzeile sollte (K) eingegeben werden, um den vollen jeweiligen Programmpfad an das jeweilige Programm zu übergeben. Zum einfachen Aufruf kann ein individualisiertes Icon gewählt werden.
      Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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