數值微分與數值積分(一)

2021-02-19 技術人的文學小天地

一、數值微分

(1)數值差分與差商

微積分中,任意函數f(x)在x0點的導數是通過極限定義的:

如果去掉極限定義中h趨向於0的極限過程,得到函數在x0點處以h(h>0)為步長的向前差分、向後差分和中心差分差分公式:

向前差分:

向後差分:

中心差分:

 

當步長h充分小時,得到函數在x0點處以h(h>0)為步長的向前差商、向後差商和中心差商公式:

向前差商:

向後差商:

中心差商:

函數f(x)在點x0的微分接近於函數在該點的差分,而f在點x的導數接近於函數在該點的差商。

 

 

(2)數值微分的實現

MATLAB提供了求向前差分的函數diff,其調用格式有三種:

①dx=diff(x):計算向量x的向前差分,dx(i)=x(i+1)-x(i),i=1,2,...,n-1。

②dx=diff(x,n):計算向量x的n階向前差分。例如,diff(x,2)=diff(diff(x))。

③dx=diff(A,n,dim):計算矩陣A的n階差分,dim=1時(默認狀態),按列計算差分;dim=2,按行計算差分。

注意:diff函數計算的是向量元素間的差分,故差分向量元素的個數比原向量少了一個。同樣,對於矩陣來說,差分後的矩陣比原矩陣少了一行或一列。

另外,計算差分之後,可以用f(x)在某點處的差商作為其導數的近似值。

【例】設f(x)=sin x,在[0,2π]範圍內隨機採樣,計算f』(x)的近似值,並與理論值f』(x)=cos x進行比較。

>> x=[0,sort(2*pi*rand(1,5000)),2*pi];>> y=sin(x);>> f1=diff(y)./diff(x);>> f2=cos(x(1:end-1));>> plot(x(1:end-1),f1,x(1:end-1),f2);>> d=norm(f1-f2)
d =
0.0456

 

二、數值積分

(1)數值積分基本原理

在高等數學中,計算定積分依靠微積分基本原理,只要找到被積函數f(x)的原函數F(x),則可用牛頓—萊布尼茲(Newton-Leibinz)公式:

在有些情況下,應用牛頓—萊布尼茲公式有困難,例如,當被積函數的原函數無法用初等函數表示,或被積函數是用離散的表格形式給出的。這是就需要用數值解法來求定積分的近似值。

求定積分的數值方法多種多樣,如梯形法、辛普森法,高斯求積公式等。它們的基本思想都是將積分區間[a,b]分成n個子區間[xi,xi+1],i=1,2,...,n,其中x1=a,xn+1=b,這樣求定積分問題就分解為下面的求和問題:

在每一個小的子區間上定積分的值可以近似求得,從而避免了牛頓—萊布尼茲公式需要尋求原函數的困難。

 

(2)數值積分的實現

①基於自適應辛普森方法

[I,n]=quad(filename,a,b,tol,trace)

②基於自適應Gauss-Lobatto方法

[I,n]=quadl(filename,a,b,tol,trace)

其中,filename是被積函數名;a和b分別是定積分的下限和上限,積分限[a,b]必須是有限的,不能為無窮大(Inf);tol用來控制積分精度,默認時取tol=10-6;trace控制是否展現積分過程,若取非0則展現積分過程,取0則不展現,默認時取trace=0;返回參數I即定積分的值,n為被積函數的調用次數。

【例】分別用quad函數和quadl函數求定積分的近似值,並在相同的積分精度下,比較被積函數的調用次數。

>> format long>> f=@(x) 4./(1+x.^2);>> [I,n]=quad(f,0,1,1e-8)
I =
3.141592653733437

n =
61
>> [I,n]=quadl(f,0,1,1e-8)
I =
3.141592653589806

n =
48
>> (atan(1)-atan(0))*4
ans =
3.141592653589793
>> format short

 

 

③基於全局自適應積分方法

I=intergral(filename,a,b)

其中,I是計算得到的積分;filename是被積函數;a和b分別是定積分的下限和上限,積分限可以為無窮大。

【例】求定積分。

被積函數文件fe.m:

function f=fe(x)f=1./(x.*sqrt(1-log(x).^2));

 

>> I=intergral(@fe,1,exp(1))>> I=integral(@fe,1,exp(1))
I =
1.5708

④基於自適應高斯—克朗羅德方法

[I,err]=quadgk(filename,a,b)

其中,err返回近似近似誤差範圍,其他參數的含義和用法與quad函數相同。積分上下限可以是無窮大(-Inf或Inf),也可以是複數。如果積分上下限是複數,則quadgk函數在複平面上求積分。

【例】求定積分。

被積函數文件fsx.m:

function f=fsx(x)f=sin(1./x)./x.^2;

 

>> I=quadgk(@fsx,2/pi,+Inf)
I =
1.0000

⑤基於梯形積分方法

已知(xi,yi)(i=1,2,...,n),且a=x1<x2<...<xn=b,求近似值。

I=trapz(x,y)

其中,向量x、y定義函數關係y=f(x)。

trapz函數採用梯形積分法則,積分的近似值為:

其中,hi=xi+1-xi

可以用以下語句實現:

sum(diff(x).*(y(1:end-1)+y(2:end))/2)

【例】設x=1:6,y=[6,8,11,7,5,2],用trapz函數計算定積分。

>> x=1:6;>> y=[6,8,11,7,5,2];>> plot(x,y,'-ko');>> grid on>> axis([1,6,0,11]);>> I1=trapz(x,y)
I1 =
35
>> I2=sum(diff(x).*(y(1:end-1)+y(2:end))/2)
I2 =
35

 

(3)多重定積分的數值求解

求二重積分的數值解:

I=integral2(filename,a,b,c,d)

I=quad2d(filename,a,b,c,d)

I=dblquad(filename,a,b,c,d,tol)

求三重積分的數值解:

I=integral3(filename,a,b,c,d,e,f)]

I=triplequad(filename,a,b,c,d,e,f,tol)

【例】分別求二重積分和三重積分。

 

>> f1=@(x,y)exp(-x.^2/2).*sin(x.^2+y);>> I1=quad2d(f1,-2,2,-1,1)
I1 =
1.5745
>> f2=@(x,y,z)4*x.*z.*exp(-z.*z.*y-x.*x);>> I2=integral3(f2,0,pi,0,pi,0,1)
I2 =
1.7328

相關焦點

  • 人工邊界方法與偏微分方程數值解
    中國科學院數學與系統科學研究院餘德浩研究員等的合作研究項目 「人工邊界方法與偏微分方程數值解」喜獲2008年度國家自然科學二等獎。
  • 偏微分方程(組)的數值解法介紹
    上篇文章——鋰離子電池模型介紹一、偏微分方程(組)的解法介紹引導
  • 偏微分方程:作用、分析與數值求解
    報告題目:偏微分方程:作用、分析與數值求解 報 告 人:江松 研究員 北京應用物理與計算數學研究所 報告時間:2020年9月27日9:00 報告地點:數學學院二樓報告廳 校內聯繫人:張然zhangran@jlu.edu.cn 報告摘要: 科學與工程技術
  • 【奮進•足跡:扶持建設學科巡禮】之七——分數階微分方程的數值方法
    打造科研梯隊  培養學術骨幹  引領學生成長     ——「分數階微分方程的數值方法」學科巡禮一、學科概況‍      「分數階微分方程的數值方法」學科團隊主要針對分數階微分算子和分數階微分方程的非局部特性,設計強健而高效的算法,並在計算機軟體環境中進行測試和數值模擬。
  • 結構動力學方程常用數值解法:方法概述
    從數學角度看,這是一個常係數的二階線性常微分方程組,計算數學領域,常微分數值算法常用的有兩大類:1. 針對一階微分方程數值積分法發展的歐拉法,中點法,Rugge-kutta(龍格—庫塔)方法。對結構動力學問題的數值求解,常用的有兩大類:1. 坐標變換法:它是對結構動力方程式,在求解之前,進行模態坐標變換,實際上就是一種Rize變換,即把原物理空間的動力方程變換到模態空間中去求解。現在,普遍使用的方法是模態(振型)迭加法。2.
  • 微分和積分電路的異同
    輸出電壓與輸入電壓成微分關係的電路為微分電路,通常由電容和電阻組成;輸出電壓與輸入電壓成積分關係的電路為積分電路,通常由電阻和電容組成。
  • 「隨機偏微分方程數值計算研討會」在吉林大學召開
    9月14日—9月15日,由國家自然科學基金數學天元基金和吉林大學共同資助,天元數學東北中心和吉林大學數學學院聯合承辦的「隨機偏微分方程數值計算研討會
  • VisualFortran常用數值算法集(圖)
    本書共有數值計算中常用的Visual Fortran子過程近200個。內容包括:解線性代數方程組、插值、數值積分、特殊函數、函數逼近、隨機數、排序、特徵值問題、數據擬合、方程求根和非線性方程組求解、函數的極值和最優化、傅立葉變換譜方法、數據的統計描述、解常微分方程組、兩點邊值問題的解法和解偏微分方程組。每一個子程序都包括功能、方法、使用說明、子程序和例子五部分。本書的所有子過程都在Visual Fortran5.0版本上進行過驗證,程序都能正確運行。
  • MATLAB常微分方程數值求解
    有一類常微分方程,其解的分量有的變化很快,有的變化很慢,且相差懸殊,這就是所謂的剛性問題 (Stiff) 。對於剛性問題,數值解算法必須取很小步長才能獲得滿意的結果,導致計算量會大大增加。解決剛性問題需要有專門方法。
  • 數值天氣預報——現代天氣預報的基石
    這主要得益於數值天氣預報的不斷發展。可能大多數人對數值天氣預報比較陌生,下面就為您揭開數值天氣預報的神秘面紗。數值天氣預報是根據大氣動力學原理,以描寫大氣演變過程的流體力學和熱力學的方程組建立數學模型,在一定的邊值條件下輸入觀測資料,用大型計算機對這些偏微分方程進行數值求解,預測未來一定時段大氣運動狀態和天氣現象的方法。聽起來是不是很高大上!
  • 期權定價的常用數值方法
    按照我個人的分類,期權定價的數值方法分為五個大類:解析解方法,樹方法,偏微分方程數值解方法,蒙特卡洛方法,傅立葉變換方法。一個期權定價問題,其實就是根據已知的隨機微分方程(SDE)模型,然後來求解關於這個隨機過程函數表達式的過程。
  • 偏微分方程高效數值方法研討會在烏魯木齊召開
    8月13日至18日,由973計劃項目「適應於千萬億次科學計算的新型計算模式」組織發起的國際會議偏微分方程高效數值方法研討會在烏魯木齊召開。來自美國、英國、德國、瑞士、挪威、中國香港、中科院數學與系統科學研究院(以下簡稱中科院數學院)、北京應用物理與計算數學所、新疆大學等國內外高校和科研單位的50多名專家學者參加了會議。
  • RC電路(積分電路,微分電路)
    積分電路的作用是:消減變化量,突出不變量。RC電路的積分條件:RC≥Tk,Tk是脈衝周期,積分電路可將矩形脈衝波轉換為鋸齒波或三角波,還可將鋸齒波轉換為拋物波。電路原理很簡單,都是基於電容的衝放電原理,這裡就不詳細說了,這裡要提的是電路的時間常數R*C,構成積分電路的條件是電路的時間常數必須要大於或等於10倍於輸入波形的寬度。
  • 「首席架構師推薦」數值計算庫一覽表
    用於數值計算的uBLAS c++庫deal.II是一個支持所有偏微分方程有限元解的庫。Dlib是一個現代c++庫,易於使用線性代數和優化工具,這些工具得益於優化的BLAS和LAPACK庫。Math.NET Numerics 旨在為科學、工程和日常應用中的數值計算提供方法和算法。涵蓋的主題包括特殊函數,線性代數,概率模型,隨機數,插值,積分變換等。麻省理工學院/X11許可下的自由軟體。Measurement Studio是一個商業集成套件UI控制項和類庫,用於開發測試和測量應用程式。
  • 科學大講堂 | 中科院院士、應用數學與計算數學專家江松院士闡述偏微分方程的應用、分析與數值
    講座中,江松院士首先介紹了什麼是偏微分方程(PDE),指出偏微分方程是一門非常古老的學科,是一種具有實際物理背景,蘊含信息非常廣泛的一類方程,並介紹了各種各樣用於描述世間萬物的偏微分方程,以及偏微分方程如何逐漸地從一個單一的學科變成研究解決其他數學分支(如幾何,拓撲,動力系統,概率統計等)問題的一個關鍵工具
  • 001一階微分方程
    定義 含有未知函數的導數階數為一的方程即為一階微分方程解法原函數求解或折線積分.就數值而言, 積分得一階線性微分方程
  • 【國際講堂】外教主講的研究生全英文課程「隨機偏微分方程數值解法簡介」開課通知
    聯  系  人:理學院 楊自豪 老師 聯繫方式:15398004619 yangzihao@nwpu.edu.cn課程名稱:Introduction to Numerical Methods for Stochastic Differential Equations(隨機偏微分方程數值解法簡介
  • 好書推薦:金融學與經濟學中的數值方法——基於MATLAB編程(原書第2版)
    本書分為5部分:第1部分介紹理論背景,包括編寫背景和金融理論等內容;第2部分介紹數值方法,包括數值分析基礎、數值積分、偏微分方程的有限差分法和凸優化等內容;第3部分介紹權益期權定價,包括期權定價的二叉樹與三叉樹模型、期權定價的蒙特卡羅方法和期權定價的有限差分法;第4部分介紹高級優化模型與方法,包括動態規劃、有追索權的線性隨機規劃模型和非凸優化等內容,第5部分為附錄。本書使用MATLAB為軟體工具。
  • 帶你用matlab輕鬆搞定微分方程
    考慮大多數讀者對微分方程求解方法比較陌生,所以過冷水本期簡單普及一下微分方程的求解問題。關於微分方程你需要了解:含有未知的函數及其某些階的導數以及其自變量本身的方程稱為微分方程。如果未知函數是一元函數,則稱為常微分方程。如果未知函數是多元函數,則稱為偏微分方程。聯繫一些未知函數的一組微分方程稱為微分方程組。
  • 熱導方程的Matlab數值解方法
    熱傳導方程就是溫度所滿足的偏微分方程,它的解給出任意時刻物體內的溫度分布。為了建立熱導方程,我們首先介紹熱導系統置於x軸,考查系統在任意x處的橫截面上的一個單位面積,設熱流沿x軸方向傳遞,x處的溫度為u(x),溫度梯度為du(x)/dx。傅立葉指出:在單位面積內流經該單位面積的熱量q與該處的溫度梯度成正比即: