#include<iostream>
#include<ctime>
using namespace std;
float * f(int n,float *x,float *y)
{
//该函数的返回值是一个长度为n+1的动态数组,存放各阶差商
float * f = new float[n+1];
f[0] = y[0];
//cout<<f[0]<<endl;
for (int i = 1; i <= n; i++) {
float t = 1;
float sum = 0;
for (int k = 0; k <= i; k++) {
for (int j = 0; j <= i; j++) {
if (j != k) {
t=t*(x[k] - x[j]);
}
}
sum = sum + y[k] / t;
t=1;
}
f[i] = sum;
}
return f;
}
int main(){
float x[5]={0,2,3,5,6},y[5]={0,8,27,125,216};
int n=4;
float * answer=f(4,x,y);
for (int i = 0; i <= n; i++) {
cout<<answer[i]<<endl;
}
//2阶差乘
cout<<y[0]/((x[0]-x[1])*(x[0]-x[2]))+y[1]/((x[1]-x[0])*(x[1]-x[2]))+y[2]/((x[2]-x[0])*(x[2]-x[1]))<<endl;
float t = 1;
float sum = 0;
for (int k = 0; k <= 2; k++) {
for (int j = 0; j <= 2; j++) {
if (j != k) {
t=t*(x[k] - x[j]);
}
}
sum = sum + (y[k] / t);
t=1;
}
cout<<sum;
return 0;
}
#include<ctime>
using namespace std;
float * f(int n,float *x,float *y)
{
//该函数的返回值是一个长度为n+1的动态数组,存放各阶差商
float * f = new float[n+1];
f[0] = y[0];
//cout<<f[0]<<endl;
for (int i = 1; i <= n; i++) {
float t = 1;
float sum = 0;
for (int k = 0; k <= i; k++) {
for (int j = 0; j <= i; j++) {
if (j != k) {
t=t*(x[k] - x[j]);
}
}
sum = sum + y[k] / t;
t=1;
}
f[i] = sum;
}
return f;
}
int main(){
float x[5]={0,2,3,5,6},y[5]={0,8,27,125,216};
int n=4;
float * answer=f(4,x,y);
for (int i = 0; i <= n; i++) {
cout<<answer[i]<<endl;
}
//2阶差乘
cout<<y[0]/((x[0]-x[1])*(x[0]-x[2]))+y[1]/((x[1]-x[0])*(x[1]-x[2]))+y[2]/((x[2]-x[0])*(x[2]-x[1]))<<endl;
float t = 1;
float sum = 0;
for (int k = 0; k <= 2; k++) {
for (int j = 0; j <= 2; j++) {
if (j != k) {
t=t*(x[k] - x[j]);
}
}
sum = sum + (y[k] / t);
t=1;
}
cout<<sum;
return 0;
}