⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ok.c

📁 本方程为二阶边值问题的数值算法之打靶法计算
💻 C
字号:
/*********************************************************************
 *本方程为二阶边值问题的数值算法之打靶法计算
 
 *程序在Dev-C++ 4.9.8.0下编译成功 
 
 *本程序在windows xp pro 下运行成功
 **********************************************************************/
 
 
#include  "stdio.h"

#define  M  100

void init_step(void);
void ans_display(void);
void compute(int flag);

  double a=1;
  double h=0.1;
  double lambda=0.5,tau,T,N,J;
  double xj[400],u0j[400],u1j[400];
  int j,n;
  
int main()
{
  int a,b,N;
  double e,h,Tk;
  double z1,z2,bata_arfa,y1[400],y2[400],x[100];
  int k=1,i;
  double k11,k12,k21,k22,k31,k32,k41,k42,k011,k012,k021,k022,k031,k032,k041,k042;
  b=0;a=-1,e=0.05;
  bata_arfa=8;
  N=100;
  h=(double)(b-a)/N;
  /* printf("h= %lf\n",h);*/
  Tk=bata_arfa/(b-a);
      /*计算前半个方程的算法*/
      y1[0]=0;y2[0]=Tk;z1=0;z2=1;
      for(i=0;i<N+1;i++)
      {
         x[i]=a+i*h;
         k11=h*y2[i];
         k12=h*(-42*x[i]*x[i]*x[i]*x[i]*x[i]*x[i]+1);
         k21=h*(y2[i]+0.5*k12);
         k22=h*(-42*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)+1);
         k31=h*(y2[i]+0.5*k22);
         k32=h*(-42*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)+1);
         k41=h*(y2[i]+k32);
         k42=h*(-42*(x[i]+h)*(x[i]+h)*(x[i]+h)*(x[i]+h)*(x[i]+h)+1);
         y1[i+1]=y1[i]+(k11+2*k21+2*k31+k41)/6;
         y2[i+1]=y2[i]+(k12+2*k22+2*k32+k42)/6;

         k011=h*z2;
         k012=0;
         k021=h*(z2+0.5*k012);
         k022=0;
         k031=h*(z2+0.5*k022);
         k032=0;
         k041=h*(z2+k032);
         k042=0;
         z1=z1+(k011+2*k021+2*k031+k041)/6;
         z2=z2+(k012+2*k022+2*k032+k042)/6;
     }
           for(i=0;i<N+1;i++)
           printf("%f,\t %f\n",x[i],y1[i]);

      b=0;a=1;
      bata_arfa=-9;
      h=(double)(b-a)/N;
      Tk=bata_arfa/(b-a);

	  /*计算后半个方程的算法*/
      y1[0]=0;y2[0]=Tk;z1=0;z2=1;
      for(i=0;i<N;i++)
      {
         x[i]=a+i*h;
         k11=h*y2[i];
         k12=h*(42*x[i]*x[i]*x[i]*x[i]*x[i]*x[i]+2);
         k21=h*(y2[i]+0.5*k12);
         k22=h*(42*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)+2);
         k31=h*(y2[i]+0.5*k22);
         k32=h*(42*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)*(x[i]+h/2)+2);
         k41=h*(y2[i]+k32);
         k42=h*(42*(x[i]+h)*(x[i]+h)*(x[i]+h)*(x[i]+h)*(x[i]+h)+2);
         y1[i+1]=y1[i]+(k11+2*k21+2*k31+k41)/6;
         y2[i+1]=y2[i]+(k12+2*k22+2*k32+k42)/6;

         k011=h*z2;
         k012=0;
         k021=h*(z2+0.5*k012);
         k022=0;
         k031=h*(z2+0.5*k022);
         k032=0;
         k041=h*(z2+k032);
         k042=0;
         z1=z1+(k011+2*k021+2*k031+k041)/6;
         z2=z2+(k012+2*k022+2*k032+k042)/6;
        }
           for(i=N-1;i>=0;i--)
           printf("%f,\t %f\n",x[i],y1[i]);

  getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -