2017-05-14 3 views
0

Ich versuche, die Funktion, die ich von meinem Professor gegeben wurde, um das Integral einer Polynomfunktion (Polynom wie: ax^2 + bx + c) zu berechnen. die Funktion ist:numerische Integration mit einem Zeiger auf eine Funktion immer 0

Ich habe viel geändert, um eine Polynomfunktion zu integrieren. aber ich bekam die Antwort 0. warum ist das? und ich würde mich freuen, wenn jemand versuchen würde, meine Arbeit zu korrigieren. Mein Code ist:

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

Sie versuchen, ein 'double' mit dem Format'% d' zu drucken, was für 'int' steht. Sie benötigen hier eine von '% e','% f' oder '% g' und Sie sollten auch eine neue Zeile' \ n' nach der Zahl drucken. Aktivieren Sie die Compilerwarnungen, um sich über solche Formatkonflikte zu informieren. –

+0

Wissen Sie, wie hoch die erwartete Ausgabe für diese Nummern ist? – Nebeski

Antwort

0

Sie müssen zwei Dinge ändern. Zuerst macht Ihre Polynomfunktion keinen Sinn. Sie sagten, es muss in Form von ax^2+bx+c sein, aber in Ihrem Code-Polynom ist (ax^3)/3+(bx^2)/2+c*x. Ihre Funktion sollte sein:

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

Auch Sie müssen Ihre printf ändern. %d ist integer Typspezifizierer und Sie müssen doppelt, so dass Sie %f zum Beispiel verwenden müssen:

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

Nun ist die Ausgabe des Programms ist:

sum = 32.666016 

, die für Ihre Parameter korrekt ist.

Verwandte Themen