/*
解数值微分初值问题:
龙格-库塔法求前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++】龙格库塔+亚当姆斯求解数值微分初值问题的更多相关文章

  1. HTML给div设置百分比高度无效的解决方式 - 库塔姆斯 - CSDN博客

    原文:HTML给div设置百分比高度无效的解决方式 - 库塔姆斯 - CSDN博客 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/HobHunter ...

  2. MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

    MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...

  3. P1796 汤姆斯的天堂梦

    题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...

  4. 用python面向对象的方法实现欧拉算法和龙格库塔算法

    #!/bin/python3 # -*-coding:utf-8 -*- import math import numpy as np #定义一个欧拉算法的类,从而实现不同步长的引用 class Eu ...

  5. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...

  6. P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...

  7. 定步长的龙格库塔7(8)阶C++程序(RKF78)

    定步长,可以在稍微修改之后变为变步长形式,代码如下: void rkf78c( double h, double& T, vxd& X, double& err) { int ...

  8. matlab练习程序(龙格库塔法)

    非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以 ...

  9. Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用

    15.1 工业乙醇生产与计算机仿真 乙醇作为可再生清洁能源不仅可以代替四乙基铅作为汽油的防爆剂,还可以制造汽油醇.这一巨大的潜在需求促使人们去寻找提高乙醇工业生产率的途径,使人们着手于发酵工程的研究. ...

随机推荐

  1. Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar

    将rt.jar和jxl.jar,放在\apache-jmeter-5.0\lib\ext下面 import java.io.*; import java.util.ArrayList; import ...

  2. 【原创】研发应该懂的binlog知识(上)

    引言 为什么写这篇文章? 大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了.水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的 ...

  3. Ajax跨越问题原因分析与解决思路

    1.什么是AJAX跨域问题 简单来说,就是前端调用后端服务接口时 如果服务接口不是同一个域,就会产生跨域问题 2.AJAX跨域场景 前后端分离.服务化的开发模式 前后端开发独立,前端需要大量调用后端接 ...

  4. [2018福大至诚软工助教]alpha阶段小结

    [2018福大至诚软工助教]alpha阶段小结 一.得分 1. 冲刺(7次 Scrum) 150分 1)第1篇(25分) 项目 评分标准 各个成员在 Alpha 阶段认领的任务 (6分)视详细程度给分 ...

  5. 自己用习惯的idea快捷键笔记

    Ctrl + Space 自动完成(win10下冲突不能用,自己换成 Alt + \ ) 切换方法是菜单中依次打开 file -> settings -> keymap,搜索complet ...

  6. spring AOP源码分析(三)

    在上一篇文章 spring AOP源码分析(二)中,我们已经知道如何生成一个代理对象了,那么当代理对象调用代理方法时,增强行为也就是拦截器是如何发挥作用的呢?接下来我们将介绍JDK动态代理和cglib ...

  7. outline,box-shadow,border-radius小例子

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 【译】Six Open Source Dashboards to Organize Your Data

    作者:Ben Gregory on Jun 29, 2016   译者:carsonzhu 在天文学家看来,我们相信每个组织都可以从数据的正确集中,组织和清理中受益. 我们正在建立一个公司来做到这一点 ...

  9. llegalStateException: getWriter() has already been called for this response

    我使用Springmvc的处理器进行向AJAX传值时出现的问题 当我使用 PrintWriter out = response.getWriter();out.print("用户不存在,请先 ...

  10. python之路-列表、元组、range

    一 . 列表 # 列表的定义 列表就是能装对象的对象 在python中用[ ]来描述列表,内部元素用逗号隔开,对数据类型没有要求 索引和切片 lst = ["天龙八部", &quo ...