Posts by Andreas

    Hallo framp,

    Nachdem ich keine vernuenftige HW gefunden kam kam mir beim Durchlesen einer Bedienungsanleitung eine Idee:


    Das Problem ist ja dass man eine Firmware oder einen PC/Laptop braucht um von einem USB SD Card Reader Photos auf eine USB Platte zu kopieren. Man kann doch an einem aktiven USB Hub sowohl den Cardreader als auch eine 2.5" Platte anschliessen. Den USB Hub dann per USB OTG an ein Handy anschliessen. Danach sind die beiden USB Geraete auf dem Handy sichtbar und man kann kopieren bzw syncen :)


    Mit dem Total Coammnder kann ich sehr gut kopieren. Leider nicht syncen :(

    in meinem ersten Industrie-Projekt (2013), in dem ich einen Raspberry Pi eingesetzt habe, habe ich so ein Teil entwickelt.

    Kernstück ist ein Raspberry Pi, ein aktiver USB-Hub, eine selbst ersonnene Software, die nichts anderes gemacht hat, als Dateien, die sich auf einem USB-Medium befinden, das sich an einem bestimmten USB-Port befindet, auf ALLE USB-Medien zu kopieren, die danach in den anderen USB-Ports eingesteckt werden.

    Duo-LEDs haben für jeden USB-Port den aktuellen Status angezeigt (Lesen vom "Master", Schreiben der Kopie(n), Verifizierung und Fertig (Erfolgreich, fehlerhaft). Fertige USB-Medien wurden automagisch abgemeldet und konnten dann entfernt werden.


    Der Krempel war in einem Industriegehäuse untergebracht, alle wichtigen Schnittstellen waren über Einbaubuchsen (USB für Tastatur / Maus, HDMI für Bildschirm, Spannungsversorgung etc.) nach außen geführt. Das Teil arbeitete aber auch komplett ohne Tastatur / Bildschirm, weil die Software ja nur auf die Ereignisse am USB-Hub reagierte.



    Beste Grüße


    Andreas

    Hallo Richard365,


    ich halte hier die Informationslage für etwas dürftig.


    Ich sehe es so wie hyle, dass es sich um einen Messfehler handelt.


    Unter der Voraussetzung (danach hatte fred0815 auch schon gefragt), dass der RPi überhaupt funktioniert, dann misst man die 5V-Spannung korrekt so:

    • Spannungsmessgerät so einstellen, dass Gleichspannung im Bereich 5V gemessen werden kann (Messbereich ist dann in der Regel 20 V)
    • COM-Anschluss des Spannungsmessgerätes auf Pin 6 (!) (= GND) der GPIO-Leiste
    • V/Ohm-Anschluss des Spannungsmessgerätes auf Pin 2 und oder Pin 4 (5V)
    • Das Spannungsmessgerät sollte dann irgendwas mit 5 V anzeigen


    Die 3,3V, die zwischen Pin 1 und GND anliegen, misst Du analog, wenn Du den V/Ohm-Anschluss des Spannungsmessgerätes auf Pin 1 der GPIO-Leiste ansetzt.


    Wo diese Pins genau liegen, sagt Dir eine Suche mit den Begriffen Raspberry Pi Pin-Layout. z.B. der hier.


    Ich würde die Messstrippen nicht direkt auf die Pins legen, sondern entsprechende Kabel auf die GPIO-Pins legen. Z.B. Dupont (Female auf die GPIO-Leiste, auf der Male-Seite mit dem Messgerät ansetzen).


    Was Du evtl. gemachst hast, ist, dass Du die Spannungsdifferenz zwischen einem 5V-Pin und dem 3V3-Pin gemessen hast. Deine angegebenen 1,6 V stehen in recht guter Übereinstimmung mit der zu erwartenden Differenz von 1,7 V.



    Beste Grüße


    Andreas

    Hallo neuernutzer,

    Hallo ihr beiden, danke für eure Antworten.


    Tell :Das ist nicht so leicht, da häufig auch Überschneidungen eintreten. Eine feste Formel gibt es da nicht.

    Na komm. Eine Formel gibt's da schon. Die ist sogar recht einfach.


    Du hast es mit durch das kgV nach oben beschränkte Mengen zu tun. Also handelt es sich um abzählbare Mengen, deren Größe sogar berechenbar ist.


    Die Formel lautet: Größe_Menge = Größe_Ausgangsmenge - Größe_Menge1 - Größe_Menge2 + Größe_Schnittmenge(Menge 1, Menge2). Ggf. iterativ anwenden.


    Größe _Ausgangsmenge beginnt bei kgV.


    Das ließe sich hier auch anwenden - solange es nur auf die Anzahl und nicht auf die Repräsentanten selber ankommt. Die Anzahl der Mengen ergibt sich als Quotient aus kgV und der jeweiligen Schrittgröße, mit der die Ausdünnung jeweils erfolgt.


    Damit ist dann auch die zeitintensive Ausdünnung (nur um die Anzahl der Restklassen zu erhalten) obsolet.



    Beste Grüße


    Andreas

    Hallo zusammen,


    hier das für mich überraschende Ergebnis des Vergleichs der beiden Programmlaufzeiten (zum Einsatz kam ein Jetson Nano):


    Umfang der aufzunehmenden Einträge= 6400

    DurchläufeZeit "Bitvektor" [ms]Zeit "Liste" [ms]
    1000
    100010
    10001050
    1000030240
    100000380260
    10000003700520
    10000000372903180


    Offensichtlich hängt die Bearbeitungszeit pro Durchlauf sehr stark davon ab, wie lange für das "Ausdünnen" gebraucht wird. Beim Algorithmus mit dem Vektor ist das natürlich immer exakt identisch. Beim Algorithmus mit der Liste scheint es so zu sein, dass die Zeit, einen Eintrag aus der Liste zu entfernen, immer weniger Zeit beansprucht, je leerer die Liste bereits geworden ist.


    Es folgen zwei weitere Durchläufe. Einer mit extrem hoher Anzahl an Einträgen und einer mit extrem wenigen...


    Umfang der aufzunehmenden Einträge= 100

    DurchläufeZeit "Bitvektor" [ms]Zeit "Liste" [ms]
    1000
    10000
    1000100
    10000300
    10000035030
    10000003470300
    10000000341402940


    Umfang der aufzunehmenden Einträge= 100000


    DurchläufeZeit "Bitvektor" [ms]Zeit "Liste" [ms]
    100180
    1000280
    100001630
    100003014190
    10000037085300
    1000000371083270
    100000003672088310


    Offensichtlich ist das alleinige Erzeugen einer Menge inkl. Befüllen ein recht zeitaufwändiger Vorgang.


    Beste Grüße


    Andreas

    Hallo fred0815,

    Kann auch schon eine fehlernde Shebang im Script sein. Wenn dazu in der crontab nur bash steht, statt /bin/bash, kann das auch schon Ärger bereiten. Aber wenn das Script so geheim ist, kann man nur raten.

    nö, raten muss man hier nicht. Die Lösung mit "überall absolute Pfade verwenden" wurde mehrfach genannt. Muss nur konsequent ÜBERALL umgesetzt werden.


    Beste Grüße


    Andreas

    Hallo zusammen,


    hier noch der Ansatz, im Prinzip zu zeigen, dass und wie man mittels Bitvektoren "ausdünnen" kann:


    Jetzt sollte man den Algorithmus bevorzugen, der in einer längeren Berechnung deutlich schneller ist.


    Der Algorithmus hier braucht jedenfalls deutlich weniger Speicher, bedarf aber einer Auswertung, um das Ergebnis zu liefern. Wenn das Ergebnis der Anzahl der Restklassen als Anzahl der weiterhin gesetzten Bits im Bitvektor ausreicht, dann ist das auch schnell gemacht.



    Beste Grüße


    Andreas

    Hallo zusammen,


    hier mein Code zu dem beliebten Thread .



    Code-Deutung:

    Für die Ermittlung des kleinsten gemeinsamen Vielfachen habe ich mich ausnahmesweise mal einer der Icon-Bibliotheken (hier: numbers) bedient. Ich brauche nicht jedes Mal alle Räder neu zu erfinden - auch wenn es deutlich mehr Spaß macht.


    Die Ausdünnung habe ich über den Datentyp "Menge" realisiert. Nicht weil es damit so rasend schnell wird, sondern, weil sich das Ergebnis ganz einfach verifizieren lässt.

    Dazu wird eine Menge definiert:

    Code
    restklasse := set()

    Mitglieder gesetzt:

    Code
    insert(restklasse, i)

    Mitglieder entfernt (ohne zu prüfen, ob sie (noch) enthalten sind):

    Code
    delete(restklasse,i)



    Die Zeile

    Code
    every delete(restklasse, KONGRUENZEN[i := 1 to *KONGRUENZEN][1] to kgV by KONGRUENZEN[i][2])

    hat es dann aber doch in sich.


    In anderen Programmiersprachen würde man so tun:

    Code
    every i := 1 to *KONGRUENZEN do
    {   
        every del := KONGRUENZEN[i][1] to kgv by KONGRUENZEN[i][2] do
        {
            delete(restklasse, del)
        }
    }

    Doppelschleife in einer Zeile, Argumentübergabe als Schleife (dank Icon's Generator-Konzept) - alles über ein einziges every(!).


    Zum Schluss erfolgt dann die Ausgabe der Restklasse und die Ermittlung der Anzahl der Repräsentanten:

    Code
        every i := 1 to *KONGRUENZEN do
        {
            writes("[",KONGRUENZEN[i][1],", ", KONGRUENZEN[i][2], "]")
            if i < *KONGRUENZEN then writes(", ")
        }
        write("] ==> ", *restklasse)

    Wenn ich mir das so ansehe, das ginge bestimmt auch in einer einzigen Zeile - allerdings auf Kosten der Lesbarkeit, so etwa:

    Code
        every writes("[", KONGRUENZEN[i := 1 to *KONGRUENZEN][1], ", ", KONGRUENZEN[i][2], "]", if i < *KONGRUENZEN then ", ")


    Und überhaupt sieht es schöner aus, wenn man statt [a][b] schreibt: [a, b]



    Beispiel-Ausgabe:


    Anderes Beispiel (ohne Ausgabe der Restklassen - dauert zulange):



    Viel Spaß


    Andreas

    Hallo neuernutzer,


    es bleibt verdammt schwierig, als Mathematiker mathematisch Interessierten eine Problemstellung zu erläutern.


    Wir hatten Anfang der 80er Jahre einen Mathe-Prof. O.H., der hatte uns die Vektor-Multiplikation erklärt. Er sprang aus dem Stand auf den Labortisch im Hörsaal. Das war schon Respekt einflößend. Der eine Fuß stellte den ersten Vektor dar, der andere Fuß den anderen Vektor. Dann kam die Rechte-Hand-Regel zum Einsatz. Und einigen Studenten war klar, dass der resultierende Vektor vom Fuß in Richtung Kopf zeigen musste. Ich grübelte, warum er bloß diese Wahl für die Vektoren wählte - warum nicht in der anderen Reihenfolge?


    Er nahm die Antwort vorweg: "Jetzt verstehen sie auch, warum der erste Vektor dieser Fuß hier war. Hätte ich die Reihenfolge anders gewählt, wäre das Ergebnis aus Ihrer Perspektive zwar deutlich lustiger. Für mich als 60-jähriges Säugetier wäre das zwar machbar - aber mühsamer. Ich müsste einen Handstand machen, Kopf auf dem Tisch und die Füße würden in der Luft baumeln."


    Hallo Leroy Cemoi,

    hyle Vielleicht könnte man eine Ausnahme machen bzgl. icon code?

    nee, ich geb's auf. Dann müsste ja jemand einen Fehler von 2016 oder 2015 zugeben, dass es oftmals nicht gut war, dass KnowHow nicht einfließen konnte.


    Ich mache 'nen eigenen Thread mit meinem Code auf.



    Beste Grüße


    Andreas

    Hallo raspbastler,


    hätte ich fast gemacht, meinen Quellcode hier hochzuladen. Dann gäbe es aber wieder Ärger mit den Oberen, die mir einstens verboten haben, Icon-Quellcode im Python-Unterforum zu posten.


    Beste Grüße


    Andreas

    Hallo framp,


    jetzt wäre es interessant zu erfahren, ob irgendwas in den Logs auf das alternde Netzteil hingewiesen hatte...


    Bei mir läuft im Hintergrund ein kleines Programm, dass in definierten Abständen die Ausgabe von dmesg auswertet - da hätten wohl vorher die Alarmglocken geläutet.



    Beste Grüße


    Andreas

    Hallo Gnom,

    Weiwei... ich hab zwar jetzt ne grobe Vorstellung, aber im Detail kann ich dem kaum folgen. Die Kurve von den Protzh-Zahlen und dem Jakobi-Symbol zu deinen Restklassen bekomm ich nicht hin. Grob leuchtet mir ein, dass du damit prüfst, ob es diese Zahl N gibt, für die die Jakobi-Kriterien gelten. Welche Rolle die zahl der verbleibenden, nicht gestrichenen Zahlen spielt, verstehe ich aber nicht wirklich.

    Wenn ich es richtig verstehe, ist es aber dann nötig, den Zahlenraum komplett vorzuhalten und zu wissen, welche Zahlen bereits gestrichen wurden. Mit jedem Schritt deiner Kalulationen wird der Zahlenraum größer und es werden ggf. weitere Zahlen gestrichen. Ich hab gelesen, dass die größte Proth-Primzahl über 9 Mio stellen hat... in diese Dimensionen kannst du so auf keinen Fall vorstoßen. Was ist dann das Ziel deiner Arbeit?

    ich habe gerade ein kleines Programm geschrieben (rund 30 Zeilen), dass die vom TO vorgegebenen Beispiele korrekt durchrechnet. Es geht wohl darum, dass diese Menge an Zahlen, die nach der Streich-Orgie [sorry, Christian] übrig bleiben, ein Ergebnis darstellen.

    Doch, bei Wahl der passenden Programmiersprache lässt sich in ein extrem hohe Stellenanzahl von Ganzzahlen vordringen. Das Feature, auf das es hier ankommt, nennt sich LIA (Large Integer Arithmetic). In Icon und Unicon lassen sich z.B. Fakultäten von 10000 berechnen. Jeder der angegebenen 35660 Stellen ist exakt (was sich durch vollständige Induktion zeigen lässt).


    Das Limit der Stellenanzahl wird durch das Betriebssystem vorgegeben... Bei RAM im Bereich von GB sind 10 oder 100 Millionen Stellen kein Problem bei jeglicher Form der Rechenoperationen. Blöd wird es, wenn das Ergebnis angezeigt werden soll. Das dauert dann aber nur...



    Beste Grüße


    Andreas

    Hallo neuernutzer,


    und die Anzahl der Elemente in {4,5,7,10,12,14,15,17,19,20,22,24,25,27,29,32 oder 34} interessiert Dich als Ergebnis?


    Wenn ja, dann habe ich was verstanden, was sich programmieren lässt.


    Wenn nein, bitte weiter erklären...


    Beste Grüße


    Andreas

    Hallo neuernutzer,


    läuft das in diesem speziellen Fall zufällig (oder immer?) darauf hinaus, dass die Anzahl der Restklassen, die diese gleichzeitige Nichtkongruenz erfüllen, der Anzahl der Primzahlen im Intervall, ]11, 2310] entspricht?



    Beste Grüße


    Andreas

    Hallo Gnom,

    Dann einigt euch mal.

    die Anzahl der Repräsentanten aller Resteklassen der Kongruenz von modulo n ist natürlich unendlich (was allein schon eine triviale Aussage darstellt). Aber die Mächtigkeit der Resteklassen ist und bleibt n.


    Die Aussage des TO stimmt nur im Grenzfall, dass n gegen plus Unendlich strebt. Zu diesem Grenzfall hat er sich aber nicht geäußert.



    Beste Grüße


    Andreas

    Hallo Gnom,

    Keine Ahnung, wie aufwändig es wird, das KgV von unbeschränkt vielen Restklassen zu berechnen...

    Es gibt nicht unbeschränkt viele Restklassen. Die Mächtigkeit der Restklasse mod n ist exakt n. Die Restklasse mod n besteht aus n Mengen, die sich eben durch den jeweiligen Rest bei der Berechnung mod n unterscheiden. Diese "Untermengen" besitzen unendlich viele Repräsentanten - aber darum geht es bei der Aufgabenstellung überhaupt gar nicht.


    Das kgV dient nur dem Zweck, die Obergrenze der zu betrachtenden Zahlen zu setzen.



    Beste Grüße


    Andreas

    Hallo Gnom,


    dazu

    ... Da kann dir ein Mathematiker sicher mehr sagen.

    ...

    fällt mir sogar eine Geschichte ein.


    Es gab mal in der Zeit, in der aktiver als heute zum Thema Fullerene geforscht wurde ein Wissenschaftler, der sich über die Strukturen (Anordnung der C-Atome im Raum) Gedanken gemacht hatte. Und er wolle verstehen, wie man sich diese Strukturen (ein sog. Polyeder) besser vorstellen könnte.


    Er ersann auf Basis seiner neuen Messwerte die Idee, dass die neue Struktur aus 12 5-Ecken und 20-Sechsecken bestehen könnte. Er fragte dann in seinem Wissenschaftsnetzwerk, ob jemand jemals zuvor mit einer solchen Struktur zu tun gehabt haben könnte. Das war wohl nicht so. Es handelte sich ja auch um ein sehr neues Forschungsgebiet.


    Ein Kind erfuhr von diesem wissenschaftlichen Austausch. Das Kind ließ sich erklären, worin der Unterschied von einem 5-Eck zu einem 6-Eck besteht. Beim Kicken auf der Straße wurde das Kind stutzig. Der Ball hatte sechseckige und auch fünfeckige Lederstücke. Das Kind zählte 12 Fünfecke und 20 Sechsecke. Sollte die neue Struktur des Fullerens so aussehen wie ein ordinärer Fußball?


    Nach einer weiteren Zeit des Forschens hat sich das das dann tatsächlich so bestätigt.



    Die andere Version der Geschichte geht so, dass ein Mathematiker diverse Anordnungen berechnet hatte. Der "Fußball" war auch darunter. Ein Kontakt zwischen dem Fulleren-Forscher und ihm wurde hergestellt. Der Fulleren-.Forscher hatte die Antwort auf seine Frage. Der Mathematiker hat dadurch gelernt, dass er die Struktur eines Fußballs aufgebaut hatte.


    Da der Fußball aus 32 Flächen besteht spricht man in dem Zusammenhang auch von einem Triantadoeder (32-Flächner). Bekannter sind da Tetraeder, Oktaeder, Ikosaeder...



    Beste Grüße


    Andreas