1 /*
 2     解数值微分初值问题:
 3     龙格-库塔法求前k个初值 + 亚当姆斯法
 4 */
 5 #include<bits/stdc++.h>
 6 using namespace std;
 7
 8 double f(double x,double y){
 9     //y(0) = 1
10     return (y - 2*x/y);
11 }
12 void getRungeResult(double *Runge_k,double x0,double y0,double h,int N){
13     //求解N个初值,保存在Runge_k[1 to N]中
14     double K1,K2,K3,K4;
15     double x1,y1;
16     for(int i = 1;i<=N;i++){
17         x1 = x0+h;
18         K1 = f(x0,y0);
19         K2 = f(x0+h/2,y0+h/2*K1);
20         K3 = f(x0+h/2,y0+h/2*K2);
21         K4 = f(x1,y0+K4);
22         y1 = y0 + h/6*(K1+2*K2+2*K3+K4);
23         Runge_k[i] = y1;
24         x0 = x1;
25         y0 = y1;
26     }
27     return;
28 }
29
30 //亚当姆斯多步法
31 void Adams(double *Runge_k,double *predict,double x0,double y0,double h,int N){
32     Runge_k[0] = y0;
33     //(0)龙格库塔法求前4个初值
34     getRungeResult(Runge_k,x0,y0,h,3);
35     double y1,y2,y3,dy0,dy1,dy2,dy3;
36     y1 = Runge_k[1];
37     y2 = Runge_k[2];
38     y3 = Runge_k[3];
39     dy0 = f(x0,y0);
40     dy1 = f(x0+h,y1);
41     dy2 = f(x0+2*h,y2);
42     dy3 = f(x0+3*h,y3);
43     double x3 = x0+3*h;
44     double x4,y4,yp,dyp,dy4;
45     for(int i = 4;i<=N;i++){
46         x4 = x3+h;
47         //(1)预测
48         yp = y3 + h/24*(55*dy3-59*dy2+37*dy1-9*dy0);
49         predict[i] = yp;//保存预测值
50         //预测要用dyp
51         dyp = f(x4,yp);
52         //(2)校正
53         y4 = y3 + h/24*(9*dyp + 19*dy3 -5*dy2+dy1);
54         //存起来
55         Runge_k[i] = y4;
56         //求下一次需要用到导
57         dy4 = f(x4,y4);
58         //为下一次循环做准备
59         x3 = x4;
60         y3 = y4;
61         dy0 = dy1;
62         dy1 = dy2;
63         dy2 = dy3;
64         dy3 = dy4;
65     }
66     return;
67 }
68
69
70 /*假设这里保证四阶精度*/
71 int main(){
72     /*说明:x0,y0是初值,h是小区间长度,N是要求的个数*/
73     double x0,y0,h;
74     int N;
75     cout<<"输入初值x0,y0,小区间h,需要的初值个数N:";
76     cin>>x0>>y0>>h>>N;
77     //保存Runge求的4个初始值,龙格法求3个就可以;之后也用这个保存最终的Adams结果
78     double Runge_k[100];
79     //保存预测值,方便以后比较
80     double predict[100];
81     memset(predict,0,sizeof(predict));
82     memset(Runge_k,0,sizeof(Runge_k));
83     Adams(Runge_k,predict,x0,y0,h,N);
84     cout<<endl;
85     printf("预测值:");
86     for(int i = 0;i<=N;i++){
87         if(i<4){
88             printf("%.6lf ",0);
89         }else{
90             printf("%.6lf ",predict[i]);
91         }
92     }
93     cout<<endl;
94     printf("校正值:");
95     for(int i = 0;i<=N;i++){
96         printf("%.6lf ",Runge_k[i]);
97     }
98
99 }

转载于:https://www.cnblogs.com/duye/p/9172043.html

