討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
fortran 如何算numerical的微分
更改我的閱讀文章字型大小
作者 : electro123(ggg)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/4 下午 04:40:27
我有一組data但是不想用回歸的方式找出解析函數,我想直接用data的數值下去算個點的微分,不曉得要用甚麼方法?
IMSL 似乎要給他函數才能算,但是我只有點沒有函數,我是有找到Richardson Extrapolation,但是要怎麼用呢?
麻煩高手幫忙解答,感激不盡.
作者 : fcwang(fortran) 程式設計甘苦談優秀好手貼文超過200則
[ 貼文 231 | 人氣 2831 | 評價 2440 | 評價/貼文 10.56 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/4 下午 10:09:11

>我有一組data但是不想用回歸的方式找出解析函數,我想直接用data的數值下去算個點的微分,不曉得要用甚麼方法?
>IMSL 似乎要給他函數才能算,但是我只有點沒有函數,我是有找到Richardson Extrapolation,但是要怎麼用呢?
>麻煩高手幫忙解答,感激不盡.
假設 Y[i] 為一數列, 其對應 X[i] 之等間距 為 h, 相對應於 (X[i],Y[i])的微分值為 Z[i] .

則Z[i]的計算公式 如下:

Z[i] = 0.5*h*(-Y[3]+4*Y*[2]-3*Y[1]) if i = 1
Z[i] = 0.5*h*(Y[i+1]-Y[i-1]) if i=2, ..., n-1
Z[i] = 0.5*h*(3*Y[n]-4*Y[n-1]+Y[n-2]) if i = n

本公式是採用 Lagrangian Interpolation polynomial of degree 2.
計算結果會有 Truncation Error 與 Roundoff Error.

參考資料為 page 320, IBM S/360 Scientific Subroutine Package.
這本文件大概你無法找到, 因為這是恐龍時代的文件, 可能在你(如果你是學生)尚未出生前,就出版的.
作者 : fcwang(fortran) 程式設計甘苦談優秀好手貼文超過200則
[ 貼文 231 | 人氣 2831 | 評價 2440 | 評價/貼文 10.56 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/5 上午 06:21:38

>假設 Y[i] 為一數列, 其對應 X[i] 之等間距 為 h, 相對應於 (X[i],Y[i])的微分值為 Z[i] .
>
>則Z[i]的計算公式 如下:
>
>Z[i] = 0.5*h*(-Y[3]+4*Y*[2]-3*Y[1]) if i = 1
>Z[i] = 0.5*h*(Y[i+1]-Y[i-1]) if i=2, ..., n-1
>Z[i] = 0.5*h*(3*Y[n]-4*Y[n-1]+Y[n-2]) if i = n
>
計算公式更正 ( 0.5*h 為1/(2h) 之誤)
Z[i] = 0.5/h*(-Y[3]+4*Y*[2]-3*Y[1]) if i = 1
Z[i] = 0.5/h*(Y[i+1]-Y[i-1]) if i=2, ..., n-1
Z[i] = 0.5/h*(3*Y[n]-4*Y[n-1]+Y[n-2]) if i = n
n 為資料個數.
Excel 也可以計算出結果.

作者 : electro123(ggg)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/5 上午 10:52:19
感謝大大的幫助我先試試看你提供的方法,不過我想再問一下用這方法要怎樣設定誤差的範圍呢?謝謝.
作者 : electro123(ggg)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/5 上午 11:00:57
更精確的說我要如何決定最佳化的間距h呢 ? 感謝您的回答.
作者 : fcwang(fortran) 程式設計甘苦談優秀好手貼文超過200則
[ 貼文 231 | 人氣 2831 | 評價 2440 | 評價/貼文 10.56 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/5 下午 03:10:26

>我想再問一下用這方法要怎樣設定誤差的範圍呢?

誤差的範圍受限於採用的方法, 我所介紹的方法算是簡單方便, 誤差容許在百分之一左右, 不會有甚麼問題, 過去(30多年前)我所用於工程計算是 OK的.



>更精確的說我要如何決定最佳化的間距 h 呢 ?

最佳化的間距 h 取決於 函數的性質是否簡單, 複雜的函數需要較小的間距, 才能提高精確度. 有時候是採 Try and Error方法來決定.


最重要的是要記得 "Garbage in, Garbage out" 的觀念, 如果你是理工背景, 應該知道 "有效數字" 的概念, 假設你輸入的全部數據能達到 1% 精確度, 則算出的結果之精確度最差是 2% (因為中間部分,有2個輸入數據之運算) 或 3% (頭尾兩端, 有3個輸入數據之運算).
換言之, 你要求算出的結果之精確度為 1.0% 則你輸入的全部數據必須能達到 0.3% 才有意義.

如果要更精確的話 (先決條件 是你輸入的數據 精確度 比你期望的結果之 精確度高 二或三 倍 以上), 可能要找更高階的 Algorithm. 我並非數學專家, 幫不上忙.
作者 : electro123(ggg)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/5/5 下午 03:33:58
非常感謝您的答覆,我會先試試看得到的結果怎樣再決定怎麼調整間距,謝謝.
 板主 : 徵求中
 > Fortran - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Fortran - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Fortran
1 f77f95 3300 
2 dennis 470 
3 cc 350 
4 smallpotato 320 
5 qq 290 
6 冼鏡光 230 
7 eraser 220 
8 小文 210 
9 iner 200 
10 wuda 160 
Fortran
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875