用C++实现通过RKF45算法
时间: 2023-02-10 18:08:53 浏览: 126
RKF45 是一种用于求解常微分方程组的数值积分算法。它可以求出给定初始条件下的解,并且能够自动调整步长,以确保精度。
下面是一个使用 C 语言实现 RKF45 算法的例子:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_ITER 1000
#define ABS_TOL 1e-6
#define REL_TOL 1e-6
// 定义常微分方程的右边的函数
// x 为当前的状态,t 为当前的时间,f 为输出数组
void diff_eq(double x[], double t, double f[]) {
f[0] = x[1];
f[1] = -x[0];
}
// RKF45 算法的主体
void rkf45(double t0, double x0[], double t1, double x1[]) {
int i, j;
double h, t, x[2], k1[2], k2[2], k3[2], k4[2], k5[2], k6[2];
double y[2], y1[2], y2[2], y3[2], y4[2], y5[2], y6[2], y7[2];
double e, e1, e2, e3, e4, e5, e6, e7, e8;
h = t1 - t0;
t = t0;
x[0] = x0[0];
x[1] = x0[1];
for (i = 0; i < MAX_ITER; i++) {
diff_eq(x, t, k1);
for (j = 0; j < 2; j++) {
y[j] = x[j] + h * k1[j] / 4;
}
diff_eq(y, t + h / 4, k2);
for (j = 0; j < 2; j++) {
y1[j] = x[j] + h * (3 * k1[j] + 9 * k2[j]) / 32;
}
diff_eq(y1, t + 3 * h / 8, k3);
for (j = 0; j < 2; j++) {
y2[j] = x[j] + h * (1932 * k1[j] - 7200 * k2[j] + 7296 * k3[j])
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)