# Runge Kutta Pendulum

1. Jan 23, 2008

### brokenlynx

Im using a C++ class to try and model the motion of a simple pendulum using numerical analysis, at this stage of my implementation I am trying to produce oscillatory output values of theta and v denoting the displacement and velocity of the pendulum of a period of time. I have successfully managed to do so with values of v equal to 0 but am unable to gett the model working with an initial velocity causing increasing output.

Code (Text):

#include <iomanip>
#include <math.h>
#include <fstream>
#include <tchar.h>
#include <iostream>

using namespace std;

class SinglePendulum {

double theta0, L, T, m, g, n, y[2];
double tau, I, alpha, theta;
double delta_t_roof, delta_t;

/*==================================================================*/
/*  Variable list
/*  theta0 - initial theta value for pendulum
/*  L - length of pendulum rope
/*  m - mass of pendulum bob (needed?, kept for extra function)
/*  g - gravitational constant (currently 9.8)
/*  delta_t(+ _roof) - time step size (may need amending)
/*  n - number of steps
/*  y[2] - input variables y[0] = v, y[1] = theta0
/*==================================================================*/

/*==================================================================*/
/*  Miscellaneous variables
/*  tau, I, alpha (check for additional function)
/*==================================================================*/

public:

void SinglePendulum::initialise() {
theta0 = 1.4;
L = 9;
g = 9.8;
delta_t_roof = 0.016;
delta_t = 0.016;
n = 600;
m = 5;
y[0] = 2;           // Initial velocity
y[1] = theta0;      // Initial Angle

//T = 0;
//delta_t_roof = sqrt(g/L)* delta_t;
//initial angle

cout<< "Pendulum Variables initialised \n";

}

void SinglePendulum::derivatives(double t, double* in, double* out) {
out[0] = in[1];                 //theta' = omega (1)
out[1] = -g/L * sin(in[0]);     //omega' = -g/L * sin(theta) (2)
}

void SinglePendulum::rk2(){

int i;
double t_h;
double yout[2], y_h[2], k1[2], k2[2], y_k[2];

t_h=0;
y_h[0]=y[0];            //theta'
y_h[1]=y[1];            //omega'
std::ofstream fout("rk2.out", std::ios::out);
//ofstream fout("rk2.out");
fout.setf(ios::fixed);
fout.precision(4);
cout<<"";
cout<< "Time\t\t y_h0\t\t y_h1\n";
for(i=1; i<=n; i++){
/*Calculation of k1 */
derivatives(t_h, y_h, yout);
k1[1]=yout[1]*delta_t_roof;
k1[0]=yout[0]*delta_t_roof;
y_k[0]=y_h[0]+k1[0]*0.5;
y_k[1]=y_h[1]+k1[1]*0.5;

derivatives(t_h+delta_t_roof*0.5, y_k, yout);
k2[1]=yout[1]*delta_t_roof;
k2[0]=yout[0]*delta_t_roof;
yout[1]=y_h[1]+k2[1];
yout[0]=y_h[0]+k2[0];
fout<<t_h<<"\t\t"<<i*delta_t<<"\t\t"<<yout[0]<<"\t\t"<<yout[1]<<"\n";
t_h+=delta_t_roof;
y_h[0]=yout[0];
y_h[1]=yout[1];
cout<< t_h << "\t\t"<< y_h[0]<< "\t\t"<< y_h[1]<< "\t\t\n";
}
fout.close();
}
};

int _tmain(int argc, _TCHAR* argv[]) {
SinglePendulum pendulum;
pendulum.initialise();
pendulum.rk2();
system("pause");
return 0;
}

