2019年1月19日 星期六

例題3-2 一下表求f'(x)一階微分值 向前差近似 (三點) 向後差近似(三點)

例題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 三次微分 >
中央近似沒有三點
'''

def FordDiff(i):
    # // 前差微分 fi' =  [ -f(i+2) + 4f(i+1) -3 f(i) ] / 2h , 
    h=abs(x[i+1]-x[i])+0.0
    s= -f[i+2] + 4*f[i+1] -3*f[i]
    return ( s / (2* h))

def BackDiff(i):
    # // 後差微分 fi' =  [ 3f(i) - 4f(i-1) + f(i-2) ] / 2h ,
    h=abs(x[i]-x[i-1])+0.0
    s= 3*f[i] - 4*f[i-1] + f[i-2]
    return ( s / (2* h))

def MidDiff(i):
    # // 中差微分
    h=abs(x[i+1]-x[i])+0.0
    return (0.5 * ( fx(x+h) - fx(x-h) ) / h)

x=[-0.3 , -0.1 , 0.1 , 0.3]
f=[-0.20431 ,  -0.08993 , 0.11007 , 0.39569]

#===========================
#前差微分 fi' =  [ -f(i+2) + 4f(i+1) -3 f(i) ] / 2h ,
n=2
for i in range (0 ,n):
    print('x= {%10.6f} '  %x[i] , '\t',end='')
    print("FordDiff : {%10.6f} " %( FordDiff(i) )  )

print('\n')
     
#===========================
#後差微分 fi' =  [ 3f(i) - 4f(i-1) + f(i-2) ] / 2h ,
n=3
for i in range (n,1,-1):
    print('x= {%10.6f} '  %x[i] , '\t',end='')
    print("BackDiff : {%10.6f} " %( BackDiff(i) )  )

   


輸出結果

========= RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/EX3-2.py ============
x= { -0.300000}  FordDiff : {  0.357850} 
x= { -0.100000}  FordDiff : {  0.785950} 


x= {  0.300000}  BackDiff : {  1.642150} 
x= {  0.100000}  BackDiff : {  1.214050} 
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

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