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

📄 3ytcz.cpp

📁 这是一个利用数值算法中三次样条插值方法。编译的人口普查问题。供个高校有关专业参考
💻 CPP
字号:
#include<iostream.h>
#include<iomanip.h>
void Spline1(int n, double x[], double y[], double dy[], double ddy[], int m, double t[] ,double z[])
{ 
	int j,i;
    double h0,h1,alpha,beta,*s;
	s=new double[n];	
    s[0]=dy[0]; 
	dy[0]=0.0;
    h0=x[1]-x[0];
	for (j=1;j<=n-2;j++)
	{ 
		h1=x[j+1]-x[j];
        alpha=h0/(h0+h1);
        beta=(1.0-alpha)*(y[j]-y[j-1])/h0;
        beta=3.0*(beta+alpha*(y[j+1]-y[j])/h1);
        dy[j]=-alpha/(2.0+(1.0-alpha)*dy[j-1]);
        s[j]=(beta-(1.0-alpha)*s[j-1]);
        s[j]=s[j]/(2.0+(1.0-alpha)*dy[j-1]);
        h0=h1;
    }
	for (j=n-2;j>=0;j--)
	    dy[j]=dy[j]*dy[j+1]+s[j];
	for (j=0;j<=n-2;j++) 
		s[j]=x[j+1]-x[j];
	for (j=0;j<=n-2;j++)  {
		h1=s[j]*s[j];
        ddy[j]=6.0*(y[j+1]-y[j])/h1-2.0*(2.0*dy[j]+dy[j+1])/s[j];
    }
	h1=s[n-2]*s[n-2];
    ddy[n-1]=6.*(y[n-2]-y[n-1])/h1+2.*(2.*dy[n-1]+dy[n-2])/s[n-2];
	for (j=0;j<=m-1;j++)   {
		if (t[j]>=x[n-1]) 
			i=n-2;
        else
		{ 
			i=0;
        while (t[j]>x[i+1]) 
			i=i+1;
		}
		h1=(x[i+1]-t[j])/s[i];
        h0=h1*h1;
        z[j]=(3.0*h0-2.0*h0*h1)*y[i];
        z[j]=z[j]+s[i]*(h0-h0*h1)*dy[i];
        h1=(t[j]-x[i])/s[i];
        h0=h1*h1;
        z[j]=z[j]+(3.0*h0-2.0*h0*h1)*y[i+1];
        z[j]=z[j]-s[i]*(h0-h0*h1)*dy[i+1];
	}
}
void main()
{

	const int M=8;
	const int N=36;
	int i,j,k;
	double x[M],y[M],dy[M],ddy[M],t[N],z[N];
	cout<<"请输入母亲年龄t:"<<endl;
	for(i=0;i<M;i++)
		cin>>x[i];
	cout<<"请输入新生儿数目N:"<<endl;
	for(j=0;j<M;j++)
		cin>>y[j];
	cout<<"请输入端点的一阶导数值:"<<endl;
	cin>>dy[0]>>dy[M-1];
	cout<<"请输入待求节点x"<<endl;
	for(k=0;k<N;k++)
	{
		t[k]=k+15;
	}
	Spline1(M, x,y,dy,ddy, N, t ,z);
	cout<<"该国新生儿人口普查统计:"<<endl;
	cout<<setw(10)<<"年龄t:"<<setw(20)<<"新生婴儿数目N:"<<endl;
	for(i=0;i<N;i++)  
	{	
		cout<<setprecision(6)<<setiosflags(ios::fixed);
		cout<<setw(10)<<t[i]<<setw(20)<<z[i]<<endl;
	}
}

	


⌨️ 快捷键说明

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