📄 lagrange插值.cpp
字号:
# include<iostream.h>
void main(void)
{
cout<<"--------------------lagrange 插值---------------------\n";
a1: int n,i=0,j=0,c=0,m,t,max;
do{ cout<<"请输入个数";
cin>>n;
cout<<"请输入次数";
cin>>m;}
while(m>=n);
float *x,*y,a,A,B;
double *l,d=0;
x=new float[n-1];
y=new float[n-1];
cout<<"请由小到大按顺序输入x[i]的值"<<endl;
for(i;i<n;i++)
{
cout<<"x["<<i<<"]=";
cin>>x[i];
cout<<'\t'<<"y["<<i<<"]=";
cin>>y[i];
cout<<endl;
}
i=0;
for(i;i<n;i++)
{
cout<<"x["<<i<<"]="<<x[i]<<'\t'<<"y["<<i<<"]="<<y[i]<<endl;
}
cout<<'\n';
cout<<"请输入a的值";
cin>>a;
cout<<"a="<<a<<endl;
max=0;
for(int k=1;k<=n;k++){if(a>x[k-1]) max=k;}//判断x的位置使其在众多值中只选取n+1个临近的值运算
if(max>n-m/2||max<=m/2){
if(max>n-m/2) t=n-m-1;
if(max<=m/2) t=0;
}
else{
t=max-int(m/2);
}
for(i=t;i<t+m+1;i++){ //公式
for(j=t;j<t+m+1;j++){
if(j==i) continue;
A*=(a-x[j]);
B*=(x[i]-x[j]);
}d+=(A/B)*(y[i]);A=1;B=1;
}cout<<"L["<<a<<"]="<<d;
char out='y';
cout<<"继续?y/n"<<endl;
cin>>out;
if(out!='n') goto a1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -