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

📄 fuchitu.c

📁 老虎吃兔子是一个典型的非线性系统
💻 C
字号:
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include <graphics.h>
#include<dos.h>
#include<conio.h>
void inisub(void);
void runsub(void);
void intsub(void);
void stosub(void);
void outsub(void);
void modsub(void);
void repsub(void);
void blot(void);
float t,t1,t2,t3,t4,t7;
int l3,j8,j9,n1,n2,n3,n4,n5,s;
float y[31],m[31],e[31],g[31],p[21],z[21],k[21][5],w[802][6],a[5];
int i,j,gdrive=VGA,gmode=VGAHI;
main()
{
  inisub();
	n1=2;n2=0;y[1]=600;y[2]=12000;n3=640;t1=6400;t2=10;
  do
  {
   if(l3!=1)
   {
     if(j8==1) exit(0);
     printf("Input total simulation time T1,step T2=");
 
	do
	{   j8=1;
	   
	   if(j8<0)
	      printf("wrong number entered.re-input J8=");
	 }while(j8<0);
	 if(j8>=2)
	 {
	    l3=1;
	    j9=j9+1;
	    if(j9>j8) exit(0);
	  }
	}
	else
	{
	 j9=j9+1;
	 if(j9>j8) exit(0);
	}
      
	printf("Input the values of parameters=");
	for(i=1;i<=n2;i++)
	   scanf("%f",&p[i]);
	printf("\n");
 	runsub();
	outsub();
	getch();
	blot();
       }while(1);
      }
      void runsub(void)
      {
	int i;
	for(i=1;i<=n1;i++)
	  z[i]=y[i];
	n4=1;
	 t=0.0;
	 t4=t1/(n3-1);
	 if(t2>=t4) t2=t4;
	 t3=t4;
	 t7=0.5*t2;
       modsub();
       stosub();
       do
       {
	 do intsub();while(t<t3);
	 n4++;
	 stosub();
	   t3=n4*t4;
	}while(t<t1);
	for(i=1;i<=n1;i++)
	   y[i]=z[i];
	}
	void inisub(void)
	{
	   int i,j;
	   for(i=0;i<=20;i++)
	   {
	       p[i]=0.0;
	       g[i]=0.0;
	       z[i]=0.0;
	       for(j=0;j<=4;j++)
	       {
		      k[i][j]=0.0;
		      a[j]=0.0;
		}
	    }
		t=0.0;
		l3=0.0;
		for(i=0;i<=30;i++)
		{
		   y[i]=0.0;
		   m[i]=0.0;
		   e[i]=0.0;
		 }
		 j9=0;
		 for(i=1;i<=801;i++)
		 {
		    for(j=0;j<=5;j++)
			w[i][j]=0.0;
		  }
	 }
	 void intsub(void)

	 {
	     int i;
	     for(i=1;i<=n1;i++)
	     {
		k[i][2]=g[i]*t7;
		k[i][1]=y[i];
		y[i]=k[i][1]+k[i][2];
	      }
	      t=t+t7;
	      modsub();
	      for(i=1;i<=n1;i++)
	      {
		  k[i][3]=g[i]*t7;
		  y[i]=k[i][1]+k[i][3];
	       }
	       modsub();
	       for(i=1;i<=n1;i++)
	       {
		   k[i][4]=g[i]*t2;
		   y[i]=k[i][1]+k[i][4];
		}
		t=t+t7;
		modsub();
		for(i=1;i<=n1;i++)
		     y[i]=k[i][1]+(2*k[i][2]+2*k[i][4]+4*k[i][3]+g[i]*t2)/6;
		modsub();
	  }
	  void stosub(void)
	  {
	      int i;
	      n5=n4-1;
	      w[n5][1]=t;
	      repsub();
	      for(i=1;i<=30;i++)
	      {
		if(y[i]>m[i]) m[i]=y[i];
		if(y[i]<e[i]) e[i]=y[i];
	       }
	       for(i=2;i<=5;i++)
		    w[n5][i]=a[i-1];
	  }

	  void outsub(void)
	  {
	     int i,j;

	     printf("Y[I]                 Y[I]max             Y[I]min\n");
	     for(i=1;i<=30;i++)
		if(m[i]!=0||e[i]!=0)
		     printf("%2d          %15.5f              %15.5f\n",i,m[i],e[i]);
	     printf("SIMULATION STEP T2=%15.5f\n",t2);
	     printf("    T     A[1]       A[2]       A[3]        A[4]\n");
	     for(i=0;i<=n5;i++)
	     {
		for(j=1;j<=5;j++)
		    printf("%13.5f",w[i][j]);
		printf("\n");
	      }
	   }


	   void modsub(void)
	   {
	     g[1]=-0.01*y[1]+0.000001*y[1]*y[2];
	     g[2]=0.001*y[2]-0.000002*y[1]*y[2];
	
	   }

	  void repsub(void)
	  {
	        a[1]=y[1];
	        a[2]=y[2];
		a[3]=g[1];
		a[4]=g[2];
	   }

	void blot()
	{	
            double i=0;j=1;		
	    initgraph(&gdrive,&gmode,".\\bgi");	
	    delay(2000);
	    for(i=0;i<=203;i++)
		{
		   y[6]=y[6]+w[i][2];
		   y[5]=y[5]+w[i][3];
		}
		   y[7]=y[5]/203;
		   y[8]=y[6]/203;
	    for(i=0;i<=639;i++)
		{
		  setcolor(GREEN);
		  moveto(i,y[7]/65);
		  lineto(i,y[7]/65+1);
		  setcolor(YELLOW);
		  moveto(i,200+y[8]/5);
		  lineto(i,200+y[8]/5+1);
		}
	   for(i=0;i<=800;i++)
	      {
		 setcolor(RED);
		  moveto(i,(int)(w[i][3]/50)-50);
		 lineto(i,(int)(w[i][3]/50)+1-50);
		 setcolor(WHITE);
		 moveto(i,200+(int)(w[i][2]/5));
		 lineto(i,200+(int)(w[i][2]/5)+1);
	      }
	
	      getch();
         }















⌨️ 快捷键说明

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