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

📄 sanciytczf.cpp

📁 计算方法计算方法程序sanciyangtiaochazhi 三次样条插值法.rar
💻 CPP
字号:
#include <iostream.h>
#include <cmath>

void sanciytcz();
void extern zhuigf(double *l,double*u,double*g,int N);

int main()
{
	sanciytcz();
	return 0;
}

void sanciytcz()
{
	int N,type;
	double y01=0,y02=0,yn1=0,yn2=0;
	cout<<"请输入插值点的个数:";
	cin>>N;
	N--;
	double *x=new double[N+1];
	double *y=new double[N+1];
	double *h=new double[N+1];
	double *u=new double[N+1];
	double *l=new double[N+1];
	double *d=new double[N+1];

	for(int i=0;i<=N;i++)
	{
		cout<<"第"<<i+1<<"个点的坐标为:";
		cin>>x[i]>>y[i];
	}

	cout<<"请输入这是第几类问题(1 or 2):";
	cin>>type;

	if(type==1)
	{
		cout<<"端点条件x0处的一阶导数为:";
		cin>>y01;
		cout<<"端点条件x"<<N<<"处的一阶导数为:";
		cin>>yn1;
	}
	else
	{
		cout<<"端点条件x0处的二阶导数为:";
		cin>>y02;		
		cout<<"端点条件x"<<N<<"处的二阶导数为:";
		cin>>yn2;
	}


	for(i=1;i<=N;i++)
	{
		h[i]=x[i]-x[i-1];
        cout<<"h["<<i<<"]="<<h[i]<<"  \n";
	}
	
	

	if(type==1)
	{
		l[0]=1;
		u[N]=1;
	}
	else
	{
		l[0]=0;
		u[N]=0;
	}
	for(i=1;i<=N-1;i++)
	{
		l[i]=h[i+1]/(h[i]+h[i+1]);
		u[i]=1-l[i];
		d[i]=6/(h[i]+h[i+1])*((y[i+1]-y[i])/h[i+1]-(y[i]-y[i-1])/h[i]);
	}

	if(type==1)
	{
		d[0]=6/h[1]*((y[1]-y[0])/(x[1]-x[0])-y01);
		d[N]=6/h[N]*(yn1-(y[N]-y[N-1])/(x[N]-x[N-1]));
	}
	else
	{
		d[0]=2*y02;
		d[N]=2*yn2;
	}


	for(i=0;i<=N-1;i++)
	{
		cout<<"l["<<i<<"]="<<l[i]<<endl;
	}
	for(i=1;i<=N;i++)
	{
		cout<<"u["<<i<<"]="<<u[i]<<endl;
	}
	for(i=0;i<=N;i++)
	{
		cout<<"d["<<i<<"]="<<d[i]<<endl;
	}


	zhuigf(u,l,d,N+1);

	double a,result;
	cout<<"请输入要求的数:";
	cin>>a;
	int IP=1;
	for(int j=1;j<=N;j++)
	{
		if(a>=x[j-1]&&a<=x[j])  
		{
			IP=-1;
			i=j;
			break;
		}
		else IP=1;
	}
	if(IP==1)
	{
		cout<<a<<"不在"<<x[0]<<"与"<<x[N]<<"之间!"<<endl;
	}
	else
	{
		result=(x[i]-a)*(x[i]-a)*(x[i]-a)/6/h[i]*d[i-1]
			+(a-x[i-1])*(a-x[i-1])*(a-x[i-1])/6/h[i]*d[i]
			+(y[i-1]-d[i-1]/6*h[i]*h[i])*(x[i]-a)/h[i]
			+(y[i]-d[i]/6*h[i]*h[i])*(a-x[i-1])/h[i];

		cout<<"===================\n"<<"结果为:"<<result<<endl;
	}
	



	delete[]x;
	delete[]y;
	delete[]h;
	delete[]u;
	delete[]l;
	delete[]d;
}

⌨️ 快捷键说明

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