trapezregel fläche



  • ich will nicht die energie ermitteln sondern mit hilfe der sehnentrapezregel die fläche aus einer vorhandenen datei ermitteln



  • wie könnte denn beispielsweise so eine schleife aussehen (etwa so wie hier ???
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-128038-and-highlight-is-trapezregel.html)



  • die fläche zwischen zwei punkten bzw. zeitintervall:

    fläche= (y1>y2) ? (y2 *(abs(x1-x2)) + ((y1-y2)* abs(x1-x2))/2 :  (y1 *(abs(x1-x2)) + ((y2-y1)* abs(x1-x2))/2  )
    

    :schland:



  • ft schrieb:

    ich will nicht die energie ermitteln sondern mit hilfe der sehnentrapezregel die fläche aus einer vorhandenen datei ermitteln

    Jo, aber wozu? Wenn Du einen Oszillator hast (und das hast Du oben geschrieben) und Du die Fläche der Amplitudenschwingung im Intervall t0-tn berrechnest, dann hast Du die Energie in diesem Intervall. "Die Fläche" zu berrechnet muss ja im Bezug auf einen Oszillator irgendeinen Sinn haben. Und wenn Dein Oszillator mit sqrt(t) * sin(t) schwingt, ist er nicht stabil.



  • also muss ich erst die energie ermitteln um die fläche zu berechnen???



  • ft schrieb:

    also muss ich erst die energie ermitteln um die fläche zu berechnen???

    Nein. 😃 Die Frage ist doch, wenn Du einen Oszillator hast, und die Fläche unterhalb des Schwingungsverlaufs berrechnen willst, was bezweckst Du damit? Man berechnet die Fläche ja nicht aus Spaß an der Freude.
    Ich will erstmal Dein Problem verstehen, bevor ich hier versuche, irgendwelche Lösungen sinnlos in den Wald zu schreien.

    PS: Ich liege auch falsch, was die Energie betrifft...



  • ich hab von meinem prof mehrere aufgabenblätter bekommen (zum üben) und bei dieser scheiter ich.

    http://img169.imageshack.us/my.php?image=53760639zj8.png

    so lautet die augfabe:

    Es soll die Fläche unter dieser Kurve berechnet werden. Da die analytische Funktion unbekannt
    ist, muss dazu eine numerische Integration der Messwerte durchgeführt werden. Dies soll mittels
    der Sehnen-Trapezregel erfolgen.
    Recherchieren Sie den Algorithmus der Sehnen-Trapezregel1 und schreiben Sie ein modularisiertes
    Programm, das das Integral von A(t) über alle auf der Datei vorliegenden Stützstellen t hiermit
    näherungsweise berechnet. Nähern sie die Zeitpunkte der Nullstellen durch lineare Interpolation
    zwischen den beiden umgebenden Stützstellen an. Verwenden Sie mindestens zwei Funktionen:
    zur Trapezflächen-Berechnung und zur Nullstellen-Interpolation.
    Geben Sie aus: Das vorgefundene Zeitintervall und die Anzahl der Stützstellen, das Amplituden-
    Minimum und -Maximum mit deren Zeiten, die Zeiten der (interpolierten) Nulldurchgänge der
    Schwingung und das Integral2.
    Beachten Sie, a) dass die Stützstellen zwar monoton aufsteigend vorliegen, die summierte Form
    der Trapezregel aber hier nicht anwendbar ist, da die Stützstellen nicht äquidistant vorliegen und
    b) dass die gesamte Fläche (nicht-vorzeichenbehaftet) unter der Kurve ermittelt werden soll.



  • er meinst du hast ja die funktion der schwingung, somit kannst du ja die fläche über integral berechnen...



  • Puh, das ist aber eine Scheissaufgabe.

    Du musst, damit die Trapezregel überhaupt anwendbar wird, äquidistante Stützstellen haben. Das scheint aber bei der gegebenen Datei nicht der Fall zu sein.
    Hierfür brauchst Du also erstmal einen Interpolator mit dem Du aus den gegebenen Werten äquidistante Stützstellen erzeugen kannst. Ich nehme mal an, dass in Der einzulesenden Datei irgendwie die Messzeitpunkt stehen. Als einfache Annäherung kannst Du dann erstmal eine lineare Interpolation benutzen (schön einfach).
    Wenn Du dann äquidistante Werte hast, kann Deine Trapezfunktion zum Einsatz kommen. Nur, dass Du hier nicht Deine Funktion f(x) für die Werte nimmst, sondern die generierten äquidistanten Werte.



  • die gegebenen werte sind die zeit und die amplitude

    # t[sec] A[mm]
    0.0000 0.000000
    0.0021 0.002114
    0.0081 0.008124
    0.0240 0.024001
    0.0309 0.030896
    0.0420 0.041961
    0.0506 0.050552
    0.0594 0.059449
    0.0721 0.072062
    0.0764 0.076395
    0.0888 0.088772
    0.1015 0.101524
    0.1083 0.108322
    0.1207 0.120718
    0.1273 0.127323
    0.1397 0.139646
    0.1515 0.151507
    0.1637 0.163708
    0.1700 0.169955
    0.1773 0.177279
    0.1914 0.191403
    0.2039 0.203798
    0.2125 0.212389
    0.2171 0.217034
    0.2288 0.228688
    0.2380 0.237884
    0.2496 0.249485
    0.2566 0.256370
    0.2706 0.270382
    0.2820 0.281739
    0.2939 0.293531
    0.2973 0.296872
    0.3064 0.305935
    0.3191 0.318507
    0.3279 0.327225
    0.3430 0.342165
    0.3487 0.347828
    0.3619 0.360891
    0.3731 0.371914
    0.3793 0.378004
    0.3886 0.387098
    0.3997 0.397957
    0.4114 0.409469
    0.4205 0.418330
    0.4267 0.424353
    0.4439 0.440990
    0.4485 0.445463
    0.4578 0.454501
    0.4678 0.464076
    0.4795 0.475243
    0.4894 0.484691
    0.4991 0.493949
    0.5091 0.503429
    0.5188 0.512556
    0.5309 0.523859
    0.5432 0.535394
    0.5509 0.542528
    0.5624 0.553038
    0.5668 0.557075
    0.5778 0.567137
    0.5877 0.576068
    0.6025 0.589315
    0.6095 0.595569
    0.6168 0.601997
    0.6298 0.613439
    0.6423 0.624232
    0.6512 0.631856
    0.6579 0.637537
    0.6737 0.650816
    0.6812 0.657003
    0.6880 0.662557
    0.6988 0.671319
    0.7071 0.677989
    0.7215 0.689376
    0.7287 0.694907
    0.7388 0.702621
    0.7495 0.710684
    0.7564 0.715783
    0.7704 0.725939
    0.7767 0.730405
    0.7878 0.738183
    0.8006 0.746922
    0.8100 0.753098
    0.8192 0.759062
    0.8285 0.764948
    0.8373 0.770374
    0.8526 0.779452
    0.8608 0.784157
    0.8663 0.787252
    0.8768 0.792944
    0.8917 0.800669
    0.8980 0.803777
    0.9082 0.808672
    0.9230 0.815318
    0.9296 0.818139
    0.9426 0.823373
    0.9536 0.827505
    0.9605 0.829926
    0.9719 0.833693
    0.9793 0.835933
    0.9900 0.838948
    1.0033 0.842237
    1.0100 0.843715
    1.0175 0.845226
    1.0298 0.847345
    1.0410 0.848888
    1.0529 0.850105
    1.0626 0.850776
    1.0716 0.851137
    1.0827 0.851225
    1.0885 0.851112
    1.1006 0.850520
    1.1114 0.849572
    1.1191 0.848659
    1.1314 0.846763
    1.1426 0.844577
    1.1526 0.842246
    1.1626 0.839574
    1.1728 0.836455
    1.1761 0.835365
    1.1902 0.830242
    1.1989 0.826684
    1.2063 0.823437
    1.2226 0.815590
    1.2340 0.809443
    1.2402 0.805862
    1.2480 0.801185
    1.2629 0.791594
    1.2735 0.784194
    1.2798 0.779646
    1.2928 0.769609
    1.3018 0.762295
    1.3138 0.752022
    1.3163 0.749780
    1.3261 0.740836
    1.3385 0.728986
    1.3501 0.717335
    1.3591 0.707880
    1.3717 0.694121
    1.3784 0.686561
    1.3886 0.674607
    1.4007 0.659962
    1.4126 0.644986
    1.4168 0.639577
    1.4306 0.621352
    1.4364 0.613528
    1.4534 0.589642
    1.4575 0.583645
    1.4678 0.568511
    1.4801 0.549943
    1.4933 0.529378
    1.4974 0.522851
    1.5073 0.507004
    1.5191 0.487529
    1.5276 0.473280
    1.5421 0.448412
    1.5484 0.437337
    1.5590 0.418692
    1.5727 0.393977
    1.5766 0.386910
    1.5924 0.357652
    1.5992 0.344810
    1.6107 0.323069
    1.6168 0.311399
    1.6293 0.287121
    1.6419 0.262611
    1.6540 0.238696
    1.6562 0.234293
    1.6664 0.214109
    1.6826 0.181652
    1.6891 0.168423
    1.7029 0.140515
    1.7091 0.127920
    1.7197 0.106469
    1.7338 0.077866
    1.7390 0.067363
    1.7487 0.047849
    1.7597 0.025643
    1.7714 0.002073
    1.7800 -0.015105
    1.7881 -0.031069
    1.8002 -0.054924
    1.8085 -0.071237
    1.8235 -0.100108
    1.8291 -0.110739
    1.8398 -0.130837
    1.8526 -0.154699
    1.8617 -0.171246
    1.8661 -0.179057
    1.8823 -0.207594
    1.8882 -0.217711
    1.8990 -0.235963
    1.9108 -0.255315
    1.9165 -0.264468
    1.9328 -0.289688
    1.9395 -0.299597
    1.9478 -0.311659
    1.9567 -0.324124
    1.9721 -0.344715
    1.9820 -0.357278
    1.9875 -0.363919
    1.9996 -0.377963
    2.0116 -0.390918
    2.0172 -0.396640
    2.0303 -0.409183
    2.0364 -0.414617
    2.0481 -0.424286
    2.0567 -0.430710
    2.0677 -0.438181
    2.0822 -0.446588
    2.0907 -0.450695
    2.0964 -0.453165
    2.1085 -0.457521
    2.1235 -0.461235
    2.1328 -0.462606
    2.1385 -0.463095
    2.1476 -0.463300
    2.1636 -0.461965
    2.1699 -0.460839
    2.1802 -0.458288
    2.1913 -0.454510
    2.2020 -0.449918
    2.2094 -0.446159
    2.2164 -0.442161
    2.2281 -0.434636
    2.2437 -0.422815
    2.2481 -0.419102
    2.2584 -0.409925
    2.2675 -0.400990
    2.2785 -0.389461
    2.2892 -0.377369
    2.2981 -0.366553
    2.3082 -0.353711
    2.3181 -0.340462
    2.3293 -0.324604
    2.3434 -0.303611
    2.3527 -0.289161
    2.3562 -0.283432
    2.3686 -0.263099
    2.3788 -0.245793
    2.3877 -0.230300
    2.3995 -0.209058
    2.4118 -0.186487
    2.4209 -0.169267
    2.4306 -0.150910
    2.4370 -0.138542
    2.4531 -0.106865
    2.4582 -0.096845
    2.4740 -0.065391
    2.4833 -0.046857
    2.4924 -0.028567
    2.5021 -0.008992
    2.5105 0.007761
    2.5163 0.019249
    2.5294 0.045222
    2.5437 0.073250
    2.5485 0.082446
    2.5569 0.098528
    2.5693 0.121701
    2.5789 0.139320
    2.5932 0.164854
    2.6013 0.178654
    2.6098 0.192954
    2.6208 0.210863
    2.6319 0.228029
    2.6432 0.244686
    2.6461 0.248857
    2.6577 0.264728
    2.6665 0.276026
    2.6808 0.292969
    2.6904 0.303404
    2.6993 0.312358
    2.7132 0.324769
    2.7177 0.328388
    2.7263 0.334759
    2.7427 0.344722
    2.7515 0.348950
    2.7605 0.352420
    2.7721 0.355576
    2.7790 0.356752
    2.7900 0.357548
    2.7998 0.357132
    2.8124 0.355009
    2.8239 0.351568
    2.8291 0.349509
    2.8393 0.344647
    2.8498 0.338416
    2.8583 0.332530
    2.8736 0.319994
    2.8768 0.317139
    2.8903 0.303698
    2.8980 0.295199
    2.9132 0.276747
    2.9224 0.264685
    2.9267 0.258729
    2.9363 0.245060
    2.9477 0.227775
    2.9620 0.204604
    2.9730 0.186109
    2.9782 0.176947
    2.9932 0.149898
    2.9962 0.144468
    3.0074 0.123445
    3.0163 0.106432
    3.0323 0.075117
    3.0425 0.055013
    3.0492 0.041608
    3.0561 0.027714
    3.0704 -0.000849
    3.0804 -0.020771
    3.0914 -0.042622
    3.1018 -0.062889
    3.1082 -0.075173
    3.1185 -0.094878
    3.1275 -0.111547
    3.1366 -0.128150
    3.1464 -0.145417
    3.1581 -0.165251
    3.1700 -0.184342
    3.1779 -0.196467
    3.1925 -0.217387
    3.2024 -0.230505
    3.2066 -0.235772
    3.2165 -0.247530
    3.2270 -0.258826
    3.2391 -0.270379
    3.2535 -0.281835
    3.2615 -0.287134
    3.2707 -0.292247
    3.2797 -0.296239
    3.2897 -0.299428
    3.2961 -0.300773
    3.3100 -0.301880
    3.3239 -0.300424
    3.3305 -0.298841
    3.3372 -0.296677
    3.3508 -0.290430
    3.3597 -0.285075
    3.3718 -0.276173
    3.3770 -0.271788
    3.3905 -0.258899
    3.3971 -0.251786
    3.4136 -0.231935
    3.4228 -0.219592
    3.4289 -0.211062
    3.4423 -0.190940
    3.4509 -0.177138
    3.4591 -0.163437
    3.4675 -0.148984
    3.4778 -0.130531
    3.4863 -0.114821
    3.4982 -0.092406
    3.5130 -0.063474
    3.5197 -0.050231
    3.5306 -0.028688
    3.5383 -0.013233
    3.5449 0.000000

    gebe es da einen schritt der recht hilfreich wäre???



  • 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.


Anmelden zum Antworten