trapezregel fläche



  • Erstmal eine neue Tabelle mit äquidistanten Wertan aufbauen. Dafür würde ich lineare Interpolation verwenden. Also x(tn) und x(tn+1) (n sei der Abtastzeitpunkt) mit Geraden verbinden, und dann in gleichen Abständen Interploationspunkte berrechen (Lineare Interpolation).
    So erhälst Du eine neue Tabelle mit Zeit/Wert-Paaren, in denen die Abstände jetzt aber äquidistant sind. Mit dieser Tabelle gehst Du jetzt in Deine Trapezformel rein. Und dabei nimmst Du an dieser Stelle:

    flaeche += (f(l) + f(r)) / 2 * d; // Trapezformel
    

    anstatt der von f(x) berrechneten Werte die Werte aus der äquidistanten Tabelle.
    So sieht grob der Ablauf aus. Die Implementierung überlasse ich Dir. 😉



  • danke für die hilfe 😃 :schland:



  • Tachyon schrieb:

    Erstmal eine neue Tabelle mit äquidistanten Wertan aufbauen. Dafür würde ich lineare Interpolation verwenden.

    Dann ist das Ergebnis doch am Ende bestenfalls so gut wie wenn du gleich die Trapezflächen aufsummiert hättest. Bestenfalls heißt, das ist nur dann der Fall, wenn die äquidistanten Stützstellen alle ursprünglichen Stützstellen einschließen.



  • Bashar schrieb:

    Dann ist das Ergebnis doch am Ende bestenfalls so gut wie wenn du gleich die Trapezflächen aufsummiert hättest.

    Das geht nicht, wenn man die diskrete Form anwendet. Aber Du hast in sofern recht, dass ein Sinusinterpolator wahrscheinlich bessere Ergebnisse liefert (wenn die Referenzfrequenz einigermaßen passt).



  • ich hab überlegt und überlegt aber ich komm nicht auf die lösung.

    falls einer von euch interesse und lust hat diese aufgabe zu lösen könnte er die dann bitte reinstellen.

    wäre echt spitze von euch



  • ft schrieb:

    ich hab überlegt und überlegt aber ich komm nicht auf die lösung.

    falls einer von euch interesse und lust hat diese aufgabe zu lösen könnte er die dann bitte reinstellen.

    wäre echt spitze von euch

    Was ist denn das Ergebnis Deiner Überlegungen? Eine Lösung wird Dir hier keiner so ohne weiteres geben, denke ich. Es sei denn, Du zahlst dafür.



  • ich hab versucht nur mit hilfe der vorhandenen datei die interpolation zumachen ohne eine neue datei zu ertsellen und dann mit hilfe der formel zu lösen , aber ich komm nicht drauf mit dem einlesen der daten aus der datei (wie ich die daten mit einer schleife einlese).



  • ft schrieb:

    ich hab versucht nur mit hilfe der vorhandenen datei die interpolation zumachen ohne eine neue datei zu ertsellen und dann mit hilfe der formel zu lösen , aber ich komm nicht drauf mit dem einlesen der daten aus der datei (wie ich die daten mit einer schleife einlese).

    Zeig mal den Code.



  • int main(int argc, char *argv[])
    {
    
        ifstream daten ("osc.dat");
        if (!daten) {cerr << "Das Oeffnen der Datei ist fehlgeschlagen" << endl;
                    system("PAUSE");
                    return 1;
                    }    
    for(zl = 0; zl < LNG; zl++){
               vecb [zl] = 0;
                for(sp = 0; sp < LNG; sp++){
                        vecb [zl] +=
                        matrix [zl][sp] *
                        veca [sp];
                }
        }
    

    zusätzlich kommt diese nachricht

    7 D:\Dev-Cpp\include\c++\3.4.2\cstdlib:49, from a2.cpp In file included from D:/Dev-Cpp/include/c++/3.4.2/cstdlib:49, from a2.cpp



  • Tachyon schrieb:

    Bashar schrieb:

    Dann ist das Ergebnis doch am Ende bestenfalls so gut wie wenn du gleich die Trapezflächen aufsummiert hättest.

    Das geht nicht, wenn man die diskrete Form anwendet.

    Das heißt? Bitte langsam schreiben, ich interpoliere nicht jeden Tag 😉 Aber wenn ich das richtig verstehe, muss ich doch nur für die Stützpunkte (xk,yk) (k=0..N) für k=0..N-1 die Flächen (xk+1 - xk)*(yk+1 + yk)/2 berechnen und aufsummieren. (Vorher natürlich die Nullstellen finden und dort zusätzliche Stützpunkte einfügen, dann von allen Funktionswerten den Betrag bilden.) Welchen Nachteil hab ich denn dann durch die nicht-äquidistanten Stützstellen?

    Aber Du hast in sofern recht, dass ein Sinusinterpolator wahrscheinlich bessere Ergebnisse liefert (wenn die Referenzfrequenz einigermaßen passt).

    Keine Ahnung.



  • oder geht es so besser???

    while (daten >> t){
              f = funk(daten);
              }
    


  • Bashar schrieb:

    [...]

    Man kann beliebige Zeitstücke nehmen. Aber nur für die analytische Form.
    Bei der diskreten Form geht das Integral in eine Summe über. Für ein Intervall n..n+1 in nicht äquidistanten Abständen ist die diskrete Form nicht stetig. Daher geht das nicht.
    Puh, ich glaube die Erklärung ist scheisse, aber ich weiss nicht, wie ich das besser ausdrücken soll.



  • @ft
    Ich versuche mal, Dir nachher weiter zu helfen. Im Moment ist meine Zeit etwas begrenzt.
    Oder vielleicht kanns auch ein anderer.



  • ich bedank mich bei euch mal gucken wie enden wird.

    😕 :schland:



  • hat jemand ne lösung für die aufgabe, muss sie auch machen:)...


Anmelden zum Antworten