经典四阶龙格库塔法
来源:互联网 发布:java驻场开发怎么样 编辑:程序博客网 时间:2024/06/05 08:29
龙格库塔法
分类: GSL-GNU scientific Library 2013-08-14 17:22178人阅读 评论(0)收藏 举报
目录(?)[+]
龙格库塔法
经典四阶龙格库塔法
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,经常被称为“RK4”或者就是“龙格库塔法”。
令初值问题表述如下。
对于该问题的RK4由如下方程给出:
其中:
RK4法是四阶方法,也就是说每步的误差是h5阶,而总积累误差为h4阶。
RK4计算程序如下:
//visualsan@yahoo.cn#include <iostream>using namespace std;#include <vector>#include <math.h>using namespace std;class RK {public: class DiffFunc { public: double operator()(double x,double y) { // y'=cos(x) return cos(x); // y'=x*y-1 // return x*y-1; } } m_df; RK(double xend,double x0,double y0,double h=1e-3) { m_max_x = xend; m_x0 = x0; m_y0 = y0; m_h = h; m_half_h=h/2.0; } void Solve() { double yn=m_y0,xstart=m_x0; while( xstart<m_max_x) { double y=yn+K(xstart,yn)*m_h;//y(n+1)=y(n)+h*y' m_x.push_back(xstart); m_y.push_back(yn); cout<<xstart<<""<<yn<<endl; yn=y; xstart+=m_h; } } //求解后的点 std::vector<double> m_x,m_y; //步长h double m_h; //初始点x0,y0 double m_x0,m_y0; //x范围 double m_max_x; private: double m_half_h; double m_ptx,m_pty; double K1(double x,double y) { double v=m_df(x,y); m_ptx=x; m_pty=y; return v; } double K2(double _k1) { double v=m_df(m_ptx+m_half_h,m_pty+m_half_h*_k1); return v; } double K3(double _k2) { double v=m_df(m_ptx+m_half_h,m_pty+m_half_h*_k2); return v; } double K4(double _k3) { double v=m_df(m_ptx+m_h,m_pty+m_h*_k3); return v; } double K(double x,double y) { double _k1=K1(x,y),_k2=K2(_k1),_k3=K3(_k2),_k4=K4(_k3); return (_k1+2.0*_k2+2.0*_k3+_k4)/6.0; } };main(){ RK s1(1,0,0); s1.Solve();}
计算实例:
y'=cos(x) y(0)=0, -> solution y=sin(x)
y'=x*cos(x) y(0)=0
y'=1.0/sqrt(x*x+y*y),y(0)=0.1
- 经典四阶龙格库塔法
- 经典四阶龙格库塔法
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典!
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典
- 经典
- 龙格-库塔法 wiki
- Android中ViewPgae中的Fragment如何确认当前页面可见的问题
- oracle网络配置
- Oracle EBS OAF(ADF) VO(View Object)开发中的绑定方式(Binding Style)的介绍
- VMware Network Adapter VMnet1和VMnet8 未识别的网络的解决方法
- 经典四阶龙格库塔法
- 康托展开与逆展开
- POJ3664
- 中东部还是阴霾得很严重呀
- Matlab中龙格-库塔(Runge-Kutta)方法原理及实现
- JDBC 数据库批处理操作
- C#中流的读写器BinaryReader、BinaryWriter,StreamReader、StreamWriter详解
- Ubuntu下中文乱码解决方案
- C++各大有名科学计算库(转)