日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【微分方程数值解】常\偏微分方程及其常用数值解法概述

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【微分方程数值解】常\偏微分方程及其常用数值解法概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

博主在這段時間將不斷更新用微分方程數值解的一些理論和算法問題,并以python為工具寫一些算法實現。在理論這塊課本上已經夠詳細與專業了,那就寫的簡單易懂一點吧?(???)?

直通鏈接:
常微分方程系列:
【微分方程數值解】常微分方程(一)歐拉方法和改進歐拉方法(附python算例,封裝類)
偏微分方程系列:
python與有限差分法(二)弦平衡問題(兩點邊值問題)內容梳理、算法求解與數值分析.
未完待續…

1.微分方程的種類

恩格斯是這樣來定義數學的:“數學是研究現實世界的量的關系與空間形式的科學 。”現實世界的東西一定程度上來說可以用數學上的方程來表示。

但在現實世界中,類似x^2 -x +1 =0這樣的方程能對應的現實問題基本沒有。大多數問題的數學建模是和所研究對象的變化率有關系的,例如彈性棉坐墊的彈力涉及到對位移的變化率,熱的傳導涉及到對時間的變化率。這個“變化率”在數學里的定義就是導數,所以就有了一類涉及到導數來描述問題的這類方程,這就是微分方程。理論上來說只要一個物體的狀態在變化,它的變化過程都是可以用微分方程描述刻畫的。

微分方程(model)是描述未知函數及其導數關系的方程。

如果現在建立了一個方程,它本身的狀態是沒有任何約束和說明的。但是我們知道,大部分研究都應該要有一個初始值:400米賽跑有起跑點和賽道,不是大家從各個地方亂跑400米就完了;研究導彈軌跡有初始坐標,在地上發射和山上發射是不一樣的。。。這就是對研究對象的狀態做一個事先的“約束與說明”。

又例如由弦的平衡方程導出的兩點邊值問題可以由下偏微分方程刻畫:

uxx=f,a<x<bu_{xx}=f ,a<x<buxx?=f,a<x<b
u(a)=α,u(b)=βu(a)=\alpha,u(b)=\betau(a)=α,u(b)=β

這個方程就給出了u在a處和b處空間的約束。同理,對時間也可以進行約束和說明。

初值問題:約束調節涉及到時間
邊值問題:約束條件涉及到邊界。根據對邊界的約束不同又可以細分為很多種,以后在講到。

再進一步,若所研究對象同時和多個自變量相關,那么這個對象的變化率自然也有多個,這時候方程涉及到“偏導數”,也就有了偏微分方程:

常微分方程(ODE)是指微分方程的自變量只有一個的方程。
偏微分方程(PDE)相比常微分方程其自變量存在兩個或以上,也就是說方程所要求解的是一個多元函數,刻畫的是未知函數及其偏導數的關系。

偏微分方程中二階最為典型常見,有橢圓形、拋物型、雙曲型三種,下給出這三種偏微分方程最簡形式:

  • 橢圓型方程
    uxx+uyy=f(x,y)u_{xx}+u_{yy}=f(x,y)uxx?+uyy?=f(x,y)
  • 拋物型方程
    ut=auxxu_t=au_{xx}ut?=auxx?
  • 雙曲型方程
    utt=a2uxxu_{tt}=a^2u_{xx}utt?=a2uxx?

注1:二階微分方程中也存在混合問題,在不同區域為不同的方程類型,這里不做討論
注2:橢圓方程不含時間變量只含空間變量,而拋物和雙曲既含時間變量也含空間變量

2.用數值解的目的

假設前面的一切工作:建模、約束都準備好了,但是對于一個給定的微分方程,只有極少數的情況能直接獲得其解析解,也就是說要直接通過數學手段求解這些微分方程是很困難的,所以就有了數值方法這一求解手段,這就是計算數學專業所干的。

我們在用數值方法求解微分方程時,由于計算機不能處理連續的數學方程,所以在用計算機處理問題時,必須先將一個無限的連續問題通過一些特殊的方法離散化,使之成有限形式的線性代數方程組,再將這個線性代數方程組交給計算機求解以達到我們的目的。

