Eine Summe innerhalb einer Formel bilden



  • Hallo,

    das ist mein erster Beitrag hier, falls es also etwas holprig wirkt, bitte ich das zu entschuldigen.

    Ich möchte folgende Formel in C berechnen (tut mir leid, aber irgendwie geht der LaTeX-Code nicht, deshalb muss ich es leider so schreiben):

    C_{N,z} = C_{0,z-1} * ((V_v)/(V_v+V_z)) * ∑_{i=1}N[((V_{z-1})/(V_{z-1}+V_v))i * ((V_z)/(V_v+V_z))^{N-i}]+C_{0,z} * ((V_z)/(V_z+V_v))^N

    Ich hoffe, man kann trotzdem erkennen um was es hier geht.
    Ich weiß, dass ich die Summe über eine FOR-schleife berechnen lassen kann. Leider bin ich mir total unschlüssig wie das zu tun ist. Ich muss dazusagen, ich habe heute erst meine nicht sehr zahlreichen und verstaubten C-Kenntnisse wieder ausgegraben.

    Hab auch schon über Google versucht zu suchen, aber das war nicht wirklich aufschlussreich, oder ich benutze die falschen Suchbegriffe...

    Danke schonmal!



  • Saiph schrieb:

    Ich weiß, dass ich die Summe über eine FOR-schleife berechnen lassen kann. Leider bin ich mir total unschlüssig wie das zu tun ist.

    so ungefähr geht das:

    int i;
    
    summe = 0;
    for (i = anfang; i <= ende; i++)
    {
       summe = summe + irgendeine_berechnung_die_i_als_index_nimmt;
    }
    ... // hier ist die summe fertig berechnet
    

    ^^'anfang' ist dann das was unterm summenzeichen steht (i=anfang) und 'ende' ist die einzelne zahl überm summenzeichen.
    🙂



  • Saiph schrieb:

    C_{N,z} = C_{0,z-1} * ((V_v)/(V_v+V_z)) * ∑_{i=1}N[((V_{z-1})/(V_{z-1}+V_v))i * ((V_z)/(V_v+V_z))^{N-i}]+C_{0,z} * ((V_z)/(V_z+V_v))^N

    machma ruhig nocma mit latex, das kann man sich online auch woanders angucken, z.b. hier:
    http://www.codecogs.com/components/equationeditor/equationeditor.php

    das gewusel kann doch keine sau entziffern.
    gruß,
    l.n.



  • Noch ein Tip für Speed: Ist deine Rechung lang so "unroll" die for Schleife. Damit bezeichnet man, daß man innerhalb der Forschleife mehr als nur ein For-Index abarbeitet. im Optimalfall 8/16 Indexe in einem Rutsch. Z.B.:

    for(i = 0; i < durchgänge; i += 8)
    {
        a[i] = ...
        a[i+1] = ...
        a[i+2] = ...
        a[i+3] = ...
        a[i+4] = ...
        a[i+5] = ...
        a[i+6] = ...
        a[i+7] = ...
    }
    

    Damit gewinnt man im Schnitt ein Performance-Gewinn von 40 Prozentpunkten. Noch Besser ginge es wenn man alterniert zwischen zwei Arrays (wegen Speicherzugriffen) und diese am Ende wieder zusammenrechnet.



  • Ok, erstmal danke für alle Beitäge!

    @~fricky: Ich hab das Prinzip der Summenbildung mittels einer for-Schelife glaub ich verstanden, nun muss ich noch wuseln, dass ich das ganz auf mein Problem anweden kann, danke.

    @NDEBUG : Das überfordert mich ehrlich gesagt:)

    So long, Saiph


Anmelden zum Antworten