最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

龙格库塔算法解微分方程组 c语言

来源:动视网 责编:小OO 时间:2025-09-24 13:03:41
文档

龙格库塔算法解微分方程组 c语言

/***************************************************************************Thisprogramistosolvetheinitialvalueproblemoffollowingsystemofdifferentialequations:dx/dt=x+2*y,x(0)=0,dy/dt=2*x+y,y(0)=2,x(0.2)andy(0.2)aretobecalculated********************
推荐度:
导读/***************************************************************************Thisprogramistosolvetheinitialvalueproblemoffollowingsystemofdifferentialequations:dx/dt=x+2*y,x(0)=0,dy/dt=2*x+y,y(0)=2,x(0.2)andy(0.2)aretobecalculated********************
/***************************************************************************

This program is to solve the initial value problem of following system 

of differential equations:

dx/dt=x+2*y,x(0)=0,

dy/dt=2*x+y,y(0)=2, 

x(0.2) and y(0.2) are to be calculated

****************************************************************************/

#include

#include

#define steplength 0.1 //步?长¡è可¨¦根¨´据Y需¨¨要°a调Ì¡Â整?;

#define FuncNumber 2 //FuncNumber为a微¡é分¤?方¤?程¨¬的Ì?数ºy目?;

void main()

{

    float x[200],Yn[20][200],reachpoint;int i;

    x[0]=0;Yn[0][0]=0;Yn[1][0]=2;        //初?值¦Ì条¬?件t;

    reachpoint=0.2;                      //所¨´求¨®点Ì?可¨¦根¨´据Y需¨¨要°a调Ì¡Â整?;

    void rightfunctions(float x ,float *Auxiliary,float *Func);

    void Runge_Kutta(float *x,float reachpoint, float(*Yn)[200]);

    Runge_Kutta(x ,reachpoint, Yn);

    printf("x  ");

    for(i=0;i<=(reachpoint-x[0])/steplength;i++)

        printf("%f ",x[i]);

    printf("\\nY1 ");

    for(i=0;i<=(reachpoint-x[0])/steplength;i++)

        printf("%f ",Yn[0][i]);

    printf("\\nY2 ");

    for(i=0;i<=(reachpoint-x[0])/steplength;i++)

        printf("%f ",Yn[1][i]);

    getchar();

}

void rightfunctions(float x ,float *Auxiliary,float *Func)//当Ì¡À右®¨°方¤?程¨¬改?变À?时º¡À,ê?需¨¨要°a改?变À?;

{   

    Func[0]=Auxiliary[0]+2*Auxiliary[1];

    Func[1]=2*Auxiliary[0]+Auxiliary[1];

}

void Runge_Kutta(float *x,float reachpoint, float(*Yn)[200])

{

    int i,j;

    float Func[FuncNumber],K[FuncNumber][4],Auxiliary[FuncNumber];

        for(i=0;i<=(reachpoint-x[0])/steplength;i++)

    {   

        for(j=0;j            Auxiliary[j]=*(Yn[j]+i);

        rightfunctions(x[i],Auxiliary,Func);    

        for(j=0;j        {

            K[j][0]=Func[j];   

            Auxiliary[j]=*(Yn[j]+i)+0.5*steplength*K[j][0];

        }

        rightfunctions(x[i],Auxiliary,Func);

        for(j=0;j        {

            K[j][1]=Func[j];

            Auxiliary[j]=*(Yn[j]+i)+0.5*steplength*K[j][1];

        }

        rightfunctions(x[i],Auxiliary,Func);

        for(j=0;j        {

            K[j][2]=Func[j]; 

            Auxiliary[j]=*(Yn[j]+i)+steplength*K[j][2];

        }

        rightfunctions(x[i],Auxiliary,Func);

        for(j=0;j            K[j][3]=Func[j];

        for(j=0;j        Yn[j][i+1]=Yn[j][i]+(K[j][0]+2*K[j][1]+2*K[j][2]+K[j][3])*steplength/6.0;

        x[i+1]=x[i]+steplength;

    }

}

文档

龙格库塔算法解微分方程组 c语言

/***************************************************************************Thisprogramistosolvetheinitialvalueproblemoffollowingsystemofdifferentialequations:dx/dt=x+2*y,x(0)=0,dy/dt=2*x+y,y(0)=2,x(0.2)andy(0.2)aretobecalculated********************
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top