定步长的龙格库塔7(8)阶C++程序(RKF78)
定步长,可以在稍微修改之后变为变步长形式,代码如下:
void rkf78c( double h, double& T, vxd& X, double& err)
{
int N = X.size();
vxd X1(N);
;
vxd Y0(N), Y1(N), Y2(N), Y3(N), Y4(N), Y5(N), Y6(N), Y7(N), Y8(N), Y9(N), Y10(N), Y11(N), Y12(N);
; i != N ; i++)
{
X1[i] = X[i];
}
T1 = T;
dxdt(T1, X1, Y0);
; i != N ; i++)
{
X1[i] = X[i] + h*2.0/27.0*Y0[i];
}
T1 = T + h*2.0/27.0;
dxdt(T1, X1, Y1);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]+3.0*Y1[i])/36.0;
}
T1 = T + h*1.0/9.0;
dxdt(T1, X1, Y2);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]+3.0*Y2[i])/24.0;
}
T1 = T + h*1.0/6.0;
dxdt(T1, X1, Y3);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]*20.0+(-Y2[i]+Y3[i])*75.0)/48.0;
}
T1 = T + h*5.0/12.0;
dxdt(T1, X1, Y4);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]+Y3[i]*5.0+Y4[i]*4.0)/20.0;
}
T1 = T + h*1.0/2.0;
dxdt(T1, X1, Y5);
; i != N ; i++)
{
X1[i] = X[i] + h*(-Y0[i]*25.0+Y3[i]*125.0-Y4[i]*260.0+Y5[i]*250.0)/108.0;
}
T1 = T + h*5.0/6.0;
dxdt(T1, X1, Y6);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]*93.0+Y4[i]*244.0-Y5[i]*200.0+Y6[i]*13.0)/900.0;
}
T1 = T + h*1.0/6.0;
dxdt(T1, X1, Y7);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]*180.0-Y3[i]*795.0+Y4[i]*1408.0-Y5[i]*1070.0+Y6[i]*67.0+Y7[i]*270.0)/90.0;
}
T1 = T + h*2.0/3.0;
dxdt(T1, X1, Y8);
; i != N ; i++)
{
X1[i] = X[i] + h*(-Y0[i]*455.0+Y3[i]*115.0-Y4[i]*3904.0+Y5[i]*3110.0-Y6[i]*171.0+Y7[i]*1530.0-Y8[i]*45.0)/540.0;
}
T1 = T + h*1.0/3.0;
dxdt(T1, X1, Y9);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]*2383.0-Y3[i]*8525.0+Y4[i]*17984.0-Y5[i]*15050.0+Y6[i]*2133.0+Y7[i]*2250.0+Y8[i]*1125.0+Y9[i]*1800.0)/4100.0;
}
T1 = T + h;
dxdt(T1, X1, Y10);
; i != N ; i++)
{
X1[i] = X[i] + h*(Y0[i]*60.0-Y5[i]*600.0-Y6[i]*60.0+(Y8[i] -Y7[i] +2.0*Y9[i])*300.0)/4100.0;
}
T1 = T;
dxdt(T1, X1, Y11);
; i != N ; i++)
{
X1[i] = X[i] + h*(-Y0[i]*1777.0-Y3[i]*8525.0+Y4[i]*17984.0-Y5[i]*14450.0+Y6[i]*2193.0+Y7[i]*2550.0+Y8[i]*825.0+Y9[i]*1200.0+Y11[i]*4100.0)/4100.0;
}
T1 = T + h;
dxdt(T1, X1, Y12);
err = 0.0;
; i != X.size(); i++)
{
X[i] += h*(Y5[i]*272.0+(Y6[i]+Y7[i])*216.0+(Y8[i]+Y9[i])*27.0+(Y11[i]+Y12[i])*41.0)/840.0;
err += fabs((Y0[i]+Y10[i]-Y11[i]-Y12[i])*h*41.0/840.0);
}
T += h;
}
定步长的龙格库塔7(8)阶C++程序(RKF78)的更多相关文章
- MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...
- 用python面向对象的方法实现欧拉算法和龙格库塔算法
#!/bin/python3 # -*-coding:utf-8 -*- import math import numpy as np #定义一个欧拉算法的类,从而实现不同步长的引用 class Eu ...
- 【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题
/* 解数值微分初值问题: 龙格-库塔法求前k个初值 + 亚当姆斯法 */ #include<bits/stdc++.h> using namespace std; double f(do ...
- 龙格-库塔法解常微分方程(c++)
用龙格库塔法计算 #include <iostream> #include<iomanip> #include <cmath> using namespace st ...
- MATLAB学习笔记(七)——MATLAB解方程与函数极值
(一)线性方程组求解 包含n个未知数,由n个方程构成的线性方程组为: 其矩阵表示形式为: 其中 一.直接求解法 1.左除法 x=A\b; 如果A是奇异的,或者接近奇异的.MATLAB会发出警告信息的. ...
- 软件推荐-国内参数优化软件:1stOpt - First Optimizationg
首页:http://www.7d-soft.com/index.htm 4.0新功能 (预定2010年8月6日): 1:支持复数拟合.复数方程组计算: 2:支持微分方程拟合求解: 3:通用全局优化求解 ...
- 相机IMU融合四部曲(二):误差状态四元数详细解读
相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...
- MATLAB数学实验总结
L1 MATLAB 基础知识 P6 表1-3 数据显示格式 format rat format long P20 表2-5 常用的矩阵函数 zeros(m,n) %零阵 eye(n) %单位阵 one ...
- 多重网格法简介(Multi Grid)
原文链接 多重网格法是一种用于求解方程组的方法,可用于插值.解微分方程等. 从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与 ...
随机推荐
- 使用iframe从网页调起移动端应用
比如想在网页中调起支付宝,我们可以创建一个iframe,src为: alipayqr://platformapi/startapp?saId=10000007&clientVersion=3. ...
- Loadrunner11.00破解方法
1.下载 从http://www.jb51.net/softs/71240.html上面下载到loadrunner 11.0 2.安装loadrunner 11.0 下载之后,我是直接解压到硬盘,再安 ...
- python 时间处理
在实践中,时间处理遇到的问题,需要 Sep 06, 2014 19:30 (UTC 时间) 和 比较当前时间,早晚.知道 此 2014-09-06 19:30 格时间表达式.因此,在处理,通缉 先将s ...
- java字节中的基本类型的职业的数目 (采访总是问)
因为移动装置存储器中的移动开发的局限性,数据的字节数需要考虑往往在占领中使用的类型. 下面介绍下一个Java,以加深记忆. 在Java中一共同拥有8种基本数据类型,当中有4种整型,2种浮点类型,1种用 ...
- hdu 1098 Ignatius's puzz
有关数论方面的题要仔细阅读,分析公式. Problem Description Ignatius is poor at math,he falls across a puzzle problem,so ...
- linux_UBUNTU 12.04 上使用 SQUID 架设HTTP正向代理服务器
配置普通HTTP正向代理 安装 1 sudo apt-get install squid squid-common 配置 squid3 1 sudo vim /etc/squid3/squid ...
- The Stern-Brocot Number System(排序二进制)
The Stern-Brocot Number System Input: standard input Output: standard output The Stern-Brocot tree i ...
- I/O概述和审查操作
I/O流量可表示非常多不同种类的输入源和输出目的地.它包含一个简单的字节流,基本数据(int.boolean.double等待),本地化字符,和对象.仅是简单地传递数据,另一些流能够操作和转换数据 不 ...
- Linux 解决文件删除,但并没有改变磁盘可用性
昨天收到zabbix警报邮件,有一个server的 /home 文件夹的使用达成90%以上.检查,发现MongoDB数据文件到这个文件夹.高.而这个MongoDB的数据如今又都不用了.于是就直接把它的 ...
- SQL Server 板机
触发器是一种特殊类型的存储过程.们介绍的存储过程. 触发器主要是通过事件进行触发被自己主动调用运行的. 而存储过程能够通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候 ...