Wahrscheinlichkeit einer Summe



  • Einfach alle möglichen Kombinationen von Punktzahlen enummerieren und abzählen. Fertig.


  • Gesperrt

    Hab es gerade herausgefunden... Das Ergebnis ist 40 oder 39,717:
    solve (1-(((5*(x/4))-50)*0.42))⁵=2

    Das dauerte etwas. Alle Übungsblätter müssen durchschnittlich mindestens 39,717 Punkte haben, damit mindestens 50 % der Studenten bestehen. Weniger: Es bestehen weniger als die Hälfte. Mehr: Es bestehen mehr als die Hälfte.
    Danke euch. 🙂


  • Mod

    @EinNutzer0 sagte in Wahrscheinlichkeit einer Summe:

    Die Übungsblätter sind in dem real life use case wirklich so gestrickt, dass "der durchschnittliche Student" ca. genau die Hälfte der maximal erreichbaren Punkte bekommt.

    Wenn's möglich wäre, würde ich eine hohe Geldsumme wetten, dass deine Annahmen komplett unrealistisch und falsch sind. Das Übungsblatt, das eine zufällige Gleichverteilung von Punkten erzeugt, muss erst noch erfunden werden. Daher meine und manni66s Skepsis. Das schreit geradezu nach falschem Modell, ist aber eine essentielle Annahme bei deiner Rechnung. Da dies aber nun schon die dritte Erwähnung davon ist und du die ersten beiden Male auch nicht darauf eingegangen bist, gebe ich es auf, dich zu deinem Glück zu zwingen.


  • Gesperrt

    Ich hatte meine Frage gestellt und meine bisherigen Versuche. Dass es so kompliziert wird, hätte ich nicht gedacht. Ich bin auch nicht sehr unfreundlich geworden. Was hätte ich anders machen sollen?

    Obige Formel ist noch nicht ganz richtig. Der Erwartungswert (5*(x/2)) pro Übungsblatt/Summenglied ist aber richtig...


  • Gesperrt

    Hallo nochmal,
    also folgendes soll 0.5 ausgeben:

    // Example program
    #include <iostream>
    #include <string>
    
    bool besteht(int * maxs, int * aktuell) {
        int sum = 0;
        bool b = true;
        //const int len = sizeof(maxs) / sizeof(maxs[0]);
        const int len = 5;
        for (int i = 0; i < len; i++) {
            sum += aktuell[i];
            if ((100.0 / (double)maxs[i]) * (double)aktuell[i] < 42.0) {
                b = false;
            }
        }
        if ((sum >= 100) || (sum >= 50 && b)) {
            return true;
        } else {
            return false;
        }
    }
    
    int main()
    {
        const int m = 39; // ???
        int maxs[5] = {
            m, m, m, m, m
        };
        int aktuell[5];
        int sum = 0;
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 5; j++) {
                aktuell[j] = rand() % (m + 1);
            }
            std::cout << i << " " << besteht(maxs, aktuell) << "\n";
            if (besteht(maxs, aktuell))
                sum++;
        }
        std::cout << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
        return 0;
    }
    

    Die Frage wär, wie m (bei den drei Fragezeichen) gewählt werden muss.

    Bekannt ist:
    ((x/2)*5) Erwartungswert
    (1-0.42)^5 * ((x/2)*5) erste Wahrscheinlichkeit
    ?



  • @EinNutzer0
    Ich kenne dein Problem nicht, aber warum fragst du nicht deinen PC?

    // Example program
    #include <iostream>
    #include <string>
    
    bool besteht(int * maxs, int * aktuell) {
        int sum = 0;
        bool b = true;
        //const int len = sizeof(maxs) / sizeof(maxs[0]);
        const int len = 5;
        for (int i = 0; i < len; i++) {
            sum += aktuell[i];
            if ((100.0 / (double)maxs[i]) * (double)aktuell[i] < 42.0) {
                b = false;
            }
        }
        if ((sum >= 100) || (sum >= 50 && b)) {
            return true;
        } else {
            return false;
        }
    }
    
    
    void Test(int m)
    {
        //const int m = 39; // ???
        int maxs[5] = {
            m, m, m, m, m
        };
        int aktuell[5];
        int sum = 0;
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 5; j++) {
                aktuell[j] = rand() % (m + 1);
            }
            //std::cout << i << " " << besteht(maxs, aktuell) << "\n";
            if (besteht(maxs, aktuell))
                sum++;
        }
        //std::cout << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
    
        std::cout << "Variable m: " << m << "     " << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
    }
    
    int main()
    {
        for (int i = 0; i < 100; i++)
        {
            Test(i);
        }
        return 0;
    }
    

    Bei m = 40 bekomme ich 0.497 heraus, bei m = 41 0.572.


  • Gesperrt

    @Quiche-Lorraine sagte in Wahrscheinlichkeit einer Summe:

    aber warum fragst du nicht deinen PC

    Weil ich ja nach der mathematischen Gleichung dafür suche, um den genauen Wert für m zu ermitteln. Dieser kann auch "rational" sein...



  • Wenn du das rand rausnimmst und einfach enumerierst, dann ist das eine mathematische Formel. In simpel: Summe über alle Ergegnisse, 0 bei nicht bestanden, 1/Anzahl Ergebnisse bei bestanden.


  • Gesperrt

    @TGGC Kannst Du vielleicht meine Frage beantworten oder einfach Rand halten? Über irgendetwas iterieren ist keine mathematische Formel.



  • @EinNutzer0 doof?


  • Gesperrt

    Ich würde wegen eines Nonsense Beitrags von @TGGC nicht direkt von Doofheit ausgehen, aber wenn Du auch keine Antwort auf die Frage hast, wieso antwortest Du dann? Sich einfach etwas wichtig und hervor tun? Verzichtbar für mich... Geh einfach und Trolle wen anders... 🙂


  • Mod

    Ich mache hier mal zu, bevor das noch bizarrer wird...


Anmelden zum Antworten