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

📄 shootf.c

📁 数值算法
💻 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 + -