常微分方程的數值解法

  • 歐拉法。由此思想衍生出后退歐拉法和改進歐拉法
  • 龍格庫塔方法。

偏微分方程的數值解法

  • 有限差分法(FDM,finite difference method)。偏微分方程數值解法中理論、思想都最好理解的方法,本質是用差商刻畫偏導數。重點在差分格式的選擇。系列會在專欄里更新
  • 有限元法(FEM,finite element method)。理論體系已經基本完善,學習需要一定的理論準備工作。此方法廣泛應用在工程領域,是機械產品動、靜、熱特性分析的重要手段。在國內由馮康前輩開創。待更新
  • 有限體積法:和有限元法有些類似。待更新
  • 譜方法。

3.如何衡量一種數值方法的優良?

衡量一個數值方法得到的解好不好,一是要看它和正確解的逼近程度,差太多了自然不行,這個“差的多”在數學里有一套度量的方法;另外一個要看他的運算時間,要是有方法A能一分鐘算對,方法B算一天算對,那B當然要拿出去槍斃了。

對數值方法來說可以用【解的對】和【解的快】兩個詞來衡量其優劣。

“解的對”是數值解方法的前提,如果得到的解不是收斂于真解的,那數值解得到的結果毫無意義,建立在數值解方法理論不出錯的前提才能再討論算法速度。

  • 收斂性討論:考慮算法在數學理論上是否正確,能否收斂于真解。這種【是否收斂】以及【收斂的好與壞】一般用范數來估計。
  • 穩定性討論:在出現一個小的“干擾”的情況下,這個小干擾帶來的影響是否會擴大?討論這個小干擾是必要的,因為類似截斷、四舍五入這類方法一定會帶來小干擾(也就是誤差,因為丟掉了一些東西),這個小干擾本身并不大但是一定會產生,并且如果這個干擾還會擴大的話(例如運算涉及到迭代),他就會對結果產生巨大的影響。 穩定性一般在需要迭代的時候要討論。如果不穩定,那么這個小干擾會隨著迭代的過程越來越大。

“解的快”考慮收斂的速度、算法的復雜度。兩種方法的結果一樣,當然是算的越快的方法越好。

3.1 如何在程序中驗證算法的“對”與“快”?主要有以下幾種方法。
  • 圖像:通過matplotlib繪圖看看數值解是否趨于真解。算法理論得到的解是否正確和繪圖對比之間是可以相互驗證的。
  • 數值表:通過數值解與對應位置真解的差可以刻畫收斂速度or收斂階。同樣,算法理論的收斂階和該數值表是可以相互驗證的。
  • 實際算法運行的時長比較
3.2 如何對數值解進行優化?
  • 從數學理論的角度:一般來說提高精度的代價是提高復雜度,可以考慮如何在不損耗太多精度的情況下,降低復雜度(例如非常多次的迭代運算就是復雜度高的體現)。典型例子是后退歐拉法向改進歐拉法的過渡。
  • 從程序的角度:降低代碼邏輯層面的運算量

4.將會用到的python庫

  • numpy:科學計算的基礎包。提供了高效的數組(array)對象
  • SciPy:是一個用于數學、科學、工程領域的常用軟件包,可以處理插值、積分、優化、圖像處理、常微分方程數值解的求解等問題。
  • pandas:使python成為強大數據分析工具的重要因素之一,提供了精細的索引功能來進行選取數據子集的操作。
  • Matplotlib:最流行的繪制數據圖表的python庫
  • fealpy :湘潭大學魏華祎老師開發的有限元法開源庫。國內的開源有限元程序做的非常少。feon有限元庫為python2.7,不知道更新沒有。科研且想用python,魏老師的fealpy是最好的選擇,工業計算可能還是不合適。

如果這篇文章對你有幫助,歡迎點贊關注~(///)

總結

以上是生活随笔為你收集整理的【微分方程数值解】常\偏微分方程及其常用数值解法概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。