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

📄 cpp1.cpp

📁 用C++编写的插值程序
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
int n;
double yangtiao(double a[],double y[],double &dx,double &ddf,double x)
{
	double *u,*d,*h,*r,*b,*M;
	u=new double[n];r=new double[n];
	d=new double[n+1];h=new double[n];
	b=new double[n+1];M=new double[n+1];
    int i,j;
	for(i=0;i<n;i++)
	h[i]=a[i+1]-a[i];
	for(i=0;i<=n;i++)
		b[i]=2;
   for(j=0;j<n-1;j++)
	{
	u[j]=h[j]/(h[j+1]+h[j]);r[j+1]=1-u[j];
	}
	r[0]=1;u[n-1]=1; 
	d[0]=6*((y[1]-y[0])/h[0]-dx)/h[0];
	d[n]=6*(ddf-(y[n]-y[n-1])/h[n-1])/h[n-1];
	for(int ii=1;ii<=n-1;ii++)
	d[ii]=6*((y[ii+1]-y[ii])/h[ii]-(y[ii]-y[ii-1])/h[ii-1])/(a[ii+1]-a[ii-1]);
for(i=1;i<=n;i++)
	 {
      b[i]=b[i]-u[i-1]/b[i-1]*r[i-1];
	  d[i]=d[i]-u[i-1]/b[i-1]*d[i-1];
	 }
	  M[n]=d[n]/b[n];
		 for(j=n-1;j>=0;j--)
		 {
			M[j]=(d[j]-r[j]*M[j+1])/b[j];
		 }
   double yy=0; 
	for(i=0;i<n;i++)
	{
if((x>=a[i])&&(x<=a[i+1]))
		{
		yy+=M[i]*pow((a[i+1]-x),3)/(6*h[i]);
		yy+=M[i+1]*pow((x-a[i]),3)/(6*h[i]);
		yy+=(y[i]-M[i]*h[i]*h[i]/6)*(a[i+1]-x)/h[i];
		yy+=(y[i+1]-M[i+1]*h[i]*h[i]/6)*(x-a[i])/h[i];
		}
	}
	return yy;
}
void main()
{
	cout<<"  输入插值点数目的n:";
	cin>>n;cout<<endl;
	double *aa,*yy,df,ddf;
	aa=new double[n+1];yy=new double[n+1];
   cout<<"输入叉值节点:"<<endl;
			for(int i=0;i<=n;i++)
				cin>>aa[i];
	cout<<"输入叉值节点函数值:"<<endl;
	for(int j=0;j<=n;j++)
		cin>>yy[j];
  cout<<"输入两端点函数导数值:"<<endl;
	cin>>df>>ddf;
 double x;

  
 x=yangtiao(aa,yy,df,ddf,5.5);
cout<<"输入所求函数值为:"<<x<<endl;

}

⌨️ 快捷键说明

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