- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
求解ODE常微分方程的C程序数值解法
求解ODE(常微分方程)的C程序(数值解法)
将(Ieuler Rkutta gear IMRK63 Adambm Hamming VSRK4)放入TC2.0 的Include文件夹中后,执行TEXT程序即可
TEXT Ieuler Rkutta gear IMRK63 Adambm Hamming VSRK4
/*主程序TEXT*/
double Y_initial=3.0; /*初始条件y(0),作为外部变量*/
int N=11; /*节点数N,也作为外部变量*/
#include stdio.h
#include math.h
#include stdlib.h/*以上3个均为系统提供的库函数头文件*/
#include IEULER.C
#include RKUTTA.C
#include GEAR.C
#include IMRK63.C
#include ADAMBM.C
#include HAMMING.C
#include VSRK4.C/*以上7个均为程序开发人员(我)自定义的函数,即7种算法*/
double f( double x, double y ) /*Dy/Dx=f(x,y)中的f(x,y)*/
{
double f;
f=x;
return(f);
}
void g( double x, double y, double ffd[2] )
{
ffd[0]=y*y+x*x; /* Dy/Dx=f(x,y)中的f(x,y)*/
ffd[1]=2.0*y; /*对f(x,y)再关于y求导*/
}
main()
{
int iter;
double X_max=2.0,X_min=1.0,Y[81];
int method;
void adam( double x_min,double x_max,double y[]);
void gear( double x_min,double x_max,double y[]);
void hamming( double x_min,double x_max,double y[]);
void ieuler( double x_min,double x_max,double y[]);
void imrk( int iter, double x_min,double x_max,double y[]);
void rkutta(double x_min,double x_max,double y[]);
void vsrk4(double x_min,double x_max,double y[]);
double f( double x, double y);
printf(Which method do you want,1.Euler,2.Runge-Kutta,3.gear,4.imrkutta,5.adams, 6.hamm-ing or 7.VSRK4?\n);
scanf (%d,method);
switch(method)
{
case 1: ieuler(X_min,X_max,Y); break;
case 2: rkutta(X_min,X_max,Y); break;
case 3: gear(X_min,X_max,Y); break;
case 4: { printf(please input the step in Newton method, which is needed in implict RungeKutta:\n );
scanf(%d,iter) ;
imrk(iter,X_min,X_max,Y);break;
}
case 5: adambm(X_min,X_max,Y); break;
case 6: hamming(X_min,X_max,Y); break;
case 7: vsrk4(X_min,X_max,Y); break;
default:printf(error\n);
}
}
/*IEULER算法*/
#include stdio.h
#include stdlib.h
#include math.h
extern double f( double x, double y );
extern doub
文档评论(0)