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

📄 lagrange.cpp

📁 Lagrange,Newton,Aitken三个插值公式算法的演示.DOS界面输出计算结果.
💻 CPP
字号:
// Lagrange.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream.h>

float dx[256];
float dy[256];

void lagrange(float x,int n)
{
	float y=0;
	for(int i=0;i<n;i++)
	{
		float p=1;
		for(int j=0;j<n;j++)
		{
			if(i==j)continue;
			p=p*(x-dx[j])/(dx[i]-dx[j]);
		}
		y=y+p*dy[i];
	}
	cout<<"经过拉格朗日插值公式计算,结果为:"<<endl;
	cout<<"   给定点x="<<x<<endl;
	cout<<"   函数值y="<<y<<endl<<endl;
}

float fac(int s,int t)
{
	if(t==s+1)
	return (dy[t]-dy[s])/(dx[t]-dx[s]);
	else
    return (fac(s+1,t)-fac(s,t-1))/(dx[t]-dx[s]); 
}
void Newton(float x,int n)
{
	float t=1,y=dy[0],yy=0;
	for(int i=1;i<n;i++)
	{
		t=(x-dx[i-1])*t;
		yy=fac(0,i)*t;
		y=y+yy;
	}
	cout<<"经过牛顿插值公式计算,结果为:"<<endl;
	cout<<"   给定点x="<<x<<endl;
	cout<<"   函数值y="<<y<<endl<<endl;
} 

void Aitken(float x,int n)
{
	int k=1;
	while(k!=n)
	{
		for(int i=k;i<n;i++)
		{
			dy[i]=dy[k-1]+((dy[i]-dy[k-1])*(x-dx[k-1]))/(dx[i]-dx[k-1]);
		}
		k=k+1;
	}
	cout<<"经过埃特金插值公式计算,结果为:"<<endl;
	cout<<"   给定点x="<<x<<endl;
	cout<<"   函数值y="<<dy[n-1]<<endl<<endl;
}
int main(int argc, char* argv[])
{
	float x=0;
	int n=0,select;
	bool index=1;
	do
	{
		cout<<"  (1)拉格朗日插值公式计算!"<<endl;
		cout<<"  (2)牛顿插值公式计算!"<<endl;
		cout<<"  (3)埃特金插值公式计算!"<<endl;
		cout<<"  (4)退出"<<endl<<"  ";
		cin>>select;
		if(select==4)
		{
			index=0;
			break;
		}
		cout<<"请问要输入多少个插值点:";
		cin>>n;
		if(n>=256)
		{
			cout<<"error"<<endl;
			break ;
		}
		for(int i=0;i<n;i++)
		{
			cout<<"请输入第"<<i+1<<"个插值点x的值:";
			cin>>dx[i];
			cout<<"请输入第"<<i+1<<"个插值点y的值:";
			cin>>dy[i];
		}
		cout<<"请输入给定点x的值:";
		cin>>x;
		switch (select)
		{
		case 1:
			lagrange(x,n);
			break;
		case 2:
			Newton(x,n);
			break;
		case 3:
			Aitken(x,n);
			break;
		}
	}while(index!=0);
	return 0;
}

⌨️ 快捷键说明

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