📄 lagrange1.cpp
字号:
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
#define N 4
int checkvalid(double x[],int n)
{
int i,j,flag=1;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(x[i]==x[j])
{
flag=-1;
}
}
return(flag);
}
double Lagrange(double x[],double y[],double varx,int n)
{
cout<<"Ln(x)="<<endl;
int i,j,k;
double v=0;
for(i=0;i<=n;i++)
{ double l=1,temp=1;
for(j=0;j<=n;j++)
{
if(j==i) continue;
temp=temp*(1/(x[i]-x[j]));
l=l*(varx-x[j]);
}
cout<<setiosflags(ios_base::fixed)<<setiosflags(ios_base::left)
<<setw(6)<<" "<< setprecision(6)<<l*temp;
for(k=0;k<j;k++)
{
if(k==i) continue;
cout<<"*(x-"<<x[k]<<")";
}
v=v+l*y[i]*temp;
if(i==n-1)
continue;
else
cout<<"+"<<endl;
}
return (v);
}
void main()
{
double x[N+1]={0.4,0.55,0.80,0.9,1};
double y[N+1]={0.41075,0.57815,0.88811,1.02652,1.17520};
double varx=0.5;
int checkvalid(double x[],int n);
double Lagrange(double x[],double y[],double varx,int n);
if(checkvalid(x,N)==1)
cout<<setiosflags(ios_base::fixed)<<"\n\n插值结果:P"<<"("<<varx<<")="<<setprecision(6)<<Lagrange(x,y,varx,N);
else
cout<<"输入的插值节点的"<<x<<"值必须互异!";
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -