/**拉格朗日插值**/
/**
_ ___ _______
| |/ (_) |___ / |
| ' / _ _ __ __ _ / /| |__ __ _ _ __ __ _
| < | | '_ \ / _` | / / | '_ \ / _` | '_ \ / _` |
| . \| | | | | (_| |/ /__| | | | (_| | | | | (_| |
|_|\_\_|_| |_|\__, /_____|_| |_|\__,_|_| |_|\__, |
__/ | __/ |
|___/ |___/
**/
#include <map>
#include <queue>
#include <string>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <math.h>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
typedef pair<ll,ll> pii;
#define mem(a,x) memset(a,x,sizeof(a))
#define debug(x) cout << #x << ": " << x << endl;
#define rep(i,n) for(int i=0;i<(n);++i)
#define repi(i,a,b) for(int i=int(a);i<=(b);++i)
#define repr(i,b,a) for(int i=int(b);i>=(a);--i)
const int maxn=2e5+1010;
#define inf 0x3f3f3f3f
#define sf scanf
#define pf printf
const int mod=998244353;
const int MOD=10007;
inline int read() {
int x=0;
bool t=false;
char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
double dp[500][500];
double x[maxn],y[maxn];
double l[maxn];
int main() {
ll n;
cin>>n;
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
}
double xx,yy=0.0;
cin>>xx;
for(int i=0;i<=n;i++) l[i]=1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j!=i){
l[i]=l[i]*(xx-x[j])/(x[i]-x[j]);
}
}
yy=yy+l[i]*y[i];
}
printf("x=%lf, y=%lf\n", xx, yy);
return 0;
}
/**牛顿插值*/
/**
_ ___ _______
| |/ (_) |___ / |
| ' / _ _ __ __ _ / /| |__ __ _ _ __ __ _
| < | | '_ \ / _` | / / | '_ \ / _` | '_ \ / _` |
| . \| | | | | (_| |/ /__| | | | (_| | | | | (_| |
|_|\_\_|_| |_|\__, /_____|_| |_|\__,_|_| |_|\__, |
__/ | __/ |
|___/ |___/
**/
#include <map>
#include <queue>
#include <string>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <math.h>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
typedef pair<ll,ll> pii;
#define mem(a,x) memset(a,x,sizeof(a))
#define debug(x) cout << #x << ": " << x << endl;
#define rep(i,n) for(int i=0;i<(n);++i)
#define repi(i,a,b) for(int i=int(a);i<=(b);++i)
#define repr(i,b,a) for(int i=int(b);i>=(a);--i)
const int maxn=2e5+1010;
#define inf 0x3f3f3f3f
#define sf scanf
#define pf printf
const int mod=998244353;
const int MOD=10007;
inline int read() {
int x=0;
bool t=false;
char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
double dp[500][500];
double x[maxn],y[maxn];
int main() {
ll n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
if(i==1){
dp[j][i]=y[j];
}else {
dp[j][i]=(dp[j][i-1]-dp[j-1][i-1])*1.0/(x[j]-x[j-i]);
}
}
}
double x1;
cin>>x1;
double sum=dp[1][1],flag=1.0;
for(int i=2;i<=n;i++){
flag=flag*(x1-x[i-1]);
sum=sum+dp[i][i]*1.0*flag;
}
printf("%lf\n",sum);
//cout<<sum<<endl;
return 0;
}
拉格朗日插值,牛顿插值。
最新推荐文章于 2021-03-09 11:16:18 发布