龙格-库塔方法的设计思想:
四阶龙格-库塔方法的经典格式:
程序设计框图:
例:设取步长h=0.2,从x=0到x=1用四阶经典格式解决以下常微分方程的初值问题。
运行示例: 源码:
#include<iostream>#include<iomanip>double f(double x, double y); double f1(double x);using namespace std;int main(void){double x0, y0, h; //x0,y0为初值;h为步长double x1, y1; //步进后的新值double K1, K2, K3, K4; //四阶经典格式中的斜率int N; //N为步数cout << "请输入初值:";cin >> x0 >> y0;cout << "请输入步长:";cin >> h;cout << "请输入步数:";cin >> N;//输出提示信息int i = 1;cout << "\t" << setw(10) << "xn" << "\t" << setw(10) << "yn" << "\t" << setw(10) << "y(xn)" << endl;for (i; i <= N; i++){x1 = x0 + h; //离散点//求斜率K1 = f(x0, y0);K2 = f(x0 + h / 2, y0 + h / 2 * K1);K3 = f(x0 + h / 2, y0 + h / 2 * K2);K4 = f(x1, y0 + h * K3);//求新值y1 = y0 + h / 6 * (K1 + 2 * K2 + 2 * K3 + K4);//输出本次步进后的离散点数据cout << i << "\t" << setw(10) << x1 << "\t" << setw(10) << y1 << "\t" << setw(10) << f1(x1) << endl;//把新的值赋给旧值,开启下一趟循环x0 = x1;y0 = y1;}return 0;}double f(double x, double y) //欧拉格式中的x,y的函数关系式,即f(xn,yn){double result;result = y - 2 * x / y;return result;}double f1(double x) //实际函数解析式{double result;result = sqrt(1 + 2 * x);return result;}