ONLY DO WHAT ONLY YOU CAN DO

こけたら立ちなはれ 立ったら歩きなはれ

C++で常微分方程式(オイラー法)

初速 150 km/h で, 45°の角度で投げたボールの軌跡をオイラー法で計算する
(空気抵抗を考慮しない)

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main(void)
{
    // 角度 
    double degree = 45;
    double radian = degree * M_PI / 180.0;
    // 初速 150 km/h -> 秒速に変換
    double v = 150 * 1000 / 3600; 
    // 水平方向の速度
    double vx = v * cos(radian); 
    // 鉛直方向の速度
    double vy = v * sin(radian); 
    double vy0 = vy; 
    // 重力加速度
    double g = 9.8;
    // 時間間隔(秒)
    double dt = 0.1;
    // 経過秒数
    double t = 0.0;
    // 位置
    double x = 0.0;
    double y = 0.0;

    // Euler法
    for (int i = 1; y >= 0.0; i++) 
    {
        // 経過秒数
        t = i * dt;
        // 位置
        y = y + dt * vy;
        x = x + dt * vx;

        // 経過秒数
        cout << setw(8) << fixed << setprecision(5) << t      << "\t";
        // 位置 (Euler法)
        cout << setw(8) << fixed << setprecision(5) << x      << "\t";
        cout << setw(8) << fixed << setprecision(5) << y      << "\t";
        // 位置 (正解)
        cout << setw(8) << fixed << setprecision(5) << vx * t << "\t";
        cout << setw(8) << fixed << setprecision(5) << vy0 * t - (g * t * t) / 2 << endl;

        // 鉛直方向の速度
        vy = vy - (dt * g);
    }
    return 0;
}
 0.10000	 2.89914	 2.89914	 2.89914	 2.85014
 0.20000	 5.79828	 5.70028	 5.79828	 5.60228
 0.30000	 8.69741	 8.40341	 8.69741	 8.25641
 0.40000	11.59655	11.00855	11.59655	10.81255
 0.50000	14.49569	13.51569	14.49569	13.27069
 0.60000	17.39483	15.92483	17.39483	15.63083
 0.70000	20.29396	18.23596	20.29396	17.89296
 0.80000	23.19310	20.44910	23.19310	20.05710
 0.90000	26.09224	22.56424	26.09224	22.12324
 1.00000	28.99138	24.58138	28.99138	24.09138
 1.10000	31.89052	26.50052	31.89052	25.96152
 1.20000	34.78965	28.32165	34.78965	27.73365
 1.30000	37.68879	30.04479	37.68879	29.40779
 1.40000	40.58793	31.66993	40.58793	30.98393
 1.50000	43.48707	33.19707	43.48707	32.46207
 1.60000	46.38620	34.62620	46.38620	33.84220
 1.70000	49.28534	35.95734	49.28534	35.12434
 1.80000	52.18448	37.19048	52.18448	36.30848
 1.90000	55.08362	38.32562	55.08362	37.39462
 2.00000	57.98276	39.36276	57.98276	38.38276
 2.10000	60.88189	40.30189	60.88189	39.27289
 2.20000	63.78103	41.14303	63.78103	40.06503
 2.30000	66.68017	41.88617	66.68017	40.75917
 2.40000	69.57931	42.53131	69.57931	41.35531
 2.50000	72.47845	43.07845	72.47845	41.85345
 2.60000	75.37758	43.52758	75.37758	42.25358
 2.70000	78.27672	43.87872	78.27672	42.55572
 2.80000	81.17586	44.13186	81.17586	42.75986
 2.90000	84.07500	44.28700	84.07500	42.86600
 3.00000	86.97413	44.34413	86.97413	42.87413
 3.10000	89.87327	44.30327	89.87327	42.78427
 3.20000	92.77241	44.16441	92.77241	42.59641
 3.30000	95.67155	43.92755	95.67155	42.31055
 3.40000	98.57069	43.59269	98.57069	41.92669
 3.50000	101.46982	43.15982	101.46982	41.44482
 3.60000	104.36896	42.62896	104.36896	40.86496
 3.70000	107.26810	42.00010	107.26810	40.18710
 3.80000	110.16724	41.27324	110.16724	39.41124
 3.90000	113.06637	40.44837	113.06637	38.53737
 4.00000	115.96551	39.52551	115.96551	37.56551
 4.10000	118.86465	38.50465	118.86465	36.49565
 4.20000	121.76379	37.38579	121.76379	35.32779
 4.30000	124.66293	36.16893	124.66293	34.06193
 4.40000	127.56206	34.85406	127.56206	32.69806
 4.50000	130.46120	33.44120	130.46120	31.23620
 4.60000	133.36034	31.93034	133.36034	29.67634
 4.70000	136.25948	30.32148	136.25948	28.01848
 4.80000	139.15861	28.61461	139.15861	26.26261
 4.90000	142.05775	26.80975	142.05775	24.40875
 5.00000	144.95689	24.90689	144.95689	22.45689
 5.10000	147.85603	22.90603	147.85603	20.40703
 5.20000	150.75517	20.80717	150.75517	18.25917
 5.30000	153.65430	18.61030	153.65430	16.01330
 5.40000	156.55344	16.31544	156.55344	13.66944
 5.50000	159.45258	13.92258	159.45258	11.22758
 5.60000	162.35172	11.43172	162.35172	 8.68772
 5.70000	165.25085	 8.84285	165.25085	 6.04985
 5.80000	168.14999	 6.15599	168.14999	 3.31399
 5.90000	171.04913	 3.37113	171.04913	 0.48013
 6.00000	173.94827	 0.48827	173.94827	-2.45173
 6.10000	176.84741	-2.49259	176.84741	-5.48159
参考文献