【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题相关推荐

  1. matlab双端测距算法,一种使用亚当姆斯法的双端故障测距算法

    高压输电线路是电力系统的重要组成部分,随着电力系统规模的扩展,高压远距离输电线路日益增多,而高压输电线路故障对电力系统.工农业生产和人们日常生活带来一定影响.高压输电线路的准确故障测距是从技术上保证电 ...

  2. 四阶龙格库塔(Runge-Kutta)求解微分方程-多种编程语言

    前期是分享了matlab下面实现四阶龙格库塔(Runge-Kutta)求解微分方程,这期分享一下C++.C.Java.Python下面的四阶龙格库塔(Runge-Kutta)求解微分方程. 前文传送门 ...

  3. C语言实现亚当姆斯方法

    #include<stdio.h> #include<stdlib.h> double fx(double x, double y) { return(y - 2 * x / ...

  4. [计算机数值分析]四阶龙格-库塔经典格式解常微分方程的初值问题

    龙格-库塔方法的设计思想: 四阶龙格-库塔方法的经典格式: 程序设计框图: 例:设取步长h=0.2,从x=0到x=1用四阶经典格式解决以下常微分方程的初值问题. 运行示例: 源码: #include& ...

  5. 龙格库塔公式法解微分方程组初值问题实例

    用四阶龙格库塔公式(取h=0.1)解下列微分方程组初值问题: { y 1 ′ = 120 − 2 y 1 + 2 y 2 ( 0 ≤ x ≤ 1.0 ) , y 2 ′ = 2 y 1 − 5 y 2 ...

  6. 四阶亚当姆斯预报-校正系统

    #include <iostream> #include <array> #include <vector> using namespace std;double ...

  7. 【数值分析】python实现四阶亚当姆斯预测矫正方法

    python代码 import numpy as np import matplotlib.pyplot as pltDT = np.array(input("份数:").spli ...

  8. matlab 龙格-库塔 法求解常微分方程

    最近学习分室模型,里面碰到了用matlab 龙格-库塔 法求解常微分方程 研究了一阵子终于明白到底怎么实现了: 1. matlab 新建.m文件,编写龙格-库塔法求解函数 function [x,y] ...

  9. 二阶水箱 matlab 四阶龙格库塔,请问这个二阶常微分方程组用龙格四阶库塔法怎么编写...

    要是不用MATLAB自带的ode45函数  也可以网上下载一个4阶龙格库塔算法来代替 附上一个仅供参考 function y=DELGKT4_rungekuta(f,h,a,b,y0,varvec)  ...

最新文章

  1. VMware ESX Server 4(vSpere)测试记录
  2. 详解神秘Linux内核
  3. memcache多语言unix socket访问
  4. FP-growth算法高效发现频繁项集
  5. 基于直方图处理的图像增强
  6. 什么叫组网_家庭wifi,如何组网最合适
  7. 数据结构树的基本操作_数据结构二叉树的基本操作~~~~
  8. PHP的学习--在sublime中使用XDebug(Ubuntu)
  9. 获取mysql存储过程返回值_从强网杯随便注浅析mysql存储过程
  10. CSS @font-face性能优化
  11. 【光学】基于matlab圆孔衍射动态模拟【含Matlab源码 795期】
  12. matlab微带带通滤波器,带通滤波器的ADS仿真设计
  13. win7护眼透明主题 “魅力win7”
  14. php调用itchat,itchat接口使用示例
  15. 浅析精益生产中改善活动的8个步骤
  16. DWcs4右下角没有html文件,dreamweaver cs4 (dwcs4)安装图文教程
  17. Linux摄像头驱动第一篇之虚拟摄像头驱动vivi.c
  18. 最详细最容易理解的HMM文章
  19. 花呗不小心升级了信用购会影响什么
  20. GitHub 上值得收藏的 100 个精选前端项目!

热门文章

  1. 前端开发面试问题及答案
  2. Matlab-函数拟合
  3. 【Java笔记】——将晦涩难懂的IO流形象化
  4. Mn0.15V2O5·nH2O锌离子电池正极材料的储锌性能/Co@CNTs催化改性MgH2|碳纳米管原位负载Co纳米颗粒(Co@CNTs)催化剂
  5. 【育儿】计算宝宝的生辰八字
  6. Webpack实用工具之webpack-server
  7. 小米盒子为什么搜不到电视家?电视安装包解析错误解决方案
  8. 密歇根安娜堡大学的计算机科学教授,曾亮(美国国家工程院院士、密歇根大学遥感学教授)_百度百科...
  9. excel自定义功能区图标_将您自己的图标添加到Excel自定义功能区选项卡
  10. 学习必备的50条非常有趣且实用的Python一行代码,值得收藏