Elementarsymmetrische Polynome



  • Hier
    http://de.wikipedia.org/wiki/Symmetrisches_Polynom#Elementarsymmetrische_Polynome
    habe ich die mathematische Formel gefunden, mit der ich etwas berechnen möchte.

    Weiss einer, wie ich die einzelnen σ programmtechnisch einfach bestimmen kann? Gibt es da schon fertige Funktionen?
    Die X,n habe ich, die σ,n möchte ich berrechnen.

    PS: In meinem Programm ist das n auch variabel, also kann man nicht im Vorraus sagen es gibt zum Bsp 5 Elemente...


  • Mod

    😕 Unten steht doch die allgemeine Formel für beliebiges k. Wo ist das Problem? Kennst du keine Schleifen?



  • Wahrscheinlich kennt er den Buchstaben 'k' nicht.



  • Doch, Schleifen hab ich schonmal kennengelernt und k ist mir auch ganz geläufig.

    σ,k = Σ ∏ X,i

    Dachte vielleicht gibt es schon eine vordefinierte Funktion.
    Das gibt ne ziemlich unübersichtliche Rechnung, weiß nicht ob ich das auf Anhieb mit den Schleifen hinbekomme, deshalb meine Frage....


  • Mod

    Was ist da dran unübersichtlich? Zwei verschachtelte Schleifen und fertig. Und für Schleifen wie diese gibt es in numeric auch eine fertige Funktion namens std::accumulate, aber wenn du mit Schleifen nicht zurecht kommst, ist das vermutlich etwas zu hoch.



  • Tut mir leid, das ist tatsächlich zu hoch für mich.

    Für die ersten beiden infragekommenden n's hab ich mir aufgeschrieben wie die Lösung aussehen muss, und zwar:
    0,1,2,3,4 steht für die Eingabewerte z.B."zahl[0] ... zahl[4]"

    Bsp 1:

    erg[0] = 0*1*2
    erg[1] = 0*1 + 0*2 + 1*2
    erg[2] = 0 + 1 + 2
    

    Bsp2:

    erg[0] = 0*1*2*3*4
    erg[1] = 0*1*2*3 + 0*1*2*4 + 0*1*3*4 + 0*2*3*4 + 1*2*3*4
    erg[2] = 0*1*2 + 0*1*3 + 0*1*4 + 0*2*3 + 0*2*4 + 0*3*4 + 1*2*3 + 1*2*4 + 1*3*4 + 2*3*4
    erg[3] = 0*1 + 0*2 + 0*3 + 0*4 + 1*2 + 1*3 + 1*4 + 2*3 + 2*4 + 3*4
    erg[4] = 0 + 1 + 2 + 3 + 4
    

    Kannst mir jmd nen Tipp geben wie die Schleife in etwa aussehen muss? Ich steh da grad auf dem Schlauch.



  • Ich versuch nochmal mein Glück.
    Wenn ich die einzelnen Summanden (die aus Produkten bestehen) bestimmten könnte - bzw mir da einer helfen könnte - würd ichs hinbekommen.

    Wie krieg ich folgendes hin?

    Ich hab die Werte

    fw[0] bis fw[8]
    

    Aus den 9 Werten brauche ich alle möglichen Varianten/Zusammenstellungen, je nach dem wieviele Faktoren das Produkt haben soll. Anzahl Faktoren geht ebenso von 1 bis 9.

    Bsp:

    Anzahl Faktoren: 9
    Resultierendes Produkt:

    fw[0]*fw[1]*fw[2]*fw[3]*fw[4]*fw[5]*fw[6]*fw[7]*fw[8]
    

    Anzahl Faktoren: 8
    Res. Produkte:

    fw[0]*fw[1]*fw[2]*fw[3]*fw[4]*fw[5]*fw[6]*fw[7]
    fw[0]*fw[1]*fw[2]*fw[3]*fw[4]*fw[5]*fw[6]*fw[8]
    fw[0]*fw[1]*fw[2]*fw[3]*fw[4]*fw[5]*fw[7]*fw[8]
    fw[0]*fw[1]*fw[2]*fw[3]*fw[4]*fw[6]*fw[7]*fw[8]
    fw[0]*fw[1]*fw[2]*fw[3]*fw[5]*fw[6]*fw[7]*fw[8]
    fw[0]*fw[1]*fw[2]*fw[4]*fw[5]*fw[6]*fw[7]*fw[8]
    fw[0]*fw[1]*fw[3]*fw[4]*fw[5]*fw[6]*fw[7]*fw[8]
    fw[0]*fw[2]*fw[3]*fw[4]*fw[5]*fw[6]*fw[7]*fw[8]
    fw[1]*fw[2]*fw[3]*fw[4]*fw[5]*fw[6]*fw[7]*fw[8]
    

    Bei 7, 5, 4 Faktoren möchte ich das nicht von Hand machen...
    Bei 1 gehts noch
    Anzahl Faktoren: 1
    Res. Produkte:

    fw[0]
    fw[1]
    fw[2]
    fw[3]
    fw[4]
    fw[5]
    fw[6]
    fw[7]
    fw[8]
    

    Die dann vollends zusammenzuaddieren ist nicht das Problem.
    Wie kann ich die jeweiligen produkte bestimmen? Kann mir da bitte jemand helfen / Tipps geben?





  • [Rewind] schrieb:

    http://www.cplusplus.com/reference/algorithm/next_permutation/

    Danke, ich glaube damit komme ich weiter!



  • elemsym schrieb:

    [Rewind] schrieb:

    http://www.cplusplus.com/reference/algorithm/next_permutation/

    Danke, ich glaube damit komme ich weiter!

    Verdammt, doch nicht.

    Mein Ziel ist es, wie oben beschrieben, aus z.B. 8 Werten alle 4 möglichen Varianten zu bekommen, allerdings ohne dass die sich doppeln (1234 soll rauskommen und dann nicht mehr 2341..., nachste Variante wäre dann 1235 und die letzte 5678)

    Weiß da einer etwas entsprechendes?



  • Ich würde alle Zahlen von 0 bis 29-1 durchgehen, in Binärform umwandeln - und dann anhand jeweils die Faktoren, die zu den 1er-Stellen gehören, verwenden.


Log in to reply