meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:start [ 4 January 2021 13:18] – [Computerprogramm] larskriegera_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:start [ 7 January 2021 15:03] (current) – [Bilder einbinden] larskrieger
Line 36: Line 36:
 #include <string> #include <string>
 #include <vector> #include <vector>
 +#define _USE_MATH_DEFINES
  
 double degree_to_rad(double phi) { double degree_to_rad(double phi) {
Line 53: Line 54:
  
 //function for solving an one dimensional differential equation //function for solving an one dimensional differential equation
-std::vector<std::vector<double>> differentialSolve(double f(double, double, args), double t0, double tmax, double y0, args Args) {+std::vector<std::vector<double>> differentialSolve(double f(double, args), double t0, double tmax, double y0, args Args) {
     int stepNumber = (int)(tmax - t0) / Args.dt;     int stepNumber = (int)(tmax - t0) / Args.dt;
     double h = Args.dt;     double h = Args.dt;
Line 60: Line 61:
     if (t0 < tmax) {     if (t0 < tmax) {
         for (int i = 0; i < stepNumber; i++) {         for (int i = 0; i < stepNumber; i++) {
-            double newPhi = points[i][1] + h points[i][2];+            double newT = points[i][0] + h
 +            double newDPhi = points[i][2] + h * f(points[i][1], Args); 
 +            double newPhi = points[i][1] + h * newDPhi;
             //for greater angles it doesn't make sense             //for greater angles it doesn't make sense
             if (newPhi >= M_PI / 2) {             if (newPhi >= M_PI / 2) {
                 break;                 break;
             }             }
-            points.push_back({points[i][0] + h, newPhi, points[i][2] + h * f(points[i][0], points[i][1], Args)});+            points.push_back({newT, newPhi, newDPhi});
         }         }
     }     }
     return points;     return points;
 +}
 +
 +//function for calculating the fall time for a given phi0
 +double fallTime(double f(double, args), double t0, double tMax, double phi0, args Args) {
 +    std::vector<std::vector<double>> angles = differentialSolve(f, t0, tMax, phi0, Args);
 +    return angles[angles.size() - 1][0] - t0;
 } }
  
 //the second derivitative of phi based on phi //the second derivitative of phi based on phi
-double phiPP(double t, double phi, args Args) {+double phiPP(double phi, args Args) {
     return sin(phi) / pow(Args.tau, 2);     return sin(phi) / pow(Args.tau, 2);
 } }
Line 86: Line 95:
  
 int main() { int main() {
 +    int t0 = 0;
     int tMax = 100;     int tMax = 100;
     args Args(1.45);     args Args(1.45);
-    std::vector<std::vector<double>> angles = differentialSolve(phiPP, 0, tMax, 0.25, Args);+    std::vector<std::vector<double>> angles = differentialSolve(phiPP, t0, tMax, 0.25, Args);
     std::string outputString = "t\tphi\n";     std::string outputString = "t\tphi\n";
     for (int i = 0; i < angles.size(); i++) {     for (int i = 0; i < angles.size(); i++) {
Line 94: Line 104:
         outputString += std::to_string(angles[i][1]) + "\n";         outputString += std::to_string(angles[i][1]) + "\n";
     }     }
-    writeTextToCsv(outputString, "Winkel_in_Abhängigkeit_der_Zeit_bei_phi0=0.25");+    writeTextToCsv(outputString, "Winkel_in_Abhaengigkeit_der_Zeit_bei_phi0_0_25");
  
     std::vector<std::vector<double>> fallTimePhi0;     std::vector<std::vector<double>> fallTimePhi0;
-    for (double phi0 = 0.01; phi0 < M_PI / 2; phi0 += 0.001) { +    for (double phi0 = 0.001; phi0 < M_PI / 2; phi0 += 0.001) { 
-        std::vector<std::vector<double>> angles = differentialSolve(phiPP, 0, tMax, phi0, Args)+        fallTimePhi0.push_back({phi0, fallTime(phiPP, t0, tMax, phi0, Args)});
-        fallTimePhi0.push_back({phi0, angles[angles.size() - 1][0]});+
     }     }
     std::string outputStringPhi0 = "phi0\tt_fall\n";     std::string outputStringPhi0 = "phi0\tt_fall\n";
Line 106: Line 115:
         outputStringPhi0 += std::to_string(fallTimePhi0[i][1]) + "\n";         outputStringPhi0 += std::to_string(fallTimePhi0[i][1]) + "\n";
     }     }
-    writeTextToCsv(outputStringPhi0, "Fallzeit_in_Abhängigkeit_des_Startwinkels");+    writeTextToCsv(outputStringPhi0, "Fallzeit_in_Abhaengigkeit_des_Startwinkels");
  
     std::vector<std::vector<double>> fallTimeDeltaT;     std::vector<std::vector<double>> fallTimeDeltaT;
     for (Args.dt = 1; Args.dt > 1e-6; Args.dt *= 0.5) {     for (Args.dt = 1; Args.dt > 1e-6; Args.dt *= 0.5) {
-        std::vector<std::vector<double>> angles = differentialSolve(phiPP, 0, tMax, 0.25, Args)+        fallTimeDeltaT.push_back({Args.dt, fallTime(phiPP, t0, tMax, 0.25, Args)});
-        fallTimeDeltaT.push_back({Args.dt, angles[angles.size() - 1][0]});+
     }     }
     std::string outputStringDeltaT = "delta_t\tt_fall\n";     std::string outputStringDeltaT = "delta_t\tt_fall\n";
Line 118: Line 126:
         outputStringDeltaT += std::to_string(fallTimeDeltaT[i][1]) + "\n";         outputStringDeltaT += std::to_string(fallTimeDeltaT[i][1]) + "\n";
     }     }
