【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题
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++】龙格库塔+亚当姆斯求解数值微分初值问题相关推荐
- matlab双端测距算法,一种使用亚当姆斯法的双端故障测距算法
高压输电线路是电力系统的重要组成部分,随着电力系统规模的扩展,高压远距离输电线路日益增多,而高压输电线路故障对电力系统.工农业生产和人们日常生活带来一定影响.高压输电线路的准确故障测距是从技术上保证电 ...
- 四阶龙格库塔(Runge-Kutta)求解微分方程-多种编程语言
前期是分享了matlab下面实现四阶龙格库塔(Runge-Kutta)求解微分方程,这期分享一下C++.C.Java.Python下面的四阶龙格库塔(Runge-Kutta)求解微分方程. 前文传送门 ...
- C语言实现亚当姆斯方法
#include<stdio.h> #include<stdlib.h> double fx(double x, double y) { return(y - 2 * x / ...
- [计算机数值分析]四阶龙格-库塔经典格式解常微分方程的初值问题
龙格-库塔方法的设计思想: 四阶龙格-库塔方法的经典格式: 程序设计框图: 例:设取步长h=0.2,从x=0到x=1用四阶经典格式解决以下常微分方程的初值问题. 运行示例: 源码: #include& ...
- 龙格库塔公式法解微分方程组初值问题实例
用四阶龙格库塔公式(取h=0.1)解下列微分方程组初值问题: { y 1 ′ = 120 − 2 y 1 + 2 y 2 ( 0 ≤ x ≤ 1.0 ) , y 2 ′ = 2 y 1 − 5 y 2 ...
- 四阶亚当姆斯预报-校正系统
#include <iostream> #include <array> #include <vector> using namespace std;double ...
- 【数值分析】python实现四阶亚当姆斯预测矫正方法
python代码 import numpy as np import matplotlib.pyplot as pltDT = np.array(input("份数:").spli ...
- matlab 龙格-库塔 法求解常微分方程
最近学习分室模型,里面碰到了用matlab 龙格-库塔 法求解常微分方程 研究了一阵子终于明白到底怎么实现了: 1. matlab 新建.m文件,编写龙格-库塔法求解函数 function [x,y] ...
- 二阶水箱 matlab 四阶龙格库塔,请问这个二阶常微分方程组用龙格四阶库塔法怎么编写...
要是不用MATLAB自带的ode45函数 也可以网上下载一个4阶龙格库塔算法来代替 附上一个仅供参考 function y=DELGKT4_rungekuta(f,h,a,b,y0,varvec) ...
最新文章
- VMware ESX Server 4(vSpere)测试记录
- 详解神秘Linux内核
- memcache多语言unix socket访问
- FP-growth算法高效发现频繁项集
- 基于直方图处理的图像增强
- 什么叫组网_家庭wifi,如何组网最合适
- 数据结构树的基本操作_数据结构二叉树的基本操作~~~~
- PHP的学习--在sublime中使用XDebug(Ubuntu)
- 获取mysql存储过程返回值_从强网杯随便注浅析mysql存储过程
- CSS @font-face性能优化
- 【光学】基于matlab圆孔衍射动态模拟【含Matlab源码 795期】
- matlab微带带通滤波器,带通滤波器的ADS仿真设计
- win7护眼透明主题 “魅力win7”
- php调用itchat,itchat接口使用示例
- 浅析精益生产中改善活动的8个步骤
- DWcs4右下角没有html文件,dreamweaver cs4 (dwcs4)安装图文教程
- Linux摄像头驱动第一篇之虚拟摄像头驱动vivi.c
- 最详细最容易理解的HMM文章
- 花呗不小心升级了信用购会影响什么
- GitHub 上值得收藏的 100 个精选前端项目!
热门文章
- 前端开发面试问题及答案
- Matlab-函数拟合
- 【Java笔记】——将晦涩难懂的IO流形象化
- Mn0.15V2O5·nH2O锌离子电池正极材料的储锌性能/Co@CNTs催化改性MgH2|碳纳米管原位负载Co纳米颗粒(Co@CNTs)催化剂
- 【育儿】计算宝宝的生辰八字
- Webpack实用工具之webpack-server
- 小米盒子为什么搜不到电视家?电视安装包解析错误解决方案
- 密歇根安娜堡大学的计算机科学教授,曾亮(美国国家工程院院士、密歇根大学遥感学教授)_百度百科...
- excel自定义功能区图标_将您自己的图标添加到Excel自定义功能区选项卡
- 学习必备的50条非常有趣且实用的Python一行代码,值得收藏