bibi218 | Pour etre un peu plus clair, voila ou ca coince ...
Code :
- void odeint(double ystart[], unsigned long nvar, double t1, double t2, double eps, double h1, double hmin, int *nok, int *nbad, void (*derivs)(double *,
- double *, unsigned long, double, double **, double **, unsigned long *), void (*rkqs)(double *, double *, unsigned long , double *, double , double , double *, double *, double
- *, void (*)(double *, double *, unsigned long, double, double **, double **, unsigned long *), double , double **, double
- **, unsigned long *), double dx, double **a, double **a1, unsigned long *indx)
- {
- unsigned long nstp,i,n;
- double tsav,t,hnext,hdid,h;
- double *yscal,*y,*dydt;
-
- n=nvar/4;
- yscal=dvector(1,nvar);
- y=dvector(1,nvar);
- dydt=dvector(1,nvar);
- t=t1;
- h=SIGN(h1,t2-t1);
- *nok = (*nbad) = kount = 0;
- for (i=1;i<=nvar;i++) y[i]=ystart[i];
- if (kmax > 0) tsav=t-dtsav*2.0; // stockage du premier pas
- for (nstp=1;nstp<=MAXSTP;nstp++) {
- (*derivs)(y,dydt,n,dx,a,a1,indx); ---> ca foire ici, la fonction marche quand je l'utilise a part, mais ici, j'ai du Nan qui apparait, avec les memes arguments en entree
- for (i=1;i<=nvar;i++) yscal[i]=fabs(y[i])+fabs(dydt[i]*h)+TINY2;
- if (kmax > 0 && kount < kmax-1 && fabs(t-tsav) > fabs(dtsav)) {
- tp[++kount]=t; // stockage des valeurs intermediaires
- for (i=1;i<=nvar;i++) yp[i][kount]=y[i]; tsav=t;
- }
- if ((t+h-t2)*(t+h-t1) > 0.0) h=t2-t; // si l'on sort du domaine, on reduit le pas
- (*rkqs)(y,dydt,n,&t,h,eps,yscal,&hdid,&hnext,derivs,dx,a,a1,indx);
- if (hdid == h) ++(*nok);
- else ++(*nbad);
- if ((t-t2)*(t2-t1) >= 0.0) {
- for (i=1;i<=nvar;i++) ystart[i]=y[i];
- if (kmax) {
- tp[++kount]=t; // sauvegarde des dernieres valeurs
- for (i=1;i<=nvar;i++) yp[i][kount]=y[i];
- }
- free_dvector(dydt,1,nvar);
- free_dvector(y,1,nvar);
- free_dvector(yscal,1,nvar);
- return;
- }
- if (fabs(hnext) <= hmin) nrerror("Step size too small in odeint" );
- h=hnext;
- }
- nrerror("Too many steps in routine odeint" );
- }
|
|