📄 ex7.c
字号:
#include <stdio.h>#include <stdlib.h>#include <math.h>#include "math_util.h"main(){ FILE *output_file, *input_file; int 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 dynjac( long double *, long double *, long double **, long double **, long double **, long double ** ); void dynbc( 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 = 4; m = 1; ms = 21; time = a1d_allo_dbl( ms ); yout = a2d_allo_dbl( ms, n ); zout = a2d_allo_dbl( ms, m ); tol = 1.0e-4; tend = 1.0; output_file = fopen("ex7.dat","w"); if( output_file == NULL ) { printf("ERROR unable to open output file\n"); exit(1); } for( i = 0; i < ms; i++ ) { time[i] = i*tend/(ms-1); yout[i][0] = 0.0; yout[i][1] = 1.0; yout[i][2] = 1.0; yout[i][3] = 2.0; zout[i][0] = 0.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]); } ierr = mshoot_dae( yout, zout, time, n, m, ms, tol, dyn, dynjac, dynbc, dyndbc ); 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"); } fclose( output_file ); }void dynbc( sy0, syms, r )long double *sy0, *syms, *r;{ extern long double alpha; r[0] = sy0[0]; r[1] = sy0[1]; r[2] = syms[0]-2.0; r[3] = syms[1]-2.0;}void dyndbc( sy0, syms, a, b )long double *sy0, *syms, **a, **b;{ extern long double alpha; mat_null( a, 4, 4 ); mat_null( b, 4, 4 ); a[0][0] = 1.0; a[1][1] = 1.0; b[2][0] = 1.0; b[3][1] = 1.0;}void dyn( y, z, f, g )long double *y, *z, *f, *g;{ f[0] = y[1]; f[1] = -y[0]+(1.0-y[0]*y[0])*y[1] + z[0]; f[2] = -2.0*y[0]+y[3]+2.0*y[0]*y[1]*y[3]; f[3] = -y[1]-y[2]-y[3]*(1.0-y[0]*y[0]); g[0] = y[3]+z[0];}void dynjac( y, z, fy, fz, gy, gz )long double *y, *z, **fy, **fz, **gy, **gz;{ int n = 4, m = 1; mat_null( fy, n, n ); mat_null( fz, n, m ); mat_null( gy, m, n ); mat_null( gz, m, m ); fy[0][1] = 1.0; fy[1][0] = -1.0-2.0*y[0]*y[1]; fy[1][1] = 1.0-y[0]*y[0]; fy[2][0] = -2.0+2.0*y[1]*y[3]; fy[2][1] = 2.0*y[0]*y[3]; fy[2][3] = 1.0+2.0*y[0]*y[1]; fy[3][0] = 2.0*y[0]*y[3]; fy[3][1] = -1.0; fy[3][2] = -1.0; fy[3][3] = 1.0-y[0]*y[0]; fz[1][0] = 1.0; gy[0][3] = 1.0; gz[0][0] = 1.0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -