1.四階龍格—庫塔法
2.實例求解
3.輸出結果
4.程序源代碼
//龍格——庫塔法求解初值問題,常微分方程求解,傳染病預測 //開發人員:chenshuai 開發日期:2019.11.5 郵箱:[email protected] #include "pch.h" #include <iostream> #include <vector> #include <iomanip> using namespace std; #define h 0.1 //步長 #define k 0.000002 //感染別人的人數變化的速率 #define m 100000 //人口總數 double diff_equation(double x, double y);//聲明微分方程 double diff_equation(double x, double y) { double f; f = k * (m - y)*y; return f; } double Runge_kutta(double x);//聲明龍格——庫塔法求解常微分方程初值問題 double Runge_kutta(double x) { int num; double yy=0; num =int ( x / h)+1; double k1, k2, k3, k4; vector<double>y(num); vector<double>t(num); t[0] = 0;y[0] = 1000; for (int i = 0; i < num; i++) { k1 = diff_equation(t[i], y[i]); k2= diff_equation(t[i]+0.5*h, y[i]+0.5*h*k1); k3 = diff_equation(t[i] + 0.5*h, y[i] + 0.5*h*k2); k4 = diff_equation(t[i] + h, y[i] + h*k3); if (i < num-1) { y[i + 1] = y[i] + double(1.0 / 6) * h*(k1 + 2 * k2 + 2 * k3 + k4); t[i + 1] = t[i] + h; } } return y[num-1]; } //主函數 int main() { double t = 30,y_t; //輸入t時刻,y表示輸出感染別人的人口數量 y_t=Runge_kutta(t); cout << "30天結束感染別人的人口數量:" << fixed << setprecision(0) << setw(6) << y_t << endl << endl << endl<<endl<<endl; }