抛物线插值法
#include
#include
using namespace std;
double fun(double x)
{
return (8*x*x*x-2*x*x-7*x+3);
}
double max(double a,double b)
{
if(a>b)return a;
else return b;
}
double min(double a,double b)
{
if(a>b)return b;
else return a;
}
void Parainterpolation(double(*pfun)(double x))
{
double a=0,b=2,err=0.001,x=0,x0=1,f,f0;
do
{
x=((x0*x0-b*b)*fun(a)+(b*b-a*a)*fun(x0)+(a*a-x0*x0)*fun(b))/(2*((x0-b)*fun(a)+(b-a)*fun(x0)
+(a-x0)*fun(b)));
f0=fun(x0);
f=fun(x);
if(f=f0){a=min(x,x0);b=max(x,x0);x0=(a+b)/2;}
else {
if((fun(x)-f0)*(x-x0)>0)
{
b=max(x,x0);x0=min(x,x0);
}
else
{
a=min(x,x0);x0=max(x,x0);
}
}