阿当姆斯校正程序代码MATLAB,全区间积分的阿当姆斯预报校正法(常微分方程组的求解)...
/*
代码作者:不详
代码整理者:设计天下 MySDN网站 算法天下工作室
功能:全区间积分的阿当姆斯预报校正法(常微分方程组的求解)
*/
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
/*全区间积分的定步长欧拉方法*/
/*全区间积分的维梯方法*/
/*全区间积分的定步长龙格-库塔方法*/
typedef struct _fode {
int n; /*微分方程组中方程个数,也是未知函数的个数*/
int steps; /*积分步数(包括起始点这一步)*/
double lens; /*积分的步长*/
double t; /*对微分方程进行积分的起始点 */
double *y; /*存放n个未知函数在起始点t处的函数值*/
double *z; /*返回steps个积分点(包括起始点)上的未知函数值*/
void (*ptr)(); /*指向计算微分方程组中各方程右端函数值的函数名(由用户自编)*/
} FODE, *FODEP;
/*全区间积分的变步长默森方法*/
/*全区间积分的双边法*/
/*全区间积分的阿当姆斯预报校正法*/
/*全区间积分的哈明方法*/
typedef struct _fode2 {
int n; /*微分方程组中方程个数,也是未知函数的个数*/
int steps; /*积分步数(包括起始点这一步)*/
double lens; /*积分的步长*/
double eps; /*控制精度要求*/
double t; /*对微分方程进行积分的起始点 */
double *y; /*存放n个未知函数在起始点t处的函数值*/
double *z; /*返回steps个积分点(包括起始点)上的未知函数值*/
void (*ptr)(); /*指向计算微分方程组中各方程右端函数值的函数名(由用户自编)*/
} FODE2, *FODE2P;
/*积分一步的特雷纳方法*/
typedef struct _tlode {
int n; /*微分方程组中方程个数,也是未知函数的个数*/
double lens; /*积分的步长*/
double t; /*对微分方程进行积分的起始点 */
double *y; /*存放n个未知函数在起始点t处的函数值。返回t+lens点处的n个未知函数值*/
void (*ptr)(); /*指向计算微分方程组中各方程右端函数值的函数名(由用户自编)*/
} TODE, *TODEP;
/*积分一步的变步长欧拉方法*/
/*积分一步的变步长龙格-库塔方法*/
/*积分一步的连分式法*/
typedef struct _eode {
int n; /*微分方程组中方程个数,也是未知函数的个数*/
double lens; /*积分的步长*/
double eps; /*积分的精度要求*/
double t; /*对微分方程进行积分的起始点 */
double *y; /*存放n个未知函数在起始点t处的函数值。返回t+lens点处的n个未知函数值*/
void (*ptr)(); /*指向计算微分方程组中各方程右端函数值的函数名(由用户自编)*/
} EODE, *EODEP;
/*积分一步的变步长基尔方法*/
typedef struct _eode2 {
int n; /*微分方程组中方程个数,也是未知函数的个数*/
double lens; /*积分的步长*/
double eps; /*积分的精度要求*/
double t; /*对微分方程进行积分的起始点 */
double *y; /*存放n个未知函数在起始点t处的函数值。返回t+lens点处的n个未知函数值*/
double *q; /*在主函数第一次调用本函数时,应赋值0,
以后每调用一次函数(即每积分一步),将由本函数的返回值以便循环使用。*/
void (*ptr)(); /*指向计算微分方程组中各方程右端函数值的函数名(由用户自编)*/
} EODE2, *EODE2P;
/*二阶微分方程边值问题的数值解法*/
typedef struct _dode {
int n; /*求解区间[a,b]的等分点数(包括左端点a与右端点b)*/
double a; /*求解区间的左端点*/
double b; /*求解区间的右端点求*/
double ya; /*未知函数在求解区间左端点处的函数值y(a)*/
double yb; /*未知函数在求解区间右端点处的函数值y(b)*/
double *y; /*返回n个等距离散点上的未知函数值*/
void (*ptr)(); /*指向计算二阶微分方程中函数值的函数名(由用户自编)*/
} DODE, *DODEP;
void adams_method_lis(int n,double eps,double t,double lens,double y[],void (*ptr)())
{
int m,i,j,k;
double hh,p,dt,x,tt,q,a[4],*g,*b,*c,*d,*e;
g=malloc(n*sizeof(double));
b=malloc(n*sizeof(double));
c=malloc(n*sizeof(double));
d=malloc(n*sizeof(double));
e=malloc(n*sizeof(double));
hh=lens;
m=1;
x=t;
for (i=0; i
{
c[i]=y[i];
}
do
{
a[1]=a[0]=hh/2.0;
a[3]=a[2]=hh;
for (i=0; i
{
g[i]=y[i];
y[i]=c[i];
}
dt=lens/m; t=x;
for (j=0; j
{
(*ptr)(t,y,n,d);
for (i=0; i
{
b[i]=y[i];
e[i]=y[i];
}
for (k=0; k<=2; k++)
{
for (i=0; i
{
y[i]=e[i]+a[k]*d[i];
b[i]+=a[k+1]*d[i]/3.0;
}
tt=t+a[k];
(*ptr)(tt,y,n,d);
}
for (i=0; i
{
y[i]=b[i]+hh*d[i]/6.0;
}
t+=dt;
}
p=0.0;
for (i=0; i
{
q=fabs(y[i]-g[i]);
if (q>p)
{
p=q;
}
}
hh/=2.0;
m<<=1;
}
while (p>=eps) ;
/*释放动态分配的内存*/
free(g);
free(b);
free(c);
free(d);
free(e);
return;
}
void adams_lis(FODE2P ap)
{
int n,steps,i,j,m;
double lens,eps,t,t0,q;
double *b,*e,*s,*g,*d,*y,*z;
n=ap->n;
steps=ap->steps;
b=malloc(4*n*sizeof(double));
e=malloc(n*sizeof(double));
s=malloc(n*sizeof(double));
g=malloc(n*sizeof(double));
d=malloc(n*sizeof(double));
lens=ap->lens;
eps=ap->eps;
y=ap->y;
z=ap->z;
t0=t=ap->t;
for (i=0; i
{
z[i*steps]=y[i];
}
(*ap->ptr)(t,y,n,d);
for (i=0; i
{
b[i]=d[i];
}
for (i=1; i<4; i++)
{
if (i
{
t=t0+i*lens;
adams_method_lis(n,eps,t,lens,y,ap->ptr);
for (j=0; j
{
z[j*steps+i]=y[j];
}
(*ap->ptr)(t,y,n,d);
for (j=0; j
{
b[i*n+j]=d[j];
}
}
}
for (i=4; i
{
for (j=0; j
{
q=55.0*b[3*n+j]-59.0*b[2*n+j];
q=q+37.0*b[n+j]-9.0*b[j];
y[j]=z[j*steps+i-1]+lens*q/24.0;
b[j]=b[n+j];
b[n+j]=b[2*n+j];
b[2*n+j]=b[3*n+j];
}
t=t0+i*lens;
(*ap->ptr)(t,y,n,d);
for (m=0; m
{
b[3*n+m]=d[m];
}
for (j=0; j
{
q=9.0*b[3*n+j]+19.0*b[n+n+j]-5.0*b[n+j]+b[j];
y[j]=z[j*steps+i-1]+lens*q/24.0;
z[j*steps+i]=y[j];
}
(*ap->ptr)(t,y,n,d);
for (m=0; m
{
b[3*n+m]=d[m];
}
}
/*释放动态分配的内存*/
free(b);
free(e);
free(s);
free(g);
free(d);
return;
}
void adams_ptr_lis(double t,double y[],int n,double d[])
{
t=t;
n=n;
d[0]=2.0*y[1];
d[1]=-2.0*y[0];
d[2]=-2.0*y[2];
return;
}
int main()
{
double y[3] = {0.0, 1.0, 2.0};
double z[3][11]={0};
FODE2 fa = {3, 11, 0.1, 0.0001, 0.0, y, (double*)z, adams_ptr_lis};
int i,j;
adams_lis(&fa); printf("/n"); for (i=0; i<11; i++) { printf("t=%7.3f/n",i*fa.lens); for (j=0; j<3; j++) { printf("y(%d)=%e ",j,z[j][i]); } printf("/n"); } printf("/n"); return 0;}
阿当姆斯校正程序代码MATLAB,全区间积分的阿当姆斯预报校正法(常微分方程组的求解)...相关推荐
- 阿当姆斯校正程序代码MATLAB,数值分析实验教程.doc
数值分析实验教程.doc 第二篇数值分析3第1章绪论4112的平方根计算412计算效率探讨5实验题7第2章插值法821拉格朗日插值多项式的存在性822利用拉格朗日插值多项式计算函数值823差商表构造1 ...
- fick第二定律matlab求解,(最新整理)实验二MATLAB数值计算常微分方程(组)的求解
<(最新整理)实验二MATLAB数值计算常微分方程(组)的求解>由会员分享,可在线阅读,更多相关<(最新整理)实验二MATLAB数值计算常微分方程(组)的求解(19页珍藏版)> ...
- matlab小游戏程序代码,Matlab有趣代码
% 最炫民族风 fs = 44100; % sample rate dt = 1/fs; T16 = 0.125; t16 = [0:dt:T16]; [temp k] = size(t16); t4 ...
- matlab做pca程序,PCA 程序代码 matlab版
1.eigenface_example.m(主程序) % load function files from subfolders aswell addpath (genpath ('.')); % l ...
- 常微分方程求解在MATLAB,MatLab常微分方程及常微分方程组的求解
最近参加了数学建模,对于老师说的Euler算法的不同步长的精度不一样,编写了一个M函数文件来实现这个精度的比较,把函数附上: function [x,y]= Euler(varargin) %这里使用 ...
- matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx
Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...
- 文字细化算法matlab,[转载](转)二值图像的细化算法和源程序代码(Matlab)
二值图像的细化算法和源程序代码(Matlab) 有关图像细化算法,从方法上有很多,具体请参看各图像处理的经典教材,但有一本书,我记得是大概1980年代科学出版社出版的,是著名的Pavlidis编著,并 ...
- matlab求解方程小程序,自学Matlab必备的60个小程
压缩包 : fec98ab43dae9de3a0650566f4ded07.rar 列表 自学Matlab必备的60个小程序代码/2017最新MATLAB从入门到精通第二期.pdf 自学Matlab必 ...
- 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc
常微分方程和常微分方程组的求解 ? 一.实验目的: 熟悉Matlab软件中关于求解常微分方程和常微分方程组的各种命令,掌握利用Matlab软件进行常微分方程和常微分方程组的求解. ? 二.相关知识 在 ...
最新文章
- 这51个大数据术语,你懂的有几个?
- DOS 循环 FOR
- WPF 自定义控件的坑(蠢的:自定义控件内容不显示)
- 有关SQL server connection Keep Alive 的FAQ(2)
- python3猜数字小游戏代码示例
- CRMEB Dockerfile文件
- 【Boost】boost库中function和bind一起使用的技巧(一)
- java导出mysql数据库失败_利用Java进行MySql数据库的导入和导出
- C++ cin 实现循环读入
- Python操作MongoDB - 极简教程
- 微信公众号开发之获取用户信息
- 多片段时序数据建模预测实践
- 互联网产品需求管理思考——统一需求管理
- android投屏功能开发,Android PC投屏功能实现的示例代码
- 告别晦涩难懂的物理,《张朝阳的物理课》了解一下
- 0068-【数据质控】-Illumina的Barcode的设计用于16S测序
- Abp Wcf结合使用问题
- 图片pdf合并软件:合并的方法介绍
- shell脚本中的空格
- php mysql md5加密_php 用户密码MD5加密存入数据库问题//
热门文章
- android测试和web测试的区别,【分享】Web测试与App测试之间的区别
- 3分钟Tips:用大白话告诉你什么是低耦合|高内聚
- 计算机应用基础案例教程习题答案,新编计算机应用基础案例教程上机指导与习题集(朱尽蓉)-习题答案.doc...
- 电子电路 专业术语表 英汉对照
- Eclipse 的 Debug 介绍与技巧
- 开发ASP.NET博客的第四步——用VS2005建立解决方案(一)(转)
- [CKA]考试之K8s 版本升级
- rate和ratio在用法上的区别(转)
- OpenCV--Python 图像增强(线性变换,直方图正规化,伽马变换,全局直方图均衡化,限制对比度的自适应直方图均衡化)
- Java高级-09【Map】