-    writeTextToCsv(outputStringDeltaT, "Fallzeit_in_Abhängigkeit_der_Länge_der_Zeitschritte");+    writeTextToCsv(outputStringDeltaT, "Fallzeit_in_Abhaengigkeit_der_Laenge_der_Zeitschritte");
  
     //now the part for the comparison of the numerical solution and the measured data     //now the part for the comparison of the numerical solution and the measured data
  
-    args ArgsB1(1);             //the length of the broom +    args ArgsB1(1.81);                                                                                               //the length of the broom 
-    float phi01[] = {M_PI / 4}; //the initial angles+    double phi01[] = {degree_to_rad(5), degree_to_rad(10), degree_to_rad(20), degree_to_rad(35), degree_to_rad(45)}; //the initial angles
     std::vector<std::vector<double>> fallTimePhi01;     std::vector<std::vector<double>> fallTimePhi01;
     for (int i = 0; i < sizeof(phi01) / sizeof(phi01[0]); i++) {     for (int i = 0; i < sizeof(phi01) / sizeof(phi01[0]); i++) {
-        std::vector<std::vector<double>> angles = differentialSolve(phiPP, 0, tMax, phi01[i], ArgsB1)+        fallTimePhi01.push_back({phi01[i], fallTime(phiPP, t0, tMax, phi01[i], ArgsB1)});
-        fallTimePhi01.push_back({phi01[i], angles[angles.size() - 1][0]});+
     }     }
     std::string outputStringPhi01 = "phi0\tt_fall\n";     std::string outputStringPhi01 = "phi0\tt_fall\n";
Line 134: Line 141:
         outputStringPhi01 += std::to_string(fallTimePhi01[i][1]) + "\n";         outputStringPhi01 += std::to_string(fallTimePhi01[i][1]) + "\n";
     }     }
-    writeTextToCsv(outputStringPhi01, "Fallzeit_in_Abhängigkeit_des_Startwinkels_zu_Besen1");+    writeTextToCsv(outputStringPhi01, "Fallzeit_in_Abhaengigkeit_des_Startwinkels_zu_Besen1_81");
  
-    args ArgsB2(1.358);                                                                                                                                    //the length of the broom +    args ArgsB2(1.358);                                                                                                                                     //the length of the broom 
-    float phi02[] = {degree_to_rad(10), degree_to_rad(20), degree_to_rad(25), degree_to_rad(35), degree_to_rad(45), degree_to_rad(55), degree_to_rad(65)}; //the initial angles+    double phi02[] = {degree_to_rad(10), degree_to_rad(20), degree_to_rad(25), degree_to_rad(35), degree_to_rad(45), degree_to_rad(55), degree_to_rad(65)}; //the initial angles
     std::vector<std::vector<double>> fallTimePhi02;     std::vector<std::vector<double>> fallTimePhi02;
     for (int i = 0; i < sizeof(phi02) / sizeof(phi02[0]); i++) {     for (int i = 0; i < sizeof(phi02) / sizeof(phi02[0]); i++) {
-        std::vector<std::vector<double>> angles = differentialSolve(phiPP, 0, tMax, phi02[i], ArgsB2)+        fallTimePhi02.push_back({phi02[i], fallTime(phiPP, t0, tMax, phi02[i], ArgsB2)});
-        fallTimePhi02.push_back({phi02[i], angles[angles.size() - 1][0]});+
     }     }
     std::string outputStringPhi02 = "phi0\tt_fall\n";     std::string outputStringPhi02 = "phi0\tt_fall\n";
