trapezregel fläche



  • hi leute mal ne frage zu c++

    hab noch wenig vll 1 monat mit gearbeitet und nur ein paar grundkenntnisse drauf

    ich soll einen damped oscillator mit hilfe der trapezregel berechnen (fläche als ergebnis) und hab ne datei vorgegeben.

    dazu soll es mit 3 quellverzeichnissen sein.(die 1. ist die main.cpp die 2. ist die funktion.cpp und die 3. ist die funktion.h)

    ich soll die aufgabe nur hilfe von schleifen, felder und funktionen berechnen.

    meine func.h sieht so aus

    #ifndef _FUNC.H_
    #define _FUNC.H_

    #include <cmath>
    #include <iostream>
    #include <cstdlib>

    double f(double x);

    #endif

    die func.cpp so

    #include "func.h"

    double f(double x)
    {
    return sqrt(x) * sin(x);
    }

    double integral(double a, double b) // a, b: Integrationsgrenzen
    {
    double intervall = b-a;
    double d = intervall / 100; // 100 Trapeze, d: Breite der Trapeze

    double l = a;
    double r = a+d;
    double flaeche = 0;
    for (int i=0; i++; i<=100)
    {
    flaeche += (f(l) + f(r)) / 2 * d; // Trapezformel
    l = l + d;
    r = r + d;
    }
    return flaeche;
    }

    und bei der main hab ich das problem wie ich es weiter machen kann und sieht zur zeit so aus

    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include <fstream>

    using namespace std;

    #include "func.h"

    int main(int argc, char *argv[])
    {
    ifstream daten ("osc.dat");
    if (!daten) {cerr << "Das Oeffnen der Datei ist fehlgeschlagen" << endl;
    system("PAUSE");
    return 1;
    }

    könnt ihr mir tipps geben oder anregungen (sollte mit for, while, do, int, double und ähnliches sein)

    thx an euch schon mal im voraus ft



  • was willst du denn in der main machen? inder function.h/cpp ist quaise deine mathematik Bibliothek und in main willst du die funktionen verwendne? ud weist nic h wie?

    was hast du den schon?



  • na ich hab in meiner osc.dat datei zahlen drinne (einmal für die y und einmal für die x achse)

    ich muss aus den eingelesenen zahlen die fläche ermittelt die diese kurve zeigt

    ich brauch irgendwie ne formel oder schleife, etc. zum ermitteln der fläche

    ich weiß halt nicht wie ich das schreiben soll ich studiere nämlich maschinenbau und ich soll im fach informatik lernen wie man c++ schreibt und da ich dort nicht viel in erfahtrung bringen konnte und ich diese aufgabe gestellt bekommen habe und nicht weiterkomme frag ich halt euch.



  • Bitte benutzt cpp-Tags.

    Also du weisst nicht, wie man eine Flächte berechnet?



  • ich weiß nicht wie man die fläche mit hilfe der trapezformel in c++ umwandle (schriebe)

    ich hab erst seit einem monat c++ und lerne es erst seitdem

    was meinst du mit tags ???



  • mit tags meitn er , das du der code hier formatiert dargestellt wird:

    ifndef _FUNC.H_
    #define _FUNC.H_
    
    #include <cmath>
    #include <iostream>
    #include <cstdlib>
    
    double f(double x);
    
    #endif
    
    die func.cpp so
    
    #include "func.h"
    
    double f(double x)
    {
    return sqrt(x) * sin(x);
    }
    
    double integral(double a, double b) // a, b: Integrationsgrenzen
    {
    double intervall = b-a;
    double d = intervall / 100; // 100 Trapeze, d: Breite der Trapeze
    
    double l = a;
    double r = a+d;
    double flaeche = 0;
    for (int i=0; i++; i<=100)
    {
    flaeche += (f(l) + f(r)) / 2 * d; // Trapezformel
    l = l + d;
    r = r + d;
    }
    return flaeche;
    }
    
    und bei der main hab ich das problem wie ich es weiter machen kann und sieht zur zeit so aus
    
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    #include "func.h"
    
    int main(int argc, char *argv[])
    {
    ifstream daten ("osc.dat");
    if (!daten) {cerr << "Das Oeffnen der Datei ist fehlgeschlagen" << endl;
    system("PAUSE");
    return 1;
    }
    

    so also du musst deine datei durchlaufen... mit ner schleife.. und die werte aus der datei pro zeite lesen.. hast dir mal beispiele angeschaut?

    was ist das für ne fläche? x udn y sind die eckpunkt koordinaten oder?



  • ft schrieb:

    ich weiß nicht wie man die fläche mit hilfe der trapezformel in c++ umwandle (schriebe)

    ich hab erst seit einem monat c++ und lerne es erst seitdem

    was meinst du mit tags ???

    Aber du rechnest da ja schon etwas. Und das ist falsch, oder wie?

    Ich denke eher, dass du ein Problem hast die Daten aus der Datei zu lesen, weil du rufst die Funktion kein einziges mal auf.

    Schau dir mal die I/O Examples hier an:
    http://www.cppreference.com/cppio/examples.html

    Da siehst du, wie man Daten aus einer Datei einliest.



  • also die x-achse ist bei mir die zeit und die y- achse die amplitude (also koordinatenkreuz)

    es läuft eine kurve vom punkt 0.00 die einmal ins posotive dann ins negative und wieder ins postive und dann wieder ins negative verläuft.(in bezug auf die x-achse

    es sind insgesamt 4 flächen.

    ich hab schon vieles im netz gesucht und in büchern auch nichts vergleichbares gefunden (LEIDER) ihr seid halt mein letzter versuch.



  • Wenn ich das richtig verstehe, willst Du mit hilfe der Sehnentrapezformel die Energie Deines Oszilators (mit f(xt)) bestimmen, oder?
    Schwingt der wirklich mit sqrt(x) * sin(x) ein? Kommt mir irgendwie komisch vor.
    Oder habe ich grundsätzlich falsch verstanden, was Du da bezweckst?



  • du hast eine sinuskurve nehm ich an, welceh exkatr 2 perioden lang ist? und du willst die summe der fläche aus den beiden positien und negativen flächen der kurve?

    Du könntes theoretisch aud en kuvenpunkten näherungweise die kruvenfunktion ermitteln, und dann mit integralrechnung die flächen berechnen;)

    Im trapezverfahren prinzip liest du immer die zwei aueinder folgende Punkte aus, und beechnet darin die fläche (einfache geometrie). Diese ergebnisse summerist du in der schleife auf..



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


Anmelden zum Antworten