Re: [討論] 數值積分

看板MATLAB作者 (eji)時間12年前 (2013/07/05 18:57), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《sikotu (sikotu)》之銘言: : 請問一下 : 現在我式子需要做兩次數值積分(不是做雙重積分) : 例如: : 1 1 : ∫ exp(∫ 2tx dx) dt : 0 0 : t和x為變數 : 先在指數做一次對x的數值積分 : 積分後為t的函數 : 接著指數函數再對t做數值積分 : 嘗試過許多遍一直積不出來... : 所以想來請教一下大家 : 感謝 <(_ _)> 你要做數值積分的話被積函數必須變數可分離 如你的例子可寫成 1 1 ∫ exp(t∫ 2x dx) dt 0 0 剩下的就很簡單了 f1=@(x) 2*x; I1=quad(f1,0,1,1e-15); f2=@(t) exp(I1*t); I2=quad(f2,0,1,1e-15) 如果變數不可分離就只能用符號運算 I=int(exp(int('2*x*t','x',0,1)),0,1) 答案為exp(1)-1 可以看兩個算出來的答案的差 er=double(abs(I-I2)) 基本上非常接近 不過用符號運算必須被積函數能夠求出反導函數才可以 也有可能裡面積分積得出來 但是外面的就積不出來 所以還有第三種作法 I3=int('2*x*t','x',0,1); eval(['f3=@(t) exp(',char(I3),');']) I4=quad(f3,0,1,1e-15) 這樣是把裡面的積分用符號運算算出結果 然後外面的積分用數值積分 這樣被積函數的要求只有裡面的積分可以寫出反導函數而已 當然你的例子是三種作法都可以 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.146.175

07/06 02:46, , 1F
謝謝eji熱心的幫忙,po文問問題的時候都沒有考慮得那麼仔細
07/06 02:46, 1F

07/06 02:49, , 2F
但是我的真實例子就是裡面的積分沒辦法寫出反導函數...
07/06 02:49, 2F

07/06 02:51, , 3F
裡面有cos,exp,coth函數相乘,所以才覺得頭疼...Orz...
07/06 02:51, 3F

07/06 17:36, , 4F
那可能做不太出來了 不過你還是可以把真實例子放上來看看
07/06 17:36, 4F

07/08 09:54, , 5F
先用linspace界定積分區間 再用trapz執行數值積分
07/08 09:54, 5F
文章代碼(AID): #1HrgQbn4 (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1HrgQbn4 (MATLAB)