[算法] [常微分方程] [欧拉法 改进欧拉法 经典R-K算法]
2014-06-05 20:53
323 查看
#include<iostream> #include<cmath> #include<cstdio> #include<iomanip> using namespace std; double h=0.1;//步差 double xi[11]={0}; double ol_yi[11]={1}; double gol_yi[11]={1}; double rk_yi[11]={1}; double real_yi[11]={1}; double f(double x,double y){ return 2*x/(3*y*y); }//f(x,y) void OLFunction(){ for(int i=0;i<10;i++){ ol_yi[i+1]=ol_yi[i]+h*f(xi[i],ol_yi[i]); } }//欧拉方法 void GOLFunction(){ for(int i=0;i<10;i++){ gol_yi[i+1]=gol_yi[i]+ h*( f(xi[i],gol_yi[i]) +f(xi[i+1],gol_yi[i]+h*f(xi[i],gol_yi[i])) )/2; } }//改进欧拉方法 void RKFunction(){ double K1,K2,K3,K4; for(int i=0;i<10;i++){ K1=f(xi[i],rk_yi[i]); K2=f(xi[i]+h/2,rk_yi[i]+h*K1/2); K3=f(xi[i]+h/2,rk_yi[i]+h*K2/2); K4=f(xi[i]+h,rk_yi[i]+h*K3); rk_yi[i+1]=rk_yi[i]+h*(K1+2*K2+2*K3+K4)/6; } }//经典龙格贝法 void RFunction(){ for(int i=1;i<11;i++){ real_yi[i]=pow(1.0+xi[i]*xi[i],1/3.0); } }//真实解 int main(){ int i; for(i=1;i<11;i++){ xi[i]=xi[i-1]+h; }//求xi[] OLFunction();//四种计算方法 GOLFunction(); RKFunction(); RFunction(); printf("-------------------------------------------------\n"); printf("xi | 欧拉 | 改进欧拉 | 经典R-K | 准确解 \n"); printf("-------------------------------------------------\n"); for(i=0;i<11;i++){ printf("%.1lf | %.6lf | %.6lf | %.6lf | %.8lf\n", xi[i],ol_yi[i],gol_yi[i],rk_yi[i],real_yi[i]); } getchar(); return 0; }
相关文章推荐
- 计算方法之改进的欧拉法计算常微分方程
- 欧拉法、预估校正法(改进的欧拉法)与四阶龙格库塔法求解常微分方程的数值解C++程序
- 计算方法之改进的欧拉法计算常微分方程
- 关于改进粒子滤波算法问题 救命啊
- 图形学算法--Bresenham算法的改进(综合各个方向)
- Bresenham改进算法结合wu反走样算法画颜色渐变直线
- 下拉框智能提示算法改进,上万条数据智能提示,所有浏览器包括IE不卡
- 定步长与变步长的改进欧拉算法!!
- 使用k-近邻算法改进约会网站的配对效果。
- 『机器学习实战』使用 k-近邻算法改进约会网站的配对效果
- 机器学习-kNN算法改进约会效果
- 截取字符显示的算法改进
- 对Diffie-Hellman密钥交换算法实现的一点改进
- OTSU算法及其改进算法学习
- 算法——选择排序、插入排序和希尔排序(改进的插入排序)
- 冒泡排序的改进算法
- 有关Floyd相关算法的一点点改进
- 中值滤波的改进算法
- 一个频域语音降噪算法实现及改进方法
- SSD目标检测算法改进:DSOD(不需要预训练的目标检测算法)