2017-05-14 27 views
0

我想用我的教授给出的函数来计算多项式函数(多项式如:ax^2 + bx + c)的积分。功能是:使用指向函数的指针的数值积分总是返回0

double numbericalIntegration(double a ,double b ,double(*func)(double)){ 
    double delta = (b - a)/32; 
    double sum=0, x; 
    for(x= a+0.5*delta; x<b ; x+=delta) 
    { 
     sum+=(*func)(x); 
    } 
    return sum*delta; 
} 

我改变了很多,为了整合多项式函数。但我得到了答案0.为什么呢?如果有人试图纠正我的工作,我会很感激。我的代码是:

double integralPoly(double x, double a, double b, double c){ 
    return (a*pow(x,3))/3 +(b*pow(x,2))/2 + (c*x); 
} 

double numbericalIntegration(double a ,double b ,double(*func)(double,double,double,double), double firstNum, double secondNum, double thirdNum){ 
    double delta = (b - a)/32; 
    double sum=0, x; 
    for(x= a+0.5*delta; x<b ; x+=delta) 
    { 
     sum+=(*func)(x, firstNum, secondNum, thirdNum); 
    } 
     return sum*delta; 
} 

int main() 
{ 
    double (*func)(double,double,double,double); 
    func = integralPoly; 
    double sum = numbericalIntegration(2,4,func,1,1,4); 
    printf("sum = %d",sum); 
    return 0; 
} 
+2

您尝试打印'double',其格式为'%d',用于'int'。你需要'%e','%f'或'%g'中的一个,你也应该在数字后面打印一个换行符'\ n'。打开您的编译器警告,以了解这种格式不匹配。 –

+0

你知道这些数字的预期输出是什么? – Nebeski

回答

0

您需要更改两件事。首先你的多项式函数没有任何意义。您说它需要采用ax^2+bx+c的形式,但在您的代码多项式中是(ax^3)/3+(bx^2)/2+c*x。你的功能应该是:

double integralPoly(double x, double a, double b, double c){ 
    return (a*pow(x,2)) +(b*x) + c; 
} 

你也需要改变你的printf。 %d是整数类型说明符,你需要加倍,所以你需要使用%f例如:

printf("sum = %f",sum); 

现在你的程序的输出是:

sum = 32.666016 

这是您的参数是正确的。