2011-04-23 3 views
0

코드를 작성하고 실행하면 올바르게 작동하지 않는 것을 볼 수 있습니다.이 문제는 책에서 나옵니다. (C에서의 문제 해결 및 프로그램 디자인) .2 방정식을 제공하고 대략적인 면적을 찾으려합니다. 2, 4, 8, 16, 32, 64, 128 n의 값을 가진 콜 트랩을 추가합니다.사다리꼴 규칙 질문

출력 코드가 음수이고 -nan입니다.

g(x) = x^2sinx (a = 0, b = 3.14159) 
h(x) = sqrt(4-pow(x.2)) (a =-2, b=2); 

그리고 코드는 다음과 같습니다 : 방정식은

#include <stdio.h> 
#include <math.h> 
void trap(double a,double b, int n, double *areag, double *areah); 
double g(double x); 
double h(double x); 
int main(void) 
{ 
    double areag = 0.0, areah = 0.0; 
    double a1 = 0, b1 = 10; 
    int n; 
    for(n=2;n<=128;n*=2){ 
     trap(a1, b1, n, &areag, &areah); 
     printf("%f %f\n", areag, areah); 
    } 
    return(0); 
} 

double g(double x){ 
    return(pow(x,2)*sin(x)); 
} 
double h(double x){ 
    return(sqrt(4-pow(x,2))); 
} 
void trap(double a,double b, int n, double *areag, double *areah){ 
    int i, l; 
    *areag = (b-a)/2*n * (g(a) + g(b)); 
    for(i = 1; i<=n-1;i++) 
     *areag += 2*g(i); 
    *areah = (b-a)/2*n * (h(a) + h(b));  
    for(l=1;l<=n-1;l++) 
     *areah += 2*h(i); 
} 
+0

'i = 0, ..., n'인 'a + (i/n) * (ba)'에서 'g'와 'h'를 평가하면 안된다. 'a'와 'b'사이에 같은 간격의 점이 있습니까? – Aniko

답변

2

잘 모르겠어요 의도 무엇을, 당신은 작동하도록되어 방법을 설명하지 않았기 때문에,하지만이 부분은 복용 음수의 제곱근 :

아, 이제는 통합하려는 기능이 있습니다. 문제는 통합 범위를 더 넓은 범위로 통합하는 대신 작은 부분으로 나누어야한다는 것입니다. 시도해 보자.

*areah += 2*h((double) i/n); 
+0

나는 알고리즘의 구현에 약간의 문제가있다. 출력이 사실이 아니기 때문에 ... Potatoswatter, 감사합니다. – mustafaSarialp

+0

또한 * areah + = 2 * h ((double) l/n); 변경 될 것입니다 i ---> l – mustafaSarialp