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

📄 拉格朗日及分段线性插值.cpp

📁 数值分析(计算方法):欧拉方法、高斯-赛德尔迭代法、拉格朗日及分段线性插值、龙贝格算法、牛顿下山法、选主元高斯消去法
💻 CPP
字号:
#include <iostream.h>

double LAG(int&,int&,int&,double&);
double SUB(int&,int&,int&,double&);

void main()
{	int n,a,b,c;
	double t,lag,sub,yt,e1,e2;
 for(;;)
 {	
	cout<<"请输入插值节点数 n:";
	cin>>n;
	cout<<"插值区间下限 a:";
	cin>>a;	
    cout<<"插值区间上限 b:";
	cin>>b;
	cout<<"插值点 t:";
	cin>>t;
    lag = LAG(n,a,b,t);
	sub = SUB(n,a,b,t);
	yt=1/(1+t*t);
    e1=lag-yt;
	e2=sub-yt;
    cout<<"精确值是:\n";
	cout<<"yt="<<yt<<endl;
    cout<<"拉各朗日插值结果是:\n";
	cout<<"lag="<<lag<<endl;
	cout<<"拉各朗日插值误差是:\n";
    cout<<"e1="<<e1<<endl;
	cout<<"分段线性插值结果是:\n";
	cout<<"sub="<<sub<<endl;	
	cout<<"分段线性插值误差是:\n";
    cout<<"e2="<<e2<<endl;
	cout<<"输入0退出,输入其它继续!";
	cin>>c;
	if(c==0)
	  break;
	else continue;
	 }
}

double LAG(int& n,int& a,int& b,double& t)
{   
	int i,j;
    double x[100],y[100];
	double p,s=0;
	for(i=0;i<=n;i++)
	{
		x[i]=a+i*(b-a)/n;
	    y[i]=1/(1+x[i]*x[i]);		
		p = 1;
		for(j=0;j<=n;j++)
		{	x[j]=a+j*(b-a)/n;
			if(i==j) continue;
			else p=p*(t-x[j])/(x[i]-x[j]);
		}
		s+=p*y[i];
	}
	return s;
}

double SUB(int& n,int& a,int& b,double& t)
{   
	int i;
	double p;  
    double x[100],y[100];  
     for(i=0;i<=n;i++)
		{  
            x[i]=a+i*(b-a)/n;
			x[i+1]=a+(i+1)*(b-a)/n;
			y[i]=1/(1+x[i]*x[i]);
			y[i+1]=1/(1+x[i+1]*x[i+1]);
			if(t>=x[i]&&t<=x[i+1])
			{
               p=y[i]*(t-x[i+1])/(x[i]-x[i+1])+y[i+1]*(t-x[i])/(x[i+1]-x[i]);
			   
            }
			
        }
	 return p;
}

⌨️ 快捷键说明

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