Line 148: Line 154:
         outputStringPhi02 += std::to_string(fallTimePhi02[i][1]) + "\n";         outputStringPhi02 += std::to_string(fallTimePhi02[i][1]) + "\n";
     }     }
-    writeTextToCsv(outputStringPhi02, "Fallzeit_in_Abhängigkeit_des_Startwinkels_zu_Besen1_358");+    writeTextToCsv(outputStringPhi02, "Fallzeit_in_Abhaengigkeit_des_Startwinkels_zu_Besen1_358");
  
     return 0;     return 0;
Line 157: Line 163:
 Ihr Versuchsaufbau sollte so beschrieben sein, dass er für sich stehend verständlich ist - gerne mit einem Foto. Ihr Versuchsaufbau sollte so beschrieben sein, dass er für sich stehend verständlich ist - gerne mit einem Foto.
  
-Ein Bild laden Sie ins Wiki, indem Sie im Editor in der Knopfleiste auf den kleinen Bildrahmen klickenIn einem neuen Fenster öffnet sich ein Dialog mit einem Dateibaum. Dort navigieren Sie zu "Ihrer" Baustelle (a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327). Anschließend nutzen Sie den Dialog auf der rechten Seite, um Ihr Bild hochzuladenMit einem Klick auf die Zeile ihres Bildes erzeugen Sie im Hauptfenster einen Befehl, der das Bild lädt+Der Anfangswinkel des Besens wurde mit der Neigungsfunktion der App Phyphox bestimmt. Dafür wird das Handy an den Besentil gehaltenDie App gibt dann den Neigungswinkel ausgehend vom Lot aus. 
 +Die Fallzeit wurde mit der akustischen Stoppuhr der App Phyphox gemessenDer Startton wurde dabei stimmlich im Moment des Loslassens selbst erzeugt.
  
