数值分析-常微分方程解法
欧拉方法、改进欧拉方法、以及龙格库塔(四阶)
#include<iostream>
using namespace std;
#include<cmath>
//以f(0)=1,y'=y-2x/y为例。
float f(float x, float y) {
return y - 2 * x / y;
}
float developEuler(float X, float h) {
int n =X/ h;
float x = 0;
float y = 1;
for (int j = 0; j < n; j++) {
y = y+ h * (f(x, y) + f(x + h, y + h * f(x, y)))/2;
x += h;//x移位
}
return y;
}
float quadraRK(float X, float h) {
int n = X / h;
float x = 0;
float y = 1;
float k1, k2, k3, k4;
for (int j = 0; j < n; j++) {
k1 = f(x, y);
k2 = f(x + h / 2, y + h * k1 / 2);
k3 = f(x + h / 2, y + h * k2 / 2);
k4 = f(x + h, y + h * k3);
y = y + h * (k1 + 2 * k2 + 2 * k3 + k4)/6;
x += h;
}
return y;
}

浙公网安备 33010602011771号