📄 lagrange.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 + -