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

📄 3次样条插值.cpp

📁 追敢法
💻 CPP
字号:
/*#include<iostream.h>
void main()
{
	float a[]={2,4,3};
	float b[]={0,1,1};
	float c[]={1,1,0};
	float f[]={3,12,11};
	float q[3],p[3],x[3],y[3];
	int i;
	int n=3;
	q[0]=a[0];
	p[0]=b[0];
	y[0]=f[0];
	for(i=1;i<3;i++)
	{
		p[i]=b[i]/q[i-1];
		q[i]=a[i]-p[i]*c[i-1];
		y[i]=f[i]-p[i]*y[i-1];
	}                
	//回代 过程
	x[2]=y[2]/q[2];
	for(i=1;i>=0;i--)
	{
		x[i]=(y[i]-c[i]*x[i+1])/q[i];
	}
	for(i=0;i<n;i++)
	{
		cout<<x[i]<<'\n';
	}
}                     追赶法*/

#include<iostream.h>
void main()
{
	float c[11],b[11],df[11],df1[12],h[11],m[11],n[11];
	float y[11],p[11],q[11],x[11];
	int i,j;
   cout<<"请输入x和对应的y值:"<<endl;               //输入已知条件
   cout<<"x=";
	for(i=0;i<11;i++)
		cin>>m[i];
	cout<<"y=";
	for(i=0;i<11;i++)
		cin>>n[i];
	//float m[]={0,1,2,3,4,5,6,7,8,9,10};
	//float n[]={2.51,3.30,4.04,4.70,5.22,5.54,5.78,5.40,5.57,5.70,5.80};
	for(i=0;i<10;i++)
	{
		h[i]=m[i+1]-m[i];
	}
	for(j=1;j<10;j++)
	{
		b[j]=h[j-1]/(h[j-1]+h[j]);
		c[j]=1-b[j];		
	}
	//二阶差分
     cout<<"请输入端点条件y(0)的导数和y(10)的导数:"<<endl;  
	cout<<"y(0)的导数=";
	cin>>df1[0];
	cout<<"y(10)的导数=";
	cin>>df1[11];
	for(j=1;j<11;j++)
	{
		df1[j]=(n[j]-n[j-1])/(m[j]-m[j-1]);
	}
	//三阶差分
	df[0]=6*(df1[1]-df1[0]);
	df[10]=6*(df1[11]-df1[10]);
	for(j=1;j<10;j++)
	{
		df[j]=6*(df1[j+1]-df1[j])/2;
	}

	
   //追赶法求解 
    b[10]=1;
	c[0]=1;
    q[0]=2;
	p[0]=0;
	y[0]=df[0];
	for(i=1;i<11;i++)
	{
		p[i]=b[i]/q[i-1];
		q[i]=2-p[i]*c[i-1];
		y[i]=df[i]-p[i]*y[i-1];
	} 
	//回代 过程
	x[10]=y[10]/q[10];
	for(i=9;i>=0;i--)
	{
		x[i]=(y[i]-c[i]*x[i+1])/q[i];
	}
	for(i=0;i<11;i++)
	{
		cout<<x[i]<<'\n';
	}
	float lag1[10],lag2[10],lag3[10];
	for(j=0;j<10;j++)
	{
		lag1[j]=df1[j]-((1/3)*x[j]+(1/6)*x[j+1])*h[j];
		lag3[j]=(1/(6*h[j]))*(x[j+1]-x[j]);
	}
	
	for(j=0;j<10;j++)
	{
		cout<<"S(x)="<<n[j]<<"+"<<lag1[j]<<"(x-"<<m[j]<<")"<<"+"<<"("<<0.5*x[j]<<")"<<"(x-"<<m[j]<<")^2"<<"+"<<lag3[j]<<
        "(x-"<<m[j]<<")^3"<<' '<<cout<<"X属于("<<m[j]<<","<<m[j+1]<<")"<<endl;
	}
	cout<<"S(i+0.5)  (i=0,1...9)=:"<<endl;
    for(i=0;i<10;i++)
	{
	   	cout<<n[i]+lag1[i]*(i+0.5-m[i])+0.5*(x[i])*(i+0.5-m[i])*(i+0.5-m[i])+lag3[i]*(i+0.5-m[i])*(i+0.5-m[i])*(i+0.5-m[i])<<endl;
		
	}
}              


⌨️ 快捷键说明

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