2019年4月26日 星期五

C語言 例題3-2 一下表求f'(x)一階微分值

C語言 例題3-2 一下表求f'(x)一階微分值

x           f(x)           f'(x)
====================
-0.3     -0.20431     ????
-0.1     -0.08993     ????
0.1       0.11007      ????
0.3       0.39569      ????

x=[-0.3 , -0.1 , 0.1 , 0.3]
f=[-0.20431 ,  -0.08993 , 0.11007 , 0.39569]
'''
(A) 向前差近似 (三點)
fi' =  [ -f(i+2) + 4f(i+1) -3 f(i) ] / 2h ,
O(h) = 1/3 * h*h *  < fi 三次微分 >

(B) 向後差近似(三點)
fi' =  [ 3f(i) - 4f(i-1) + f(i-2) ] / 2h ,
O(h) = 1/3 * h*h * < fi 三次微分 >

(C) 中央近似 (雙點)
fi' = [f(i+1) - f(i-1)] / 2h  ,
O(h) = -1/6 * h *h *  < fi 三次微分 >
中央近似沒有三點
'''

#include <stdio.h>
#include <math.h>

int main()
{
    double x[] = {-0.3 , -0.1 ,0.1 ,0.3 } ;
    double f[] = {-0.20431 , -0.08993 , 0.11007  ,0.39569 };
    int i=0;
    double h=x[1]-x[0] ;
    double cal;
   
    cal = (-f[i+2] + 4*f[i+1] -3*f[i] ) / (2*h) ;
    printf("向前差近似 (三點) : %lf\n",cal);
    i=1;
    cal = (-f[i+2] + 4*f[i+1] -3*f[i] ) / (2*h) ;
    printf("向前差近似 (三點) : %lf\n",cal);
   
    i=1;
    cal = (f[i+1] - f[i-1]) / (2*h) ;   
    printf("中央近似 (三點) : %lf\n",cal);
   
    i=2;
    cal = (f[i+1] - f[i-1]) / (2*h) ;   
    printf("中央近似 (三點) : %lf\n",cal);
   
    i=2;
    cal = (3*f[i] - 4*f[i-1] + f[i-2]) / (2*h) ;
    printf("向後差近似(三點) : %lf\n",cal);
   
    i=3;
    cal = (3*f[i] - 4*f[i-1] + f[i-2]) / (2*h) ;
    printf("向後差近似(三點) : %lf\n",cal);

   
    return 0;
}


輸出畫面
向前差近似 (三點) : 0.357850                                                                                                                                 
向前差近似 (三點) : 0.785950                                                                                                                                 
中央近似 (三點) : 0.785950                                                                                                                                   
中央近似 (三點) : 1.214050                                                                                                                                   
向後差近似(三點) : 1.214050                                                                                                                                 
向後差近似(三點) : 1.642150                                                                                                                                 
                                                                                                                                                             
                                                                                                                                                             
...Program finished with exit code 0                                                                                                                         
Press ENTER to exit console.   

沒有留言:

張貼留言

Messaging API作為替代方案

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