📄 3ytcz.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 + -