📄 lagrange.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float lagrange(int n,float *x,float *y,float X); //声明拉格朗日插值函数
int main()
{
int i;
int t;
float x[20]; //最多20组成员数组
float y[20]; //最多20组成员对应的数据
float X,Px;
printf(" 请输入插值多项式的次数N\n");
scanf(" %d",&t); //获取多项式的次数t次
t=t+1;
for( i=0;i<t;i++) //获取各组数据,共t+1组,因为t+1个点惟一地确定t次多项式h(x)
{
printf(" 请输入x[%d]:\n",i);
scanf(" %f",&x[i]);
printf(" 请输入y[%d]:\n",i);
scanf(" %f",&y[i]);
}
printf(" 请输入要计算的X的值:\n");
scanf(" %f",&X); //获取计算的X的值,应用中取x=0
Px=lagrange(t,x,y,X); //调用拉格朗日插值函数计算
system("cls");
printf("\n===计算结果如下=====\n\n");
printf(" 当 X=%.4f 时",X); //输出X的值
printf(" Y=%.4f \n",Px); //输出计算结果
return 1;
}
float lagrange(int n,float *x,float *y,float X) //定义拉格朗日插值函数,n为次数,x指针指向对应成员数组,
//y指针指向对应成员的值的数组,X为计算多项式中X的取值
{
float L,P=0.0;
int j,k;
for(k=0;k<n;k++)
{
L=1.0;
for(j=0;j<n;j++)
{
if(j==k)
continue;
L*=(X-x[j])/(x[k]-x[j]); //L为Lagrange插值基函数
}
P+=y[k]*L; //P为n次Lagrange插值多项式
}
return P;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -