【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 工业乙醇生产与计算机仿真 乙醇作为可再生清洁能源不仅可以代替四乙基铅作为汽油的防爆剂,还可以制造汽油醇.这一巨大的潜在需求促使人们去寻找提高乙醇工业生产率的途径,使人们着手于发酵工程的研究. ...
随机推荐
- Vue bus的使用(兄弟|非父子组件传值)-->可以使用一个空的Vue实例作为中央事件总线new Vue()
1.在main.js中注册全局的bus Vue.prototype.bus=new Vue(); 2.在组建中使用 子组建使用:this.bus.$emit('自定义事件名',data) metho ...
- Java多线程编程核心技术(一)Java多线程技能
1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...
- [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置
[翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置 原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET COR ...
- Google 宣布在 4 月 1 日关闭站内搜索
今春,Google 计划终止又一项产品,它就是“站内搜索”(Site Search)功能.这项产品主要出售给 web 出版商,让它们可以在自家网站内运用业内领先的搜索技术.虽然该公司并未公开宣布此事, ...
- H5 后代选择器
12-后代选择器 我是段落 我是段落 我是段落 我是段落 我是段落 我是段落 <!DOCTYPE html> <html lang="en"> <he ...
- 用PhoneGap创建第一个项目
1.在eclipse中新建Android Project2.在项目的目录下,建两个文件夹:/libs/assets/www3.进入将刚刚下载并解压的PhoneGap包里Anroid目录,我们需要的资源 ...
- Linux下php安装redis扩展(redis已经安装)
1. 下载需要的php操作redis的扩展包 (1).切换到 cd /usr/local/src (2). wget https://github.com/nicolasff/phpredis ...
- Elasticsearch的DSL之比较重要的几个查询语句
1. match_all { "match_all": {}} 匹配所有的, 当不给查询条件时,默认. 2. match 进行full text search或者exact va ...
- BOM、DOM
window对象 所有浏览器都支持window对象,他表示浏览器窗口. 全局变量是window对象的属性.全局函数是window对象的方法. window的常用方法: window.innerHeig ...
- 最全的Django入门及常用配置
Django 常用配置 Django 安装 pipx install django x 为python解释器版本2 or 3 如果你想安装指定版本的django,使用pip install djang ...