【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题
/*
解数值微分初值问题:
龙格-库塔法求前k个初值 + 亚当姆斯法
*/
#include<bits/stdc++.h>
using namespace std; double f(double x,double y){
//y(0) = 1
return (y - *x/y);
}
void getRungeResult(double *Runge_k,double x0,double y0,double h,int N){
//求解N个初值,保存在Runge_k[1 to N]中
double K1,K2,K3,K4;
double x1,y1;
for(int i = ;i<=N;i++){
x1 = x0+h;
K1 = f(x0,y0);
K2 = f(x0+h/,y0+h/*K1);
K3 = f(x0+h/,y0+h/*K2);
K4 = f(x1,y0+K4);
y1 = y0 + h/*(K1+*K2+*K3+K4);
Runge_k[i] = y1;
x0 = x1;
y0 = y1;
}
return;
} //亚当姆斯多步法
void Adams(double *Runge_k,double *predict,double x0,double y0,double h,int N){
Runge_k[] = y0;
//(0)龙格库塔法求前4个初值
getRungeResult(Runge_k,x0,y0,h,);
double y1,y2,y3,dy0,dy1,dy2,dy3;
y1 = Runge_k[];
y2 = Runge_k[];
y3 = Runge_k[];
dy0 = f(x0,y0);
dy1 = f(x0+h,y1);
dy2 = f(x0+*h,y2);
dy3 = f(x0+*h,y3);
double x3 = x0+*h;
double x4,y4,yp,dyp,dy4;
for(int i = ;i<=N;i++){
x4 = x3+h;
//(1)预测
yp = y3 + h/*(*dy3-*dy2+*dy1-*dy0);
predict[i] = yp;//保存预测值
//预测要用dyp
dyp = f(x4,yp);
//(2)校正
y4 = y3 + h/*(*dyp + *dy3 -*dy2+dy1);
//存起来
Runge_k[i] = y4;
//求下一次需要用到导
dy4 = f(x4,y4);
//为下一次循环做准备
x3 = x4;
y3 = y4;
dy0 = dy1;
dy1 = dy2;
dy2 = dy3;
dy3 = dy4;
}
return;
} /*假设这里保证四阶精度*/
int main(){
/*说明:x0,y0是初值,h是小区间长度,N是要求的个数*/
double x0,y0,h;
int N;
cout<<"输入初值x0,y0,小区间h,需要的初值个数N:";
cin>>x0>>y0>>h>>N;
//保存Runge求的4个初始值,龙格法求3个就可以;之后也用这个保存最终的Adams结果
double Runge_k[];
//保存预测值,方便以后比较
double predict[];
memset(predict,,sizeof(predict));
memset(Runge_k,,sizeof(Runge_k));
Adams(Runge_k,predict,x0,y0,h,N);
cout<<endl;
printf("预测值:");
for(int i = ;i<=N;i++){
if(i<){
printf("%.6lf ",);
}else{
printf("%.6lf ",predict[i]);
}
}
cout<<endl;
printf("校正值:");
for(int i = ;i<=N;i++){
printf("%.6lf ",Runge_k[i]);
} }
【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题的更多相关文章
- HTML给div设置百分比高度无效的解决方式 - 库塔姆斯 - CSDN博客
原文:HTML给div设置百分比高度无效的解决方式 - 库塔姆斯 - CSDN博客 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/HobHunter ...
- MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...
- P1796 汤姆斯的天堂梦
题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...
- 用python面向对象的方法实现欧拉算法和龙格库塔算法
#!/bin/python3 # -*-coding:utf-8 -*- import math import numpy as np #定义一个欧拉算法的类,从而实现不同步长的引用 class Eu ...
- 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...
- P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...
- 定步长的龙格库塔7(8)阶C++程序(RKF78)
定步长,可以在稍微修改之后变为变步长形式,代码如下: void rkf78c( double h, double& T, vxd& X, double& err) { int ...
- matlab练习程序(龙格库塔法)
非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以 ...
- Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用
15.1 工业乙醇生产与计算机仿真 乙醇作为可再生清洁能源不仅可以代替四乙基铅作为汽油的防爆剂,还可以制造汽油醇.这一巨大的潜在需求促使人们去寻找提高乙醇工业生产率的途径,使人们着手于发酵工程的研究. ...
随机推荐
- Unity编辑器:基于NGUI的引用检测工具
这里共享一个基于NGUI的引用检测工具.工具包括几个部分:Atlas/Sprite的引用查找:字库引用查找:UITexture引用查找:Component查找: 代码就不多介绍了,文章底部提供源码下载 ...
- 【中文版 | 论文原文】BERT:语言理解的深度双向变换器预训练
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding 谷歌AI语言组论文<BERT:语言 ...
- ES6 Promise 详解
一.概念 Promise,从语法上来讲,它是一个对象,是一个构造函数,可以获取 异步操作 的信息. 简单来讲,就是用同步的方式写异步代码,用来解决回调问题. 二.特点 Promise 对象有两个特点: ...
- Python学习第十五篇——类继承和类实例化
学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...
- ios 后台下载,断点续传总结
2018年12月05日 16:09:00 weixin_34101784 阅读数:5 https://blog.csdn.net/weixin_34101784/article/details/875 ...
- B-Tree 和 B+Tree
B-Tree和B+Tree 本文来自 Hubery_James 的CSDN 博客 ,全文地址请点击:原文地址-干货满满 B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索 ...
- Django之事务
Django之事务 事务就是将一组操作捆绑在一起,只有当这一组操作全部都成功以后这个事务才算成功;当这组操作中有任何一个没有操作成功,则这个操作就会回滚,回到操作之前的状态. 其中牵扯到向数据库中写数 ...
- 个人博客作业-week5-敏捷开发方法读后感
满篇英文对一个非单词狂魔来说真的是很吃力啊… 敏捷软件开发方法是一种从1990年代开始逐渐引起广发关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力,他们的具体名称.理念.过程.术 ...
- 集大软件工程15级结对编程week1
集大软件工程15级结对编程week1 0. 团队成员 姓名 学号 博客园首页 码云主页 孙志威 20152112307 Agt Eurekaaa 孙慧君 201521123098 野原泽君 野原泽君 ...
- (关于数据传输安全)SSH协议
这里说的不是java的SSH框架,是1995年,芬兰学者Tatu Ylonen设计的SSH协议. 有计算机网络基础的同学都知道,在网上传输的数据是可以被截取的.那么怎样才能获得安全? 一.春点行话 电 ...