And heres the ouput (the first 2 columns denoting the time steps the last 2 are velocity and theta respectively.

Code (Text):

0.0000      0.0160      2.0223      1.3842
0.0160      0.0320      2.0443      1.3686
0.0320      0.0480      2.0661      1.3532
0.0480      0.0640      2.0876      1.3380
0.0640      0.0800      2.1089      1.3229
0.0800      0.0960      2.1299      1.3081
0.0960      0.1120      2.1507      1.2934
0.1120      0.1280      2.1713      1.2789
0.1280      0.1440      2.1917      1.2647
0.1440      0.1600      2.2118      1.2506
0.1600      0.1760      2.2317      1.2367
0.1760      0.1920      2.2514      1.2231
0.1920      0.2080      2.2708      1.2096
0.2080      0.2240      2.2901      1.1964
0.2240      0.2400      2.3091      1.1834
0.2400      0.2560      2.3279      1.1707
0.2560      0.2720      2.3466      1.1581
0.2720      0.2880      2.3650      1.1458
0.2880      0.3040      2.3832      1.1337
0.3040      0.3200      2.4013      1.1218
0.3200      0.3360      2.4191      1.1102
0.3360      0.3520      2.4368      1.0988
0.3520      0.3680      2.4543      1.0876
0.3680      0.3840      2.4716      1.0767
0.3840      0.4000      2.4888      1.0660
0.4000      0.4160      2.5057      1.0555
0.4160      0.4320      2.5225      1.0453
0.4320      0.4480      2.5392      1.0353
0.4480      0.4640      2.5557      1.0255
0.4640      0.4800      2.5720      1.0160
0.4800      0.4960      2.5882      1.0068
0.4960      0.5120      2.6042      0.9977
0.5120      0.5280      2.6201      0.9889
0.5280      0.5440      2.6359      0.9804
0.5440      0.5600      2.6515      0.9720
0.5600      0.5760      2.6670      0.9640
0.5760      0.5920      2.6823      0.9561
0.5920      0.6080      2.6976      0.9485
0.6080      0.6240      2.7127      0.9411
0.6240      0.6400      2.7277      0.9340
0.6400      0.6560      2.7426      0.9271
0.6560      0.6720      2.7573      0.9205
0.6720      0.6880      2.7720      0.9141
0.6880      0.7040      2.7866      0.9079
0.7040      0.7200      2.8011      0.9020
0.7200      0.7360      2.8155      0.8963
0.7360      0.7520      2.8297      0.8908
0.7520      0.7680      2.8440      0.8856
0.7680      0.7840      2.8581      0.8806
0.7840      0.8000      2.8721      0.8758
0.8000      0.8160      2.8861      0.8713
0.8160      0.8320      2.9000      0.8670
0.8320      0.8480      2.9139      0.8630
0.8480      0.8640      2.9276      0.8592
0.8640      0.8800      2.9413      0.8556
0.8800      0.8960      2.9550      0.8522
0.8960      0.9120      2.9686      0.8491
0.9120      0.9280      2.9822      0.8462
0.9280      0.9440      2.9957      0.8436
0.9440      0.9600      3.0092      0.8412
0.9600      0.9760      3.0226      0.8390
0.9760      0.9920      3.0360      0.8370
0.9920      1.0080      3.0494      0.8353
1.0080      1.0240      3.0628      0.8338
1.0240      1.0400      3.0761      0.8326
1.0400      1.0560      3.0894      0.8315
1.0560      1.0720      3.1027      0.8307
1.0720      1.0880      3.1160      0.8302
1.0880      1.1040      3.1293      0.8298
1.1040      1.1200      3.1425      0.8297
1.1200      1.1360      3.1558      0.8299
1.1360      1.1520      3.1691      0.8302
1.1520      1.1680      3.1824      0.8308
1.1680      1.1840      3.1957      0.8317
1.1840      1.2000      3.2090      0.8327
1.2000      1.2160      3.2223      0.8340
1.2160      1.2320      3.2357      0.8355
1.2320      1.2480      3.2491      0.8373
1.2480      1.2640      3.2625      0.8393
1.2640      1.2800      3.2759      0.8415
1.2800      1.2960      3.2894      0.8439
1.2960      1.3120      3.3029      0.8466
1.3120      1.3280      3.3165      0.8495
1.3280      1.3440      3.3301      0.8527
1.3440      1.3600      3.3438      0.8561
1.3600      1.3760      3.3575      0.8597
1.3760      1.3920      3.3713      0.8635
1.3920      1.4080      3.3851      0.8676
1.4080      1.4240      3.3991      0.8719
1.4240      1.4400      3.4130      0.8765
1.4400      1.4560      3.4271      0.8813
1.4560      1.4720      3.4412      0.8863
1.4720      1.4880      3.4555      0.8916
1.4880      1.5040      3.4698      0.8971
1.5040      1.5200      3.4842      0.9028
1.5200      1.5360      3.4987      0.9088
1.5360      1.5520      3.5132      0.9150
1.5520      1.5680      3.5279      0.9214
1.5680      1.5840      3.5427      0.9281
1.5840      1.6000      3.5576      0.9350
1.6000      1.6160      3.5727      0.9422
1.6160      1.6320      3.5878      0.9496
1.6320      1.6480      3.6030      0.9572
1.6480      1.6640      3.6184      0.9651
1.6640      1.6800      3.6339      0.9732
1.6800      1.6960      3.6496      0.9816
1.6960      1.7120      3.6653      0.9902
1.7120      1.7280      3.6812      0.9990
1.7280      1.7440      3.6973      1.0081
1.7440      1.7600      3.7135      1.0174
1.7600      1.7760      3.7299      1.0269
1.7760      1.7920      3.7464      1.0367
1.7920      1.8080      3.7630      1.0467
1.8080      1.8240      3.7799      1.0570
1.8240      1.8400      3.7969      1.0675
1.8400      1.8560      3.8140      1.0782
1.8560      1.8720      3.8314      1.0892
1.8720      1.8880      3.8489      1.1004
1.8880      1.9040      3.8666      1.1118
1.9040      1.9200      3.8844      1.1235
1.9200      1.9360      3.9025      1.1354
1.9360      1.9520      3.9208      1.1475
1.9520      1.9680      3.9392      1.1599
1.9680      1.9840      3.9579      1.1725
1.9840      2.0000      3.9768      1.1853
2.0000      2.0160      3.9958      1.1983
2.0160      2.0320      4.0151      1.2115
2.0320      2.0480      4.0346      1.2250
2.0480      2.0640      4.0543      1.2387
2.0640      2.0800      4.0742      1.2526
2.0800      2.0960      4.0944      1.2667
2.0960      2.1120      4.1148      1.2810
2.1120      2.1280      4.1354      1.2955
2.1280      2.1440      4.1562      1.3102
2.1440      2.1600      4.1773      1.3251
2.1600      2.1760      4.1986      1.3401
2.1760      2.1920      4.2202      1.3554
2.1920      2.2080      4.2420      1.3708
2.2080      2.2240      4.2641      1.3865
2.2240      2.2400      4.2864      1.4022
2.2400      2.2560      4.3089      1.4182
2.2560      2.2720      4.3317      1.4343
2.2720      2.2880      4.3548      1.4505
2.2880      2.3040      4.3782      1.4669
2.3040      2.3200      4.4018      1.4835
2.3200      2.3360      4.4256      1.5001
2.3360      2.3520      4.4498      1.5169
2.3520      2.3680      4.4742      1.5338
2.3680      2.3840      4.4988      1.5507
2.3840      2.4000      4.5238      1.5678
2.4000      2.4160      4.5490      1.5850
2.4160      2.4320      4.5745      1.6022
2.4320      2.4480      4.6003      1.6195
2.4480      2.4640      4.6263      1.6368
2.4640      2.4800      4.6527      1.6542
2.4800      2.4960      4.6793      1.6716
2.4960      2.5120      4.7062      1.6890
2.5120      2.5280      4.7333      1.7064
2.5280      2.5440      4.7608      1.7238
2.5440      2.5600      4.7885      1.7412
2.5600      2.5760      4.8165      1.7586
2.5760      2.5920      4.8448      1.7759
2.5920      2.6080      4.8733      1.7931
2.6080      2.6240      4.9021      1.8103
2.6240      2.6400      4.9312      1.8273
2.6400      2.6560      4.9606      1.8443
2.6560      2.6720      4.9903      1.8611
2.6720      2.6880      5.0202      1.8778
2.6880      2.7040      5.0503      1.8943
2.7040      2.7200      5.0808      1.9107
2.7200      2.7360      5.1115      1.9268
2.7360      2.7520      5.1424      1.9428
2.7520      2.7680      5.1737      1.9585
2.7680      2.7840      5.2051      1.9740
2.7840      2.8000      5.2368      1.9892
2.8000      2.8160      5.2688      2.0041
2.8160      2.8320      5.3010      2.0188
2.8320      2.8480      5.3334      2.0331
2.8480      2.8640      5.3660      2.0471
2.8640      2.8800      5.3989      2.0607
2.8800      2.8960      5.4320      2.0740
2.8960      2.9120      5.4652      2.0869
2.9120      2.9280      5.4987      2.0995
2.9280      2.9440      5.5324      2.1116
2.9440      2.9600      5.5663      2.1232
2.9600      2.9760      5.6004      2.1345
2.9760      2.9920      5.6346      2.1452
2.9920      3.0080      5.6690      2.1555
3.0080      3.0240      5.7036      2.1653
3.0240      3.0400      5.7383      2.1746
3.0400      3.0560      5.7732      2.1833
3.0560      3.0720      5.8082      2.1916
3.0720      3.0880      5.8433      2.1993
3.0880      3.1040      5.8785      2.2064
3.1040      3.1200      5.9139      2.2130
3.1200      3.1360      5.9494      2.2190
3.1360      3.1520      5.9849      2.2244
3.1520      3.1680      6.0205      2.2292
3.1680      3.1840      6.0562      2.2335
3.1840      3.2000      6.0920      2.2371
3.2000      3.2160      6.1278      2.2401
3.2160      3.2320      6.1637      2.2425
3.2320      3.2480      6.1996      2.2442
3.2480      3.2640      6.2355      2.2454
3.2640      3.2800      6.2714      2.2459
3.2800      3.2960      6.3074      2.2458
3.2960      3.3120      6.3433      2.2450
3.3120      3.3280      6.3792      2.2437
3.3280      3.3440      6.4151      2.2417
3.3440      3.3600      6.4510      2.2391
3.3600      3.3760      6.4868      2.2359
3.3760      3.3920      6.5225      2.2321
3.3920      3.4080      6.5582      2.2276
3.4080      3.4240      6.5938      2.2226
3.4240      3.4400      6.6293      2.2170
3.4400      3.4560      6.6647      2.2108
3.4560      3.4720      6.7001      2.2040
3.4720      3.4880      6.7353      2.1967
3.4880      3.5040      6.7703      2.1888
3.5040      3.5200      6.8053      2.1804
3.5200      3.5360      6.8401      2.1714
3.5360      3.5520      6.8748      2.1620
3.5520      3.5680      6.9093      2.1520
3.5680      3.5840      6.9437      2.1415
3.5840      3.6000      6.9778      2.1306
3.6000      3.6160      7.0118      2.1192
3.6160      3.6320      7.0456      2.1074
3.6320      3.6480      7.0793      2.0952
3.6480      3.6640      7.1127      2.0825
3.6640      3.6800      7.1459      2.0695
3.6800      3.6960      7.1789      2.0561
3.6960      3.7120      7.2117      2.0423
3.7120      3.7280      7.2443      2.0282
3.7280      3.7440      7.2766      2.0137
3.7440      3.7600      7.3087      1.9990
3.7600      3.7760      7.3406      1.9839
3.7760      3.7920      7.3722      1.9686
3.7920      3.8080      7.4036      1.9531
3.8080      3.8240      7.4347      1.9373
3.8240      3.8400      7.4656      1.9212
3.8400      3.8560      7.4962      1.9050
3.8560      3.8720      7.5265      1.8886
3.8720      3.8880      7.5566      1.8720
3.8880      3.9040      7.5864      1.8553
3.9040      3.9200      7.6160      1.8384
3.9200      3.9360      7.6453      1.8214
3.9360      3.9520      7.6743      1.8043
3.9520      3.9680      7.7030      1.7871
3.9680      3.9840      7.7314      1.7699
3.9840      4.0000      7.7596      1.7526
4.0000      4.0160      7.7875      1.7352
4.0160      4.0320      7.8152      1.7178
4.0320      4.0480      7.8425      1.7004
4.0480      4.0640      7.8696      1.6830
4.0640      4.0800      7.8964      1.6655
4.0800      4.0960      7.9229      1.6482
4.0960      4.1120      7.9491      1.6308
4.1120      4.1280      7.9751      1.6135
4.1280      4.1440      8.0007      1.5962
4.1440      4.1600      8.0261      1.5790
4.1600      4.1760      8.0513      1.5619
4.1760      4.1920      8.0761      1.5448
4.1920      4.2080      8.1007      1.5279
4.2080      4.2240      8.1250      1.5110
4.2240      4.2400      8.1490      1.4943
4.2400      4.2560      8.1728      1.4777
4.2560      4.2720      8.1963      1.4612
4.2720      4.2880      8.2196      1.4449
4.2880      4.3040      8.2426      1.4287
4.3040      4.3200      8.2653      1.4126
4.3200      4.3360      8.2878      1.3968
4.3360      4.3520      8.3100      1.3810
4.3520      4.3680      8.3320      1.3655
4.3680      4.3840      8.3537      1.3501
4.3840      4.4000      8.3752      1.3349
4.4000      4.4160      8.3964      1.3199
4.4160      4.4320      8.4174      1.3051
4.4320      4.4480      8.4382      1.2904
4.4480      4.4640      8.4587      1.2760
4.4640      4.4800      8.4790      1.2618
4.4800      4.4960      8.4991      1.2477
4.4960      4.5120      8.5189      1.2339
4.5120      4.5280      8.5386      1.2203
4.5280      4.5440      8.5580      1.2069
4.5440      4.5600      8.5772      1.1938
4.5600      4.5760      8.5962      1.1808
4.5760      4.5920      8.6150      1.1681
4.5920      4.6080      8.6336      1.1556
4.6080      4.6240      8.6519      1.1433
4.6240      4.6400      8.6701      1.1312
4.6400      4.6560      8.6881      1.1194
4.6560      4.6720      8.7060      1.1078
4.6720      4.6880      8.7236      1.0965
4.6880      4.7040      8.7411      1.0854
4.7040      4.7200      8.7583      1.0745
4.7200      4.7360      8.7754      1.0638
4.7360      4.7520      8.7924      1.0534
4.7520      4.7680      8.8091      1.0432
4.7680      4.7840      8.8258      1.0333
4.7840      4.8000      8.8422      1.0236
4.8000      4.8160      8.8585      1.0141
4.8160      4.8320      8.8747      1.0049
4.8320      4.8480      8.8907      0.9959
4.8480      4.8640      8.9065      0.9871
4.8640      4.8800      8.9223      0.9786
4.8800      4.8960      8.9378      0.9704
4.8960      4.9120      8.9533      0.9623
4.9120      4.9280      8.9686      0.9545
4.9280      4.9440      8.9838      0.9470
4.9440      4.9600      8.9989      0.9397
4.9600      4.9760      9.0139      0.9326
4.9760      4.9920      9.0288      0.9258
4.9920      5.0080      9.0435      0.9192
5.0080      5.0240      9.0582      0.9128
5.0240      5.0400      9.0728      0.9067
5.0400      5.0560      9.0872      0.9008
5.0560      5.0720      9.1016      0.8951
5.0720      5.0880      9.1159      0.8897
5.0880      5.1040      9.1300      0.8845
5.1040      5.1200      9.1442      0.8796
5.1200      5.1360      9.1582      0.8749
5.1360      5.1520      9.1722      0.8704
5.1520      5.1680      9.1860      0.8662
5.1680      5.1840      9.1999      0.8622
5.1840      5.2000      9.2136      0.8584
5.2000      5.2160      9.2273      0.8549
5.2160      5.2320      9.2410      0.8516
5.2320      5.2480      9.2546      0.8485
5.2480      5.2640      9.2681      0.8457
5.2640      5.2800      9.2817      0.8431
5.2800      5.2960      9.2951      0.8407
5.2960      5.3120      9.3086      0.8386
5.3120      5.3280      9.3220      0.8367
5.3280      5.3440      9.3353      0.8350
5.3440      5.3600      9.3487      0.8335
5.3600      5.3760      9.3620      0.8323
5.3760      5.3920      9.3753      0.8314
5.3920      5.4080      9.3886      0.8306
5.4080      5.4240      9.4019      0.8301
5.4240      5.4400      9.4152      0.8298
5.4400      5.4560      9.4284      0.8298
5.4560      5.4720      9.4417      0.8299
5.4720      5.4880      9.4550      0.8304
5.4880      5.5040      9.4683      0.8310
5.5040      5.5200      9.4816      0.8319
5.5200      5.5360      9.4949      0.8330
5.5360      5.5520      9.5082      0.8343
5.5520      5.5680      9.5216      0.8359
5.5680      5.5840      9.5350      0.8377
5.5840      5.6000      9.5484      0.8397
5.6000      5.6160      9.5619      0.8420
5.6160      5.6320      9.5754      0.8445
5.6320      5.6480      9.5889      0.8472
5.6480      5.6640      9.6025      0.8502
5.6640      5.6800      9.6161      0.8534
5.6800      5.6960      9.6298      0.8568
5.6960      5.7120      9.6435      0.8605
5.7120      5.7280      9.6573      0.8644
5.7280      5.7440      9.6712      0.8685
5.7440      5.7600      9.6851      0.8729
5.7600      5.7760      9.6991      0.8775
5.7760      5.7920      9.7132      0.8823
5.7920      5.8080      9.7273      0.8874
5.8080      5.8240      9.7416      0.8927
5.8240      5.8400      9.7559      0.8982
5.8400      5.8560      9.7703      0.9040
5.8560      5.8720      9.7848      0.9100
5.8720      5.8880      9.7994      0.9163
5.8880      5.9040      9.8142      0.9228
5.9040      5.9200      9.8290      0.9295
5.9200      5.9360      9.8439      0.9365
5.9360      5.9520      9.8589      0.9437
5.9520      5.9680      9.8741      0.9511
5.9680      5.9840      9.8894      0.9588
5.9840      6.0000      9.9048      0.9667
6.0000      6.0160      9.9203      0.9749
6.0160      6.0320      9.9360      0.9833
6.0320      6.0480      9.9518      0.9920
6.0480      6.0640      9.9677      1.0008
6.0640      6.0800      9.9838      1.0100
6.0800      6.0960      10.0000     1.0193
6.0960      6.1120      10.0164     1.0289
6.1120      6.1280      10.0330     1.0387
6.1280      6.1440      10.0497     1.0488
6.1440      6.1600      10.0665     1.0591
6.1600      6.1760      10.0836     1.0697
6.1760      6.1920      10.1008     1.0805
6.1920      6.2080      10.1181     1.0915
6.2080      6.2240      10.1357     1.1027
6.2240      6.2400      10.1534     1.1142
6.2400      6.2560      10.1713     1.1259
6.2560      6.2720      10.1894     1.1379
6.2720      6.2880      10.2077     1.1501
6.2880      6.3040      10.2262     1.1625
6.3040      6.3200      10.2449     1.1751
6.3200      6.3360      10.2638     1.1879
6.3360      6.3520      10.2830     1.2010
6.3520      6.3680      10.3023     1.2143
6.3680      6.3840      10.3218     1.2278
6.3840      6.4000      10.3416     1.2415
6.4000      6.4160      10.3615     1.2555
6.4160      6.4320      10.3817     1.2696
6.4320      6.4480      10.4022     1.2839
6.4480      6.4640      10.4228     1.2985
6.4640      6.4800      10.4437     1.3132
6.4800      6.4960      10.4649     1.3282
6.4960      6.5120      10.4862     1.3433
6.5120      6.5280      10.5078     1.3586
6.5280      6.5440      10.5297     1.3741
6.5440      6.5600      10.5518     1.3897
6.5600      6.5760      10.5742     1.4055
6.5760      6.5920      10.5968     1.4215
6.5920      6.6080      10.6197     1.4376
6.6080      6.6240      10.6428     1.4539
6.6240      6.6400      10.6662     1.4703
6.6400      6.6560      10.6898     1.4869
6.6560      6.6720      10.7138     1.5035
6.6720      6.6880      10.7380     1.5203
6.6880      6.7040      10.7624     1.5372
6.7040      6.7200      10.7871     1.5542
6.7200      6.7360      10.8121     1.5713
6.7360      6.7520      10.8374     1.5885
6.7520      6.7680      10.8630     1.6057
6.7680      6.7840      10.8888     1.6230
6.7840      6.8000      10.9149     1.6404
6.8000      6.8160      10.9413     1.6578
6.8160      6.8320      10.9680     1.6752
6.8320      6.8480      10.9949     1.6926
6.8480      6.8640      11.0221     1.7100
6.8640      6.8800      11.0496     1.7274
6.8800      6.8960      11.0774     1.7448
6.8960      6.9120      11.1055     1.7621
6.9120      6.9280      11.1338     1.7794
6.9280      6.9440      11.1624     1.7967
6.9440      6.9600      11.1913     1.8138
6.9600      6.9760      11.2204     1.8308
6.9760      6.9920      11.2499     1.8478
6.9920      7.0080      11.2796     1.8645
7.0080      7.0240      11.3095     1.8812
7.0240      7.0400      11.3398     1.8977
7.0400      7.0560      11.3703     1.9140
7.0560      7.0720      11.4010     1.9301
7.0720      7.0880      11.4320     1.9460
7.0880      7.1040      11.4633     1.9617
7.1040      7.1200      11.4948     1.9771
7.1200      7.1360      11.5266     1.9923
7.1360      7.1520      11.5586     2.0071
7.1520      7.1680      11.5908     2.0217
7.1680      7.1840      11.6232     2.0360
7.1840      7.2000      11.6559     2.0499
7.2000      7.2160      11.6888     2.0635
7.2160      7.2320      11.7220     2.0767
7.2320      7.2480      11.7553     2.0896
7.2480      7.2640      11.7888     2.1020
7.2640      7.2800      11.8226     2.1140
7.2800      7.2960      11.8565     2.1256
7.2960      7.3120      11.8906     2.1367
7.3120      7.3280      11.9249     2.1474
7.3280      7.3440      11.9593     2.1576
7.3440      7.3600      11.9939     2.1672
7.3600      7.3760      12.0287     2.1764
7.3760      7.3920      12.0635     2.1851
7.3920      7.4080      12.0986     2.1932
7.4080      7.4240      12.1337     2.2008
7.4240      7.4400      12.1690     2.2078
7.4400      7.4560      12.2044     2.2143
7.4560      7.4720      12.2399     2.2202
7.4720      7.4880      12.2754     2.2255
7.4880      7.5040      12.3111     2.2302
7.5040      7.5200      12.3468     2.2343
7.5200      7.5360      12.3826     2.2377
7.5360      7.5520      12.4184     2.2406
7.5520      7.5680      12.4543     2.2429
7.5680      7.5840      12.4902     2.2445
7.5840      7.6000      12.5261     2.2455
7.6000      7.6160      12.5620     2.2459
7.6160      7.6320      12.5980     2.2457
7.6320      7.6480      12.6339     2.2448
7.6480      7.6640      12.6698     2.2433
7.6640      7.6800      12.7057     2.2412
7.6800      7.6960      12.7415     2.2385
7.6960      7.7120      12.7773     2.2352
7.7120      7.7280      12.8130     2.2312
7.7280      7.7440      12.8487     2.2266
7.7440      7.7600      12.8843     2.2215
7.7600      7.7760      12.9198     2.2158
7.7760      7.7920      12.9552     2.2094
7.7920      7.8080      12.9905     2.2025
7.8080      7.8240      13.0257     2.1951
7.8240      7.8400      13.0607     2.1871
7.8400      7.8560      13.0957     2.1786
7.8560      7.8720      13.1305     2.1695
7.8720      7.8880      13.1651     2.1599
7.8880      7.9040      13.1996     2.1499
7.9040      7.9200      13.2339     2.1393
7.9200      7.9360      13.2680     2.1283
7.9360      7.9520      13.3020     2.1168
7.9520      7.9680      13.3358     2.1049
7.9680      7.9840      13.3693     2.0926
7.9840      8.0000      13.4027     2.0799
8.0000      8.0160      13.4359     2.0667
8.0160      8.0320      13.4689     2.0532
8.0320      8.0480      13.5016     2.0394
8.0480      8.0640      13.5341     2.0252
8.0640      8.0800      13.5664     2.0107
8.0800      8.0960      13.5985     1.9959
8.0960      8.1120      13.6303     1.9808
8.1120      8.1280      13.6619     1.9654
8.1280      8.1440      13.6932     1.9498
8.1440      8.1600      13.7243     1.9340
8.1600      8.1760      13.7551     1.9179
8.1760      8.1920      13.7856     1.9016
8.1920      8.2080      13.8159     1.8852

Any help with this would be appreciated, and if any extra info is needed please ask.

2. Jan 23, 2008

### EnumaElish

You may think about posting a formulaic (functional) representation of your problem to help elicit responses, especially if you think that's where the problem is (rather than the code itself).

3. Jan 24, 2008

### brokenlynx

Initial Conditions for the pendulum:

theta0 = 1.4; // Just under 90 degrees apprx.
L = 3;
g = 9.8;
delta_t_roof = 0.016;
delta_t = 0.016;
n = 600;
m = 5;
y[0] = 0; // Initial velocity
y[1] = theta0; // Initial angular displacement (radians)

The derivatives method:
Code (Text):
void SinglePendulum::derivatives(double t, double* in, double* out) {
out[0] = in[1];                 //theta' = omega (1)
out[1] = -g/L * sin(in[0]);     //omega' = -g/L * sin(theta) (2)
}

The Runge-Kutta method implementation:
Code (Text):

void SinglePendulum::rk2(){
/*We are using the second-order-Runge-Kutta-algorithm
* We have to calculate the parameters k1 and k2 for omega and theta,
* so we use to arrays k1[2] and k2[2] for this
* k1[0], k2[0] are the parameters for theta,
* k1[1], k2[1] are the parameters for omega
*/

int i;
double t_h;
double yout[2], y_h[2], k1[2], k2[2], y_k[2];

t_h=0;
y_h[0]=y[0];            //theta'
y_h[1]=y[1];            //omega'
std::ofstream fout("rk2.out", std::ios::out);
//ofstream fout("rk2.out");     PREVENT ERROR: C2374 (multiple initialisation)
fout.setf(ios::fixed);
fout.precision(4);
cout<<"";
cout<< "Time\t\t y_h0\t\t y_h1\n";
for(i=1; i<=n; i++){
/*Calculation of k1 */
derivatives(t_h, y_h, yout);
k1[1]=yout[1]*delta_t_roof;
k1[0]=yout[0]*delta_t_roof;
y_k[0]=y_h[0]+k1[0]*0.5;
y_k[1]=y_h[1]+k1[1]*0.5;

/*Calculation of k2 */
derivatives(t_h+delta_t_roof*0.5, y_k, yout);
k2[1]=yout[1]*delta_t_roof;
k2[0]=yout[0]*delta_t_roof;
yout[1]=y_h[1]+k2[1];
yout[0]=y_h[0]+k2[0];
fout<<t_h<<"\t\t"<<i*delta_t<<"\t\t"<<yout[0]<<"\t\t"<<yout[1]<<"\n";
t_h+=delta_t_roof;
y_h[0]=yout[0];
y_h[1]=yout[1];
cout<< t_h << "\t\t"<< y_h[0]<< "\t\t"<< y_h[1]<< "\t\t\n";
}
fout.close();
}
};

