ALGORITHMEN - Teil XX: Zwischen Fersuch und Irrdumm

    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.

    • Lösung zu EaR 16
      -----------------
      a) händisch: Sqrt( 4 + 2 * Sqrt(3) ) - Sqrt(3) = X
      Da Quadratwurzel in Quadratwurzel vorkommt, handelt es sich um die Lösung einer Minimalpolynomgleichung vierten Grades. Daher treten durch die jeweils zwei möglichen Wurzelvorzeichen acht mögliche Lösungen auf, von denen jeweils zwei vorzeicheninvers gekoppelt sind. Erst aus der Aufgabenstellung ergibt sich, welcher Satz an Lösungen tatsächlich realisiert wird:
      + + + : 1
      + + - : 4.46410161513775
      + - + : -1
      + - - : 2.46410161513775
      - + + : -4.46410161513775
      - + - : -1
      - - + : -2.46410161513775
      - - - : 1

      b) Die meisten Computersprachen berücksichtigen nur den Absolutwert von Wurzeln. Die Computerlösung lautet daher 1.
    • Abt. Ohne Worte
      ============

      Quellcode

      1. WindowTitle "Konvergenz der Ramanujan-PY Formel testen"
      2. 'https://www.youtube.com/watch?v=ZoaEPXEcLFI
      3. cls:appendmenubar 100,"Dauer ca. 3 min"
      4. set("Decimals",17)
      5. declare py!,vz&
      6. vz&=-1
      7. whileloop 1,10000000,2
      8. case rnd()<0.00001:print "*";
      9. vz&=-vz&
      10. py!=py!+vz&/&Loop
      11. endwhile
      12. py!=4*py!
      13. print "\n ";py!;"\n -";pi();"\n Abs.Fehler: ";format$("%g",abs(py!-pi()))
      14. py!=9801/(1103*sqrt(8))
      15. print "\n ";py!;"\n -";pi();"\n Abs.Fehler: ";format$("%g",abs(py!-pi()))
      16. beep:waitinput
      17. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht () aus folgendem Grund: Um 2. Formel ergänzt

    • Abt. FORMEN ERKENNEN: DAS HU-MOMENT EINES BILDES
      =========================================
      Hab´ eben etwas Interessantes gefunden, allerdings keine Zeit es auszuprogrammieren. XProfan ist da wohl auch nicht erste Wahl, aber XPIA bzw. XPSE vielleicht? Hier das Link zum Originaltext (PDF). Die Bilder dort zeigen, was geht - geeignete Bildaufbereitung vorausgesetzt.
      Gruss

      P.S.: Verbesserungsvorschläge für den Hu-Algorithmus gibt es auch schon: Link

      Spoiler anzeigen

      HU-MOMENTS
      'nach Ming-Kuei Hu, "Visual Pattern Recognition by Moment Invariants",

      (0) I[x,y]=Ortsintensität des Pixels, üblicherweise digitalisierte Intensität 0..127 = 0, 127..255=1

      'Procedure HU_Moments :parameters Pic.raw = I(Zeile,Spalte)
      (1) M = SUM(x, SUM(y, I[x,y]) ) 'Einfaches Moment (wäre Trägheitsmoment, wenn massebehaftet gedacht)

      (2) M[i,j] = SUM(x, SUM(y, x^i*y^j*I[x,y]) ) 'Rohes Moment
      (3) xm = M[1,0]/M_[0,0] ; ym = M[0,1]/M[0,0] 'Zentroid
      (4) µ[i,j] = SUM(x, SUM(y, (x-xm)^i *(y-ym)^j *I[x,y]) ) 'Zentrales Moment
      (5) eta[i,j] = µ[i,j] / ( µ[0,0]^((i+j)/2 +1) ) 'Skalennormiertes zentrales Moment
      (6) Die 7 Hu-Momente: Translations-, Rotations- und Größenunabhängige Momente
      'Def.: Hu Moments (Hu moment invariants) are a set of 7 numbers calculated
      'using central moments that are invariant to image transformations.
      'The first 6 moments have been proved to be invariant to
      'translation, scale, and rotation, and reflection,
      'while the 7th moment’s sign changes for image reflection.
      h[0]=e[2,0]+e[0,2]
      h[1]=(e[2,0]-e[0,2])^2+4*e[1,1]^2
      h[2]=(e[3,0]-3*e[1,2])^2+(3*e[2,1]-e[0,3])^2
      h[3]=(e[3,0]+e[1,2])^2+(e[2,1]+e[0,3])^2
      h[4]=(e[3,0]-3*e[1,2])*(e[3,0]+e[1,2])*((e[3,0]+e[1,2])^2-3*(e[2,1]+e[0,3])^2)+(3*e[2,1]-e[0,3])*(3*(e[3,0]+e[1,2])^2-(e[2,1]+e[0,3])^2)
      h[5]=(e[2,0]-e[02])*((e[3,0]+e[1,2])^2-(e[2,1]+e[0,3])^2+4*e[1,1]*(e[3,0]+e[1,2])*(e[2,1]+e[0,3]))
      h[6]=(3*e[2,1]-e[0,3])*(e[3,0]+e[1,2])*( (e[3,0]+e[1,2])^2-3*(e[2,1]+e[0,3])^2 )+(e[3,0]-3*e[1,2])*(e[2,1]+e[0,3])*( 3*(e[3,0]+e[1,2])^2-(e[2,1]+e[0,3])^2 )
      'h[6]=(3*e21 - e03 )*( e30 + e12 )*[ ( e30 + e12 )^2-3*( e21 + e03 )^2 ]+( e30 -3* e12 )*( e21 + e03 )*[ 3*( e30 + e12 )^2-( e21 + e03 )^2 ]

      (7) H_ = -1*sign(h[i])*if(h[i]=0, 0, log(abs(h[i])) )'Log-Transformation

      (8) Shape Matching using Hu Moments
      'As mentioned earlier, all 7 Hu Moments are invariant under translations (move in x or y direction),
      'scale and rotation. If one shape is the mirror image of the other, the seventh Hu Moment flips in sign.
      'Isn’t that beautiful?: 6 images and their Hu Moments.

      (9) Shape Matching
      'Contour-Distance D2 between two shapes using matchShapes:
      'How to use Hu Moments to find the distance between two shapes.
      'If the distance is small, the shapes are close in appearance
      'and if the distance is large, the shapes are farther apart in appearance.

      (10) A,B sind Grauskalenbilder. D1,D2,D3 geben ähnliche Ergebnisse:
      (Ein empfehlenswertes und bewährtes Konturendistanzmaß ist vor allem D2(A,B) )
      D1(A,B) = SUM(i=0..6; abs(1/HB[i]-1/HA[i]) )
      D2(A,B) = SUM(i=0..6; abs(HA[i]-HB[i]) ) 'empfohlen
      D3(A,B) = SUM(i=0..6; abs(HA[i]-HB[i])/abs(HA[i]) )

      (11) Individuelle Distanzmaße sind möglich, z.B. Euklidische Distanz:
      'First, you calculate log transformed Hu Moments as mentioned in the previous section,
      'and then calculate the distance yourself:
      D(A,B) = sqrt(SUM(i=0..6;(HB-HA[i])^2) 'Nachteil: Rechenintensiv
      ---

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

    • Abt. Berühmte Zahl erwürfeln
      ======================

      Quellcode

      1. Windowtitle "Berühmte Zahl erwürfeln"
      2. 'Q: https://www.youtube.com/watch?v=-2PA7SbWoJ0
      3. Windowstyle 24
      4. CLS
      5. font 2
      6. set("decimals",17)
      7. randomize
      8. declare sum!,n&,m&,avg&,e!,z&
      9. z& = 100000 'Durchläufe
      10. Whileloop z&
      11. sum!=0
      12. n&=0
      13. case rnd()<=0.0001:print "*";'Lebenszeichen
      14. while sum!<1 'Das Experiment
      15. sum!=sum!+rnd()
      16. inc n&
      17. endwhile
      18. inc avg&,n&
      19. inc m&
      20. endwhile
      21. e!=avg&/m&
      22. print
      23. print "\n Nach ";format$("#,0";m&);" Zufallsexperimenten:"
      24. print "\n Zufallsergebnis:",e!
      25. print "\n Berühmte Zahl e:",exp(1)
      26. print "\n Abweichung Diff:",format$("%g",e!-exp(1))
      27. print "\n Relativer Fehler",format$("%g",100*abs((e!-exp(1))/exp(1)));" %"
      28. beep:waitinput:End
      Alles anzeigen
      Gruss
    • Abt. Ist "Ruhezustand" erlaubt?
      ========================
      Insbesondere auf Laptops und ab Windows-10 oft als Normalzustand wird beim Shutdown das aktive System auf die Platte gerettet, um beim Wiedereinschalten rasch zur Verfügung zu stehen. Manchmal verhindern bestimmte Softwarepakete bzw. Systemzustände den Einsatz dieser Möglichkeit. Nach dem untenstehenden Hinweis (er stammt von A. Miethe+) lässt sich das aber abfragen.
      Gruss

      Quellcode

      1. Print "Ruhezustand erlaubt?:",If(External("PowrProf.dll","IsPwrHibernateAllowed") = 1,"Ja","Nein")
      2. Waitinput 20000
    • Abt. Fair teilen
      ===========
      Drei (N=3) Freunde wollen in eine Wohngemeinschaft ziehen. Die drei Räume sind alle über einen gemeinsamen Gang erreichbar, sehen aber völlig unterschiedlich aus. Man möchte die Mietkosten fair aufteilen, und zwar so dass alle Freunde mit ihren unterschiedlichen Präferenzen zufrieden sind und gemeinsam der maximale Nutzen entsteht. Dass so ein Aufteilungspunkt existiert, ist durch Sperner´s Lemma garantiert. Dabei wird u.a. die Tatsache ausgenutzt, dass jeder Punkt im Inneren eines gleichseitigen Dreieckes (bei 3 Freunden) - bzw. einer N-1_dimensionalen gleichseitigen Pyramide (bei N Freunden) - die gleiche Summe an Abständen von den Seiten aufweist. Warum man nicht 100,000 Fragen nach den einzelnen Präfenrenzen jedes Freundes erfragen muß, ist im vorgenannten Video recht gut beschrieben.

      Die Lösungsmethode hat es sogar in die NewYork Times geschafft, wo eine Online-App beim fairen Teilen helfen kann - einfach mal bisschen rumspielen damit!
      Gruss
    • Abt. Aktuelle Elektrosymbole
      =====================
      Von Zeit zu Zeit ändern sich sogar altbewährte DIN-Normen. Ich war relativ überrascht, wie viele Symbole für elektrische Bauelemente sich seit meiner Schulzeit bzw. Zeit als Techn. Zeichner geändert haben - etwa für Elektrolytkondensatoren. Naja, ist ja auch schon einige Zeit her ... Hier das Link zu den aktuellen Zeichen, hilfreich zur eigenen Altersbestimmung ;-)
      Gruss
    • Abt. Großkreisdistanzformel testen
      ==========================
      Wie weit sind der
      * Nashville International Airport (BNA), Tennessee/USA mit den Koordinaten
      36°7.2' Nördl.Breite, 86°40.2' (in Dezimalgrad: 36.12, -86.67), und der
      * Los Angeles International Airport (LAX), California/USA
      33°56.4' N, 118°24.0' W (Dezimalgrad: 33.94, -118.40) in Luftlinie voneinander entfernt?
      (Es handelt sich wiedereinmal um eine Rosettacode-Aufgabe.)
      Gruss

      Quellcode

      1. WindowTitle "Großkreis-Distanzformel testen"
      2. CLS:font 2
      3. print "Großkreis-Distanz:",Format$("####.#############",\
      4. GroßkreisDistanz(36.12,-86.67 , 33.94,-118.4)),"km."
      5. Waitinput ' 2887.2599506071104 km
      6. End
      7. Proc ArcSin :Parameters Angle!:Declare Erg!
      8. If Abs(Angle!)=1:Erg!=Angle!*Pi()/2
      9. Else :Erg!=ArcTan(Angle!/Sqrt(1-Sqr(Angle!)))
      10. EndIf:Return Erg!
      11. EndProc
      12. Proc GroßkreisDistanz :Parameters n1!,e1! , n2!,e2! 'Dezimalgrad
      13. var D2R!=ArcTan(1)/45:var diam!=2*6372.8:var Lg1m2!=(e1!-e2!)*D2R!
      14. var Lt1!=n1!*D2R!:var Lt2!=n2!*D2R!:var dz!=sin(Lt1!)-sin(Lt2!)
      15. var dx!=cos(Lg1m2!)*cos(Lt1!)-cos(Lt2!):var dy!=sin(Lg1m2!)*cos(Lt1!)
      16. var hDist!=ArcSin(Sqrt(sqr(dx!)+sqr(dy!)+sqr(dz!))/2)*diam!
      17. return hDist!
      18. Endproc
      Alles anzeigen
    • Abt. Spirograph als Wappengenerator
      ============================
      ... gedacht zum selber dran rumbasteln.

      Mit leicht senilen Grüßen :-)

      Quellcode

      1. WindowTitle "Spiro als Wappengenerator"
      2. WindowStyle 24
      3. Window 0,0-%maxx,%maxy
      4. font 2
      5. randomize
      6. var xh&=width(%hwnd)\2
      7. var yh&=height(%hwnd)\2
      8. var f!=pi()/180/4
      9. declare x!,y!,w!
      10. declare r0!,r1!,r2!,r3!,r4!
      11. declare w0!,w1!,w2!,w3!,w4!
      12. declare x0!,x1!,x2!,x3!,x4!
      13. declare y0!,y1!,y2!,y3!,y4!
      14. Repeat
      15. Whileloop 20,3,-3
      16. r0!=196*rnd()
      17. r1!=48*rnd()
      18. r2!=24*rnd()
      19. r3!=12*rnd()
      20. r4!=6*rnd()
      21. usepen 0,&Loop,rgb(rnd(255),rnd(255),rnd(255))
      22. Whileloop 0,360*4
      23. w!=f!*&Loop
      24. w0!=w!
      25. w1!=-2*w!
      26. w2!=3*w!
      27. w3!=-5*w!
      28. w4!=-7*w!
      29. x0!=r0!*cos(w0!):y0!=r0!*sin(w0!)
      30. x1!=r1!*cos(w1!):y1!=r1!*sin(w1!)
      31. x2!=r2!*cos(w2!):y2!=r2!*sin(w2!)
      32. x3!=r3!*cos(w3!):y3!=r3!*sin(w3!)
      33. x4!=r4!*cos(w4!):y4!=r4!*sin(w4!)
      34. x!=x0!+x1!+x2!+x3!+x4!
      35. y!=y0!+y1!+y2!+y3!+y4!
      36. 'locate 0,0:print x!,y!
      37. Line xh&-y!,(yh&+x!) - xh&-y!,yh&+x!
      38. endwhile
      39. waitinput 4000
      40. endwhile
      41. Waitinput
      42. cls
      43. until %key=27
      44. beep
      45. waitinput
      46. end
      Alles anzeigen
    • Abt. Interessante Links
      =================
      Der berühmteste Samurai war Miyamoto Musashi. Er bestand 60 Kämpfe auf Leben und Tod und starb an Altersschwäche in einer Höhle, in die er sich zurückgezogen hatte - nicht ohne vorher noch ein Buch über meisterliche Kampfkunst zu schreiben. In Kurzform handelt es sich um 21 Regeln, die ein letztlich philosophisches System der Selbstdisziplin darstellen. Es muss angemerkt werden, - und da relativiert sich die Bewunderung für alte Kulturen eiin wenig, - daß das System der Samurai letztlich dazu führte, daß Japan auf seiten der Nationalsozialisten in den 2. Weltkrieg ging. Zu den Regeln siehe Spoiler!
      Gruss

      Spoiler anzeigen

      Die 21 Regeln des Dokkodô („Der einsame Weg“)
      ----------------------------------------------
      1. Handle nicht gegen die traditionelle Moral.
      2. Sei in keinerlei Hinsicht voreingenommen.
      3. Strebe nicht nach Behaglichkeit.
      4. Überschätze dich nicht, aber schätze das Volk sehr.
      5. Bleibe dein ganzes Leben lang frei von Habgier.
      6. Bedaure niemals, was du getan hast - es ist passiert. Aber denke voraus!
      7. Beneide niemals andere, weder wegen ihres Glückes noch aufgrund eigenen Unglücks.
      8. Sei nicht darüber betrübt, von jemandem oder von etwas getrennt zu werden.
      9. Tadele weder dich noch andere.
      10. Träume nicht davon, dich in eine Frau zu verlieben.
      11. Habe keine Vorlieben oder Abneigungen.
      12. Lehne keinerlei Unterkunft ab.
      13. Beanspruche kein wohlschmeckendes Essen für dich selbst.
      14. Sammle keine antiken und seltenen Gegenstände.
      15. Vollziehe keine Reinigungszeremonien, lebe nicht deshalb abstinent, um dich vor Bösem zu schützen.
      16. Schätze Schwerter und Waffen.
      17. Gelobe: Ich werde auf dem Weg der Gerechtigkeit nicht an meinem Leben hängen.
      18. Suche keinen bequemen Altersruhesitz.
      19. Achte Götter und Buddha, doch mache dich nicht von ihnen abhängig.
      20. Gelobe: Ich werde eher mein Leben aufgeben, als meinen Namen beschmutzen.
      21. Mein Herz und meine Seele werden nicht einen Augenblick lang vom Weg des Schwertes abweichen.

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

    • Abt. EaR 17´Malerei´
      ===============
      Reihenhaus-Siedlung: 10 gleich große Fassaden sind zu streichen, der Auftrag geht an Fa. Klexel. Eigentümerin Frau Klexel teilt ihre Leute ein: Bert schafft eine Fassade in 3 Stunden, Chrstian braucht 5 Stunden pro Fassade, Dorian schafft die Fassade in 4 Stunden. Der Auftrag eilt. Wie lange brauchen die drei Maler der Firma Klexel?
    • Na schaunmer mal:

      Lösung zu EaR 17
      -----------------------
      Spoiler anzeigen


      Bert ... 1 Fassade 3 h
      Chris .. 1 Fassade 5 h
      Dor .... 1 Fassade 4 h

      Gemeinsame Basis = 3 * 5 * 4 = 60 h

      In diesen 60 h schafft
      Bert 60/3 = 20 Fassaden,
      Chris 60/5 = 12 Fassaden und
      Dorian 60/4 = 15 Fassaden,

      Mit anderen Worten: In 60 Stunden schaffen sie gemeinsam 47 Fassaden.

      Das bedeutet: Für eine Fassade brauchen sie also 60 h / 47 Fassaden ~ 1.2766 h/Fassade,

      10 Fassaden sollen sie anstreichen, also brauchen sie dazu gemeinsam 12.766 h,
      das sind 12 h 46 min.

      ==============


      Fleissaufgabe:
      Wieviele Fassadenn schaffen Bert, Chris und Dorian anteilig?

      Bert: 12.766 / 3 h = 4.2553 Fassaden
      Chris: 12.766 / 5 = 2.5533
      Dorian: 12.766 / 4 = 3.1915
      -----------------------------------------------------------------------
      Zusammen: 10.0001 Fassaden (inkl. kleiner Rundungsfehler)


      Probe: Formel nutzen
      ================
      Gesamtzeit = Aufragsvolumen * (3 * 5 * 4) / ( 3*5 + 3*4 + 5*4) =
      = 10 * 60/(15+12+20) = 600/47 = 12.766 h,
      q.e.d.
    • Abt. Wachstumsschwäche ?
      ====================
      Die Leistungsfähigkeit einer Volkswirtschaft wird durch das Bruttoinlandsprodukt BIP gemessen. Das Wachstum wird allerdings stets an den Daten des letzten Jahres festgemacht. Steigt das BIP, dann wird es immer schwieriger, hohe Wachstumsraten zu halten. Das ist aber vollkommen logisch: Bleibt das Wachstum absolut gleich, sinkt die gemeldete Wachstumsrate. Spekulanten beginnen dann zu jammern, aber Normalos können sich weiter über die gesteigerte Leistungsfähigkeit freuen. Das nachstehende Progi zeigt diesen logischen Effekt.
      Gruss

      Quellcode

      1. WindowTitle "Wachstums-´Reduktion´, logisch betrachtet"
      2. Cls:font 2:var s$=" "
      3. AppendMenuBar 100,s$+"Wachstum abs."+s$+s$+\
      4. "Wachstum proz."+s$+s$+s$+"auf BIP"
      5. declare n&,old!,bip!,proz!,steigabs!
      6. bip!=1:old!=bip!:steigabs!=1
      7. Nochma:
      8. inc n&
      9. bip!=bip!+steigabs!
      10. proz! = (bip!-old!)/old!*100
      11. old!=bip!
      12. print "\n ";if(n&<10," ","");n&;". +";\
      13. format$("##0.00",steigabs!);" Mrd.$",\
      14. tab(25);format$("##0.00",proz!),"%",\
      15. tab(40);format$("##0.00",bip!);" Mrd.$"
      16. waitinput 6000
      17. goto "Nochma"
      Alles anzeigen