-Im einfachsten Fall landet ein Bild direkt an der Stelle im Text, an der Sie es eingefügt haben (Siehe [[doku>de:wiki:syntax#bilder_und_andere_dateien]]. [[wiki:advanced_user_hints#images_and_movies|Hier]] gibt es einen Überblick, was sonst noch möglich ist.+{{:a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:20210105_161437.jpg?200|}} Dies ist der Besen mit der Länge von 1,358 m.  
 +{{:a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:screenshot_20210105-163407_phyphox.jpg?200|}}{{:a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:screenshot_20210104-145059_phyphox.jpg?200|}} Phyphox
  
 +{{:a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:img_20210107_154700.jpg?200|}}Der 181cm Besen. Es wurde wieder Phyphox verwendet.
 +Die Terasse auf der 181cm Besen fallen gelassen wurde hat Rillen. Diese können es vermindern, dass der Besen wegrutscht, da der Besen orthogonal zu diesen Fallen gelassen wurde. An dem Besen war der Borstenkopf nicht entfernbar.
 +
 +Bei der Messung mit dem Luftwiderstand wurde an die Spitze des Besenstiels ein Stück Pappe im DIN A4-Format befestigt. So kann man die Angriffsfläche des Besens erhöhen, wodurch die Luftreibung eine größere Rolle spielt und somit Einfluss auf die Fallzeit nimmt. Die Versuchsdurchführung war sonst gleich der Messreihe ohne zusätzlicher Pappe.
 +{{:a_mechanik:kippender_besenstiel:gruppenseiten:gruppe327:20210107_130953.jpg?200|}}
 ===== Tabellen ===== ===== Tabellen =====
-Für eine Tabelle mit Ihren Messwerten gibt es im oben im Editfenster des Wikis eine HilfsfunktionSie versteckt sich hinter einem Knopf der so aussieht, wie ein hellblauer Taschenrechner.+Hier sind unsere Messwerte der Messungen. 
 +==== Tabllen zur Fallzeit in Abhängigkeit des Startwinkels φ0 ==== 
 +^ Fallzeit t in Abhängigkeit des Startwinkels φ  ^ t1 in s  ^ t2 in s  ^ t3 in s  ^ t4 in s  ^ t5 in s  ^ 
 +^ Startwinkel: 10°                               | 0,742    | 0,749    | 0,816    | 0,886    | 0,820    | 
 +^ Startwinkel: 20°                               | 0,686    | 0,717    | 0,716    | 0,633    | 0,747    | 
 +^ Startwinkel: 25°                               | 0,550    | 0,601    | 0,504    | 0,644    | 0,644    | 
 +^ Startwinkel: 35°                               | 0,490    | 0,574    | 0,510    | 0,513    | 0,581    | 
 +^ Startwinkel: 45°                               | 0,365    | 0,454    | 0,407    | 0,342    | 0,414    | 
 +^ Startwinkel: 55°                               | 0,317    | 0,359    | 0,293    | 0,313    | 0,356    | 
 +^ Startwinkel: 65°                               | 0,225    | 0,267    | 0,303    | 0,284    | 0,281    | 
 + 
 +Die verwendete Besenstiel länge war l = 1,358 m mit eine Unsicherheit von u(l) = 1 mm. Für die Unsicherheit des Winkels schätze ich u(φ) = 1° ab. Der Winkel wurde mit der Funktion Neigung (Senkrecht) der App PhyPhox bestimmt. Für die Messung der Fallzeit wurde die akustische Stoppuhr von PhyPhox verwendet. Die Abschätzung der Unsicherheiten für die Zeit folgen im Bericht.  
 + 
 +^ Fallzeit t in Abhängigkeit des Startwinkels φ  ^ t1 in s  ^ t2 in s  ^ t3 in s  ^ t4 in s  ^ t5 in s  ^ 
 +^ Startwinkel: 5°                               | 1,095    | 1,016    | 0,997    | 0,97    | 0,954    | 
 +^ Startwinkel: 10°                               | 0,918    | 0,910    | 0,892    | 0,92    | 0,943    | 
 +^ Startwinkel: 20°                               | 0,713    | 0,73    | 0,732    | 0,609    | 0,737    | 
 +^ Startwinkel: 35°                               | 0,628    | 0,513    | 0,531    | 0,53    | 0,528    | 
 +^ Startwinkel: 45°                               | 0,45    | 0,499    | 0,469    | 0,471    | 0,481    | 
 + 
 +Die verwendete Besenstiel länge war l = 181 cm mit einer Unsicherheit von u(l) = 1/2 cmFür die Unsicherheit des Winkels schätze ich u(φ) = 2° ab. Der Winkel wurde mit der Funktion Neigung (Senkrecht) der App PhyPhox bestimmtFür die Messung der Fallzeit wurde die akustische Stoppuhr von PhyPhox verwendet. Die Abschätzung der Unsicherheiten für die Zeit folgen im Bericht.  
 + 
 +^ Fallzeit t in Abhängigkeit des Startwinkels φ  ^ t1 in s  ^ t2 in s  ^ t3 in s  ^ t4 in s  ^ t5 in s  ^ 
 +^ Startwinkel: 10°                               | 0,802    | 0,787    | 0,759    | 0,885    | 0,831    | 
 +^ Startwinkel: 20°                               | 0,718    | 0,774    | 0,687    | 0,699    | 0,717    | 
 +^ Startwinkel: 25°                               | 0,673    | 0,663    | 0,696    | 0,698    | 0,669    | 
 +^ Startwinkel: 35°                               | 0,577    | 0,472    | 0,530    | 0,497    | 0,528    | 
 +^ Startwinkel: 45°                               | 0,429    | 0,439    | 0,454    | 0,436    | 0,393    |
  
 +Werte bei der Untersuchen des Einflusses der Luftreibung. Es wurde der Besen mit der Länge l = 1,358 m mit u(l) = 0,001 m verwendet. Oben an die Spitze wurde ein Stück Pappe (Größe DIN A4-Format) befestigt. Hier sind die entsprechenden Mittelwerte, empirische Standardabweichung und der Standardfehler.
 +^ Startwinkel φ0 in °  ^ Mittelwert  ^ Standardabweichung  ^ Standardfehler  ^
 +| 10                   | 0,807       | 0,037               | 0,017           |
 +| 20                   | 0,719       | 0,033               | 0,015           |
 +| 25                   | 0,680       | 0,016               | 0,007           |
 +| 35                   | 0,521       | 0,040               | 0,018           |
 +| 45                   | 0,430       | 0,023               | 0,010           |
 ===== Syntax und Funktionen im Wiki =====  ===== Syntax und Funktionen im Wiki ===== 
 Hier noch Links zu Hier noch Links zu