...and the output:
Columns: t (time); t+1 (step+1); velocity; angular displacement
Code (Text):
0.0000      0.0160      0.0224      1.3994
0.0160      0.0320      0.0448      1.3977
0.0320      0.0480      0.0671      1.3947
0.0480      0.0640      0.0894      1.3906
0.0640      0.0800      0.1116      1.3854
0.0800      0.0960      0.1337      1.3790
0.0960      0.1120      0.1558      1.3715
0.1120      0.1280      0.1776      1.3628
0.1280      0.1440      0.1994      1.3530
0.1440      0.1600      0.2209      1.3421
0.1600      0.1760      0.2423      1.3301
0.1760      0.1920      0.2635      1.3170
0.1920      0.2080      0.2845      1.3029
0.2080      0.2240      0.3052      1.2877
0.2240      0.2400      0.3257      1.2715
0.2400      0.2560      0.3459      1.2542
0.2560      0.2720      0.3658      1.2360
0.2720      0.2880      0.3854      1.2168
0.2880      0.3040      0.4047      1.1967
0.3040      0.3200      0.4237      1.1757
0.3200      0.3360      0.4424      1.1537
0.3360      0.3520      0.4606      1.1309
0.3520      0.3680      0.4785      1.1073
0.3680      0.3840      0.4961      1.0828
0.3840      0.4000      0.5132      1.0575
0.4000      0.4160      0.5299      1.0315
0.4160      0.4320      0.5462      1.0047
0.4320      0.4480      0.5621      0.9772
0.4480      0.4640      0.5775      0.9490
0.4640      0.4800      0.5924      0.9201
0.4800      0.4960      0.6069      0.8906
0.4960      0.5120      0.6209      0.8605
0.5120      0.5280      0.6345      0.8298
0.5280      0.5440      0.6475      0.7985
0.5440      0.5600      0.6600      0.7668
0.5600      0.5760      0.6720      0.7345
0.5760      0.5920      0.6835      0.7017
0.5920      0.6080      0.6945      0.6684
0.6080      0.6240      0.7049      0.6348
0.6240      0.6400      0.7148      0.6007
0.6400      0.6560      0.7241      0.5663
0.6560      0.6720      0.7329      0.5315
0.6720      0.6880      0.7411      0.4963
0.6880      0.7040      0.7488      0.4609
0.7040      0.7200      0.7559      0.4252
0.7200      0.7360      0.7624      0.3892
0.7360      0.7520      0.7683      0.3530
0.7520      0.7680      0.7737      0.3165
0.7680      0.7840      0.7785      0.2799
0.7840      0.8000      0.7826      0.2431
0.8000      0.8160      0.7862      0.2062
0.8160      0.8320      0.7892      0.1692
0.8320      0.8480      0.7917      0.1320
0.8480      0.8640      0.7935      0.0948
0.8640      0.8800      0.7947      0.0575
0.8800      0.8960      0.7953      0.0202
0.8960      0.9120      0.7953      -0.0171
0.9120      0.9280      0.7948      -0.0545
0.9280      0.9440      0.7936      -0.0918
0.9440      0.9600      0.7918      -0.1290
0.9600      0.9760      0.7895      -0.1661
0.9760      0.9920      0.7865      -0.2032
0.9920      1.0080      0.7830      -0.2401
1.0080      1.0240      0.7788      -0.2769
1.0240      1.0400      0.7741      -0.3136
1.0400      1.0560      0.7688      -0.3500
1.0560      1.0720      0.7629      -0.3862
1.0720      1.0880      0.7564      -0.4222
1.0880      1.1040      0.7494      -0.4580
1.1040      1.1200      0.7418      -0.4935
1.1200      1.1360      0.7336      -0.5286
1.1360      1.1520      0.7249      -0.5634
1.1520      1.1680      0.7156      -0.5979
1.1680      1.1840      0.7057      -0.6320
1.1840      1.2000      0.6953      -0.6657
1.2000      1.2160      0.6844      -0.6990
1.2160      1.2320      0.6730      -0.7318
1.2320      1.2480      0.6610      -0.7641
1.2480      1.2640      0.6485      -0.7960
1.2640      1.2800      0.6355      -0.8273
1.2800      1.2960      0.6221      -0.8580
1.2960      1.3120      0.6081      -0.8882
1.3120      1.3280      0.5936      -0.9177
1.3280      1.3440      0.5787      -0.9467
1.3440      1.3600      0.5633      -0.9749
1.3600      1.3760      0.5475      -1.0025
1.3760      1.3920      0.5313      -1.0293
1.3920      1.4080      0.5146      -1.0554
1.4080      1.4240      0.4975      -1.0808
1.4240      1.4400      0.4800      -1.1053
1.4400      1.4560      0.4621      -1.1290
1.4560      1.4720      0.4439      -1.1519
1.4720      1.4880      0.4252      -1.1739
1.4880      1.5040      0.4063      -1.1951
1.5040      1.5200      0.3870      -1.2152
1.5200      1.5360      0.3674      -1.2345
1.5360      1.5520      0.3475      -1.2528
1.5520      1.5680      0.3273      -1.2701
1.5680      1.5840      0.3069      -1.2864
1.5840      1.6000      0.2862      -1.3017
1.6000      1.6160      0.2652      -1.3159
1.6160      1.6320      0.2440      -1.3291
1.6320      1.6480      0.2227      -1.3412
1.6480      1.6640      0.2011      -1.3522
1.6640      1.6800      0.1794      -1.3620
1.6800      1.6960      0.1575      -1.3708
1.6960      1.7120      0.1355      -1.3784
1.7120      1.7280      0.1134      -1.3849
1.7280      1.7440      0.0912      -1.3903
1.7440      1.7600      0.0689      -1.3945
1.7600      1.7760      0.0466      -1.3975
1.7760      1.7920      0.0242      -1.3993
1.7920      1.8080      0.0018      -1.4000
1.8080      1.8240      -0.0206     -1.3995
1.8240      1.8400      -0.0430     -1.3979
1.8400      1.8560      -0.0653     -1.3950
1.8560      1.8720      -0.0876     -1.3910
1.8720      1.8880      -0.1098     -1.3859
1.8880      1.9040      -0.1320     -1.3796
1.9040      1.9200      -0.1540     -1.3721
1.9200      1.9360      -0.1759     -1.3635
1.9360      1.9520      -0.1976     -1.3538
1.9520      1.9680      -0.2192     -1.3430
1.9680      1.9840      -0.2406     -1.3311
1.9840      2.0000      -0.2618     -1.3181
2.0000      2.0160      -0.2828     -1.3041
2.0160      2.0320      -0.3035     -1.2890
2.0320      2.0480      -0.3240     -1.2728
2.0480      2.0640      -0.3442     -1.2557
2.0640      2.0800      -0.3642     -1.2375
2.0800      2.0960      -0.3838     -1.2185
2.0960      2.1120      -0.4032     -1.1984
2.1120      2.1280      -0.4222     -1.1774
2.1280      2.1440      -0.4409     -1.1556
2.1440      2.1600      -0.4592     -1.1328
2.1600      2.1760      -0.4771     -1.1092
2.1760      2.1920      -0.4947     -1.0848
2.1920      2.2080      -0.5118     -1.0596
2.2080      2.2240      -0.5286     -1.0336
2.2240      2.2400      -0.5449     -1.0069
2.2400      2.2560      -0.5608     -0.9795
2.2560      2.2720      -0.5762     -0.9513
2.2720      2.2880      -0.5912     -0.9225
2.2880      2.3040      -0.6058     -0.8931
2.3040      2.3200      -0.6198     -0.8630
2.3200      2.3360      -0.6334     -0.8323
2.3360      2.3520      -0.6464     -0.8011
2.3520      2.3680      -0.6590     -0.7694
2.3680      2.3840      -0.6711     -0.7371
2.3840      2.4000      -0.6826     -0.7044
2.4000      2.4160      -0.6936     -0.6712
2.4160      2.4320      -0.7041     -0.6375
2.4320      2.4480      -0.7140     -0.6035
2.4480      2.4640      -0.7234     -0.5691
2.4640      2.4800      -0.7322     -0.5343
2.4800      2.4960      -0.7405     -0.4992
2.4960      2.5120      -0.7482     -0.4638
2.5120      2.5280      -0.7553     -0.4281
2.5280      2.5440      -0.7619     -0.3921
2.5440      2.5600      -0.7679     -0.3559
2.5600      2.5760      -0.7733     -0.3195
2.5760      2.5920      -0.7781     -0.2829
2.5920      2.6080      -0.7823     -0.2461
2.6080      2.6240      -0.7860     -0.2092
2.6240      2.6400      -0.7890     -0.1722
2.6400      2.6560      -0.7915     -0.1350
2.6560      2.6720      -0.7934     -0.0978
2.6720      2.6880      -0.7946     -0.0605
2.6880      2.7040      -0.7953     -0.0232
2.7040      2.7200      -0.7954     0.0141
2.7200      2.7360      -0.7948     0.0514
2.7360      2.7520      -0.7937     0.0887
2.7520      2.7680      -0.7920     0.1260
2.7680      2.7840      -0.7897     0.1631
2.7840      2.8000      -0.7868     0.2002
2.8000      2.8160      -0.7833     0.2371
2.8160      2.8320      -0.7792     0.2739
2.8320      2.8480      -0.7745     0.3106
2.8480      2.8640      -0.7693     0.3471
2.8640      2.8800      -0.7634     0.3833
2.8800      2.8960      -0.7570     0.4193
2.8960      2.9120      -0.7500     0.4551
2.9120      2.9280      -0.7424     0.4906
2.9280      2.9440      -0.7343     0.5258
2.9440      2.9600      -0.7256     0.5606
2.9600      2.9760      -0.7164     0.5951
2.9760      2.9920      -0.7066     0.6293
2.9920      3.0080      -0.6962     0.6630
3.0080      3.0240      -0.6853     0.6963
3.0240      3.0400      -0.6739     0.7292
3.0400      3.0560      -0.6620     0.7615
3.0560      3.0720      -0.6496     0.7934
3.0720      3.0880      -0.6366     0.8248
3.0880      3.1040      -0.6232     0.8556
3.1040      3.1200      -0.6092     0.8858

4. Jan 24, 2008

### brokenlynx

Ok basically the output above appears to be oscillatory the pendulum swinging between 1.4rad and -1.4rad. My problem comes when i attempt to apply an initial velocity (y[0] = 2) in this case the velocity only increases during the output (as in the first example output), would anyone be able to help with my implementation of the runge-kutta method or the derivatives method to try and find the root of this problem.

5. Jan 25, 2008

### pkleinod

Suggestions:
1) Is the total energy (= sum of potential and kinetic energy) conserved at each point? You can easily calculate this from the value of theta, the mass of the pendulum and the velocity at each point. Print this out and check that it is conserved. You might get a clue as to what is happening.
2) What happens if you take the 15th point, say, and start there, integrating backwards.
Do you retrace your steps, as you should?

6. Jan 9, 2010

### hendraarkan

i have a problem in mathematical equation about the initial condition, what methode should used if there is an addition force, such as damping force. This equation will be applied in oscillatory system in fortran language. considering that i still learn about the fortran language , i need the example of how make the programme about my problem, thanks before.

Last edited: Jan 9, 2010