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

📄 ex5.c

📁 multipleshooting to find the roots of the non-linear functions
💻 C
字号:
#include <stdio.h>#include <math.h>#include <stdlib.h>#include "math_util.h"#define M 10.0#define D 5.0#define L 5.0#define In 12.0long double alpha;main(){   char file_name[12];   FILE *output_file, *input_file;   extern long double alpha;   int itt, n, m, ms, i, j, k, ierr;   long double tend, **yout, **zout, *time, tol;   void dyn( long double *, long double *, long double *, long double * );   void dynbc( long double *, long double *, long double * );   void dynjac( long double *, long double *, long double **, long double **, long double **, long double ** );   void dyndbc( long double *, long double *, long double **, long double ** );   int mshoot_dae( long double **, long double **, long double *, int, int,         int, long double, void(*)(), void(*)(), void(*)(), void(*)() );      n = 12;   m = 4;   ms = 21;   time = a1d_allo_dbl( ms );   yout = a2d_allo_dbl( ms, n );   zout = a2d_allo_dbl( ms, m );   tol = 1.0e-3;   tend = 5.0;   alpha =1.0e-3;        mat_null( yout, ms, n );   mat_null( zout, ms, m );   for( i = 0; i < ms; i++ ) {      time[i] = i*tend/(ms-1);      printf("%Le %Le %Le %Le %Le %Le\n",time[i],yout[i][0],yout[i][1],yout[i][2],yout[i][3],zout[i][0]);      }      itt=0;   while( itt < 9) {      sprintf(file_name,"tpbvl_%d",itt++);      output_file = fopen(file_name,"w");      if( output_file == NULL ) {         printf("ERROR unable to open output file\n");         exit(1);      }      ierr = mshoot_dae( yout, zout, time, n, m, ms, tol, dyn, dynjac, dynbc, dyndbc );      if( ierr != 0 )         break;      for( i = 0; i < ms; i++ ) {         fprintf(output_file,"%Le\t",time[i]);         for( j = 0; j < n; j++ )            fprintf(output_file,"%Le\t",yout[i][j]);         for( j = 0; j < m; j++ )            fprintf(output_file,"%Le\t",zout[i][j]);         fprintf(output_file,"\n");      }      i=ms-1;      printf("%Le %Le %Le %Le %Le %Le\n",time[i],yout[i][0],yout[i][2],yout[i][4],zout[i][0],zout[i][1]);             fclose( output_file );         alpha *= 5.0;      }}void dynbc( sy0, syms, r )long double *sy0, *syms, *r;{   extern long double alpha;      r[0] = sy0[0];   r[1] = sy0[1];   r[2] = sy0[2];   r[3] = sy0[3];   r[4] = sy0[4];   r[5] = sy0[5];   r[6] = syms[6]-alpha*(syms[0]-4.0);   r[7] = syms[7]-alpha*syms[1];   r[8] = syms[8]-alpha*(syms[2]-4.0);   r[9] = syms[9]-alpha*syms[3];   r[10] = syms[10]-alpha*(syms[4]-0.785398164);   r[11] = syms[11]-alpha*syms[5];}void dyn( y, z, f, g )long double *y, *z, *f, *g;{   long double s4, c4;      s4 = sin(y[4]);   c4 = cos(y[4]);      f[0] =  y[1];   f[1] =  ((z[0]+z[2])*c4-(z[1]+z[3])*s4)/M;   f[2] =  y[3];   f[3] =  ((z[0]+z[2])*s4+(z[1]+z[3])*c4)/M;   f[4] =  y[5];   f[5] =  ((z[0]+z[2])*D+(-z[1]+z[3])*L)/In;   f[6] =  0.0;   f[7] = -y[6];   f[8] =  0.0;   f[9] = -y[8];   f[10] =  y[7]*f[3]-y[9]*f[1];   f[11] = -y[10];   g[0] =  y[7]*c4/M + y[9]*s4/M + y[11]*D/In + z[0];   g[1] = -y[7]*s4/M + y[9]*c4/M - y[11]*L/In + z[1];   g[2] =  y[7]*c4/M + y[9]*s4/M + y[11]*D/In + z[2];   g[3] = -y[7]*s4/M + y[9]*c4/M + y[11]*L/In + z[3];}void dyndbc( sy0, syms, a, b )long double *sy0, *syms, **a, **b;{   extern long double alpha;   int i;      mat_null( a, 12, 12 );   mat_null( b, 12, 12 );      for(i=0;i<6;i++) {      a[i][i]=1.0;      b[i+6][i]=-alpha;      b[i+6][i+6]=1.0;   }}void dynjac( y, z, fy, fz, gy, gz )long double *y, *z, **fy, **fz, **gy, **gz;{   long double s4, c4;   int n = 12, m = 4;   void mat_null( long double **, int, int );        mat_null( fy, n, n );   mat_null( fz, n, m );   mat_null( gy, m, n );   mat_null( gz, m, m );         s4 = sin(y[4]);   c4 = cos(y[4]);      fy[0][1] =  1.0;   fy[1][4] = -((z[0]+z[2])*s4+(z[1]+z[3])*c4)/M;   fy[2][3] =  1.0;   fy[3][4] =  ((z[0]+z[2])*c4-(z[1]+z[3])*s4)/M;   fy[4][5] =  1.0;   fy[7][6] = -1.0;   fy[9][8] = -1.0;   fy[10][4] =  y[7]*(((z[0]+z[2])*c4-(z[1]+z[3])*s4)/M)+y[9]*(((z[0]+z[2])*s4+(z[1]+z[3])*c4)/M);   fy[10][7] =  ((z[0]+z[2])*s4+(z[1]+z[3])*c4)/M;   fy[10][9] = -((z[0]+z[2])*c4-(z[1]+z[3])*s4)/M;   fy[11][10] = -1.0;      fz[1][0] = c4/M;fz[1][2] = fz[1][0];   fz[1][1] = -s4/M;fz[1][3] = fz[1][1];   fz[3][0] = s4/M;fz[3][2] = fz[3][0];   fz[3][1] = fz[1][0];fz[3][3] = fz[1][0];   fz[5][0] = D/In;fz[5][2] = fz[5][0];   fz[5][1] = -L/In;   fz[5][3] = L/In;   fz[10][0] = y[7]*s4/M-y[9]*c4/M;fz[10][2]=fz[10][0];   fz[10][1] = y[7]*c4/M+y[9]*s4/M;fz[10][3]=fz[10][1];      gy[0][4]=-y[7]*s4/M + y[9]*c4/M;   gy[0][7]=c4/M;   gy[0][9]=s4/M;   gy[0][11]=D/In;   gy[1][4]=-y[7]*c4/M - y[9]*s4/M;   gy[1][7]=-s4/M;   gy[1][9]=c4/M;   gy[1][11]=-L/In;   gy[2][4]=-y[7]*s4/M + y[9]*c4/M;   gy[2][7]=c4/M;   gy[2][9]=s4/M;   gy[2][11]=D/In;   gy[3][4]=-y[7]*c4/M - y[9]*s4/M;   gy[3][7]=-s4/M;   gy[3][9]=c4/M;   gy[3][11]=L/In;      gz[0][0]=1.0;gz[1][1]=1.0;gz[2][2]=1.0;gz[3][3]=1.0;   }

⌨️ 快捷键说明

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