2019年4月27日 星期六

C語言 例題4-1 利用梯形法(Trapezoidal's Rule) 計算 exp(x) 在[0,1] 的定積分

C語言 例題4-1 利用梯形法(Trapezoidal's Rule) 計算 exp(x) 在[0,1] 的定積分

/* ex4-1.c based on Trapezoidol Rule is
 * used for computing definite integral with
 * domain [a,b] with n even-grids.
 */
#include <stdio.h>
#include <math.h>
#define  PI   3.141596
#define  F(x)   (exp(x))
void main()
{
    int n,i;
    double  a,b,x,tn,h ,sum=0.0 , sum1 ,sum2 ;
    n=10;
    a=0;
    b=1;

    h=(b-a)/n;
    x=a;
    for(i=1;i<=n-1;i++)
    {
        x=x+h;
        sum=sum+F(fabs(x));
    }
 
    tn=(h/2.0)*(F(fabs(a))+F(fabs(b))+2.0*sum);
    printf("exp(x) , a=0 , b=1 梯形積分法 : T%d=%10.6lf\n",n,tn);
    printf("exp(x) , a=0 , b=1 實際積分值 :%10.6lf \n",fabs(exp(1)-1));
    printf("實際值與梯形積分的誤差 :%10.6lf \n",fabs(tn-fabs(exp(1)-1)));
 
 
    x=a;
    sum1=0;
    n=0;
    while (x<b-h)
    {
        sum1=sum1 + h* F(fabs(x));
        x=x+h;
        n=n+1;
    }
    printf("左端近似積分法 : T%d=%10.6lf\n",n,sum1);

    x=a+h;
    sum2=0;
    n=0;
    while (x<=b)
    {
        sum2=sum2 + h* F(fabs(x));
        x=x+h;
        n=n+1;
    }
    printf("右端近似積分法 : T%d=%10.6lf\n",n,sum2);
 
 
    printf("(右端近似積分法 +左端近似積分法)/2  : T%d=%10.6lf\n",n,(sum1+sum2)/2);
    return;
}


輸出畫面
exp(x) , a=0 , b=1 梯形積分法 : T10=  1.719713                                                                                                                
exp(x) , a=0 , b=1 實際積分值 :  1.718282                                                                                                                     
實際值與梯形積分的誤差 :  0.001432                                                                                                                            
左端近似積分法 : T10=  1.633799                                                                                                                               
右端近似積分法 : T10=  1.805628                                                                                                                               
(右端近似積分法 +左端近似積分法)/2  : T10=  1.719713                                                                                                          
                                                                                                                                                              
                                                                                                                                                              
...Program finished with exit code 67                                                                                                                         
Press ENTER to exit console.   

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...