/*
解数值微分初值问题:
龙格-库塔法求前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]);
} }

最新文章

  1. JSON Accelerator真是个好东西...
  2. mininet和ryu控制器的连接
  3. Android 手机卫士--md5加密过程
  4. C# Questions
  5. 数据库(SQL SERVER)常用知识点
  6. PHP无限极分类生成树方法,无限分级
  7. Pull解析器学习
  8. 【转载】.NET面试题系列[0] - 写在前面
  9. Eclipse的maven构建一个web项目,以构建SpringMVC项目为例
  10. 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法
  11. 关于jstl的问题:The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed
  12. Jenkins代码管理
  13. Javscript的函数链式调用基础篇
  14. Mac 电脑前端环境配置
  15. Python-Django基础
  16. constructor C++ example
  17. C# 使用三层架构实例演示-winForm 窗体登录功能
  18. 【Java】 剑指offer(25) 合并两个排序的链表
  19. angular ng-repeat点击切换样式,浅谈track by $index
  20. AngularJS学习笔记(一)走近AngularJS

热门文章

  1. Materialized View模式
  2. APM实践目录
  3. 正确理解Handle对象
  4. 小P的金字塔
  5. 移动web、webApp、混合APP、原生APP、androd H5混合开发 当无网络下,android怎么加载H5界面
  6. 如何命名Java变量
  7. pinpoint vs druid
  8. c++ 单引号&quot;字符串&quot; 用法
  9. MySQL数据性能优化-修改方法与步骤
  10. javascript内置函数:toString()