📄 shootf.c
字号:
void shootf(nvar,v1,v2,delv1,delv2,n1,n2,x1,x2,xf,eps,h1,hmin,f,dv1,dv2)
int nvar,n1,n2;
float v1[],v2[],delv1[],delv2[],x1,x2,xf,eps,h1,hmin,f[],dv1[],dv2[];
{
int nok,nbad,j,iv,i,*indx,*ivector();
void odeint(),ludcmp(),lubksb(),derivs(),
rkqc(),free_matrix(),free_vector(),free_ivector();
void load1(); /* ANSI: void load1(float,float *,float *); */
void load2(); /* ANSI: void load2(float,float *,float *); */
void score(); /* ANSI: void score(float,float *,float *); */
float sav,det,*y,*f1,*f2,**dfdv,**matrix(),*vector();
dfdv=matrix(1,nvar,1,nvar);
y=vector(1,nvar);
f1=vector(1,nvar);
f2=vector(1,nvar);
indx=ivector(1,nvar);
load1(x1,v1,y);
odeint(y,nvar,x1,xf,eps,h1,hmin,&nok,&nbad,derivs,rkqc);
score(xf,y,f1);
load2(x2,v2,y);
odeint(y,nvar,x2,xf,eps,h1,hmin,&nok,&nbad,derivs,rkqc);
score(xf,y,f2);
j=0;
for (iv=1;iv<=n2;iv++) {
j++;
sav=v1[iv];
v1[iv] += delv1[iv];
load1(x1,v1,y);
odeint(y,nvar,x1,xf,eps,h1,hmin,&nok,&nbad,derivs,rkqc);
score(xf,y,f);
for (i=1;i<=nvar;i++)
dfdv[i][j]=(f[i]-f1[i])/delv1[iv];
v1[iv]=sav;
}
for (iv=1;iv<=n1;iv++) {
j++;
sav=v2[iv];
v2[iv] += delv2[iv];
load2(x2,v2,y);
odeint(y,nvar,x2,xf,eps,h1,hmin,&nok,&nbad,derivs,rkqc);
score(xf,y,f);
for (i=1;i<=nvar;i++)
dfdv[i][j]=(f2[i]-f[i])/delv2[iv];
v2[iv]=sav;
}
for (i=1;i<=nvar;i++) {
f[i]=f1[i]-f2[i];
f1[i]=(-f[i]);
}
ludcmp(dfdv,nvar,indx,&det);
lubksb(dfdv,nvar,indx,f1);
j=0;
for (iv=1;iv<=n2;iv++) {
v1[iv] += f1[++j];
dv1[iv]=f1[j];
}
for (iv=1;iv<=n1;iv++) {
v2[iv] += f1[++j];
dv2[iv]=f1[j];
}
free_ivector(indx,1,nvar);
free_vector(f2,1,nvar);
free_vector(f1,1,nvar);
free_vector(y,1,nvar);
free_matrix(dfdv,1,nvar,1,nvar);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -