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

📄 sphfpt.h

📁 经典numerical receip 配套代码
💻 H
字号:
struct Rhsfpt {
	Int m;
	Doub c2;
	Rhsfpt(Int mm, Doub cc2) : m(mm), c2(cc2) {}
	void operator() (const Doub x, VecDoub_I &y, VecDoub_O &dydx)
	{
		dydx[0]=y[1];
		dydx[1]=(2.0*x*(m+1.0)*y[1]-(y[2]-c2*x*x)*y[0])/(1.0-x*x);
		dydx[2]=0.0;
	}
};

struct Load1 {
	Int n,m;
	Doub gmma,c2,dx;
	VecDoub y;
	Load1(Int nn, Int mm, Doub gmmaa, Doub cc2, Doub dxx) : n(nn), m(mm),
		gmma(gmmaa), c2(cc2), dx(dxx), y(3) {}
	VecDoub operator() (const Doub x1, VecDoub_I &v1)
	{
		Doub y1 = ((n-m & 1) != 0 ? -gmma : gmma);
		y[2]=v1[0];
		y[1] = -(y[2]-c2)*y1/(2*(m+1));
		y[0]=y1+y[1]*dx;
		return y;
	}
};

struct Load2 {
	Int m;
	Doub c2;
	VecDoub y;
	Load2(Int mm, Doub cc2) : m(mm), c2(cc2), y(3) {}
	VecDoub operator() (const Doub x2, VecDoub_I &v2)
	{
		y[2]=v2[1];
		y[0]=v2[0];
		y[1]=(y[2]-c2)*y[0]/(2*(m+1));
		return y;
	}
};

struct Score {
	VecDoub f;
	Score() : f(3) {}
	VecDoub operator() (const Doub xf, VecDoub_I &y)
	{
		for (Int i=0;i<3;i++) f[i]=y[i];
		return f;
	}
};

Int main_sphfpt(void) {
	const Int N1=2,N2=1,NTOT=N1+N2,MM=3;
	Bool check;
	VecDoub v(NTOT);
	Int j,m=3,n=5,n2=N2;
	Doub c2[]={1.5,-1.5,0.0};
	Int nvar=NTOT;
	Doub dx=1.0e-8;
	for (j=0;j<MM;j++) {
		Doub gmma=1.0;
		Doub q1=n;
		for (Int i=1;i<=m;i++) gmma *= -0.5*(n+i)*(q1--/i);
		v[0]=n*(n+1)-m*(m+1)+c2[j]/2.0;
		v[2]=v[0];
		v[1]=gmma*(1.0-(v[2]-c2[j])*dx/(2*(m+1)));
		Doub x1= -1.0+dx;
		Doub x2=1.0-dx;
		Doub xf=0.0;
		Load1 load1(n,m,gmma,c2[j],dx);
		Load2 load2(m,c2[j]);
		Rhsfpt d(m,c2[j]);
		Score score;
		Shootf<Load1,Load2,Rhsfpt,Score> shootf(nvar,n2,x1,x2,xf,load1,
			load2,d,score);
		newt(v,check,shootf);
		if (check) {
			cout << "shootf failed; bad initial guess" << endl;
		} else {
			cout << "    " << "mu(m,n)" << endl;
			cout << fixed << setprecision(6);
			cout << setw(12) << v[0] << endl;
		}
	}
	return 0;
}

⌨️ 快捷键说明

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