有限元方法入門編程

2021-02-13 科研九宮格

我是張運霄,歡迎來到學習的最優體驗

解微分方程有很多數值方法,有限差分,有限元,有限體積,邊界元等,它們本質上是用不同的方式取離散化微分方程。今天說一下有限元方法入門編程

  問題描述  

我們有如下問題,要求解u(x)。理論部分如下,選定基函數,基函數屬於勒貝格空間(見附錄),我們對目標微分方程兩邊乘以測試函數後分部積分,得到弱格式,最終得到一個線性系統,求解線性方程即可得到微分方程的近似解。

  編程實現(只核心代碼) 

1 剛度矩陣A計算

for n in range(N):    E = Tb[:,n]    for alpha in range(Nlb):        for beta in range(Nlb):            ff = lambda x: c(x)*(-1)**(alpha+beta)/h**2            A[E[beta],E[alpha]] += quad(ff,P[E[0]],P[E[1]])[0]

2 力向量b計算

for n in range(N):    E = Tb[:,n]    for beta in range(Nlb):        ff = lambda l: f(l)*psi(l,E,beta)        b[E[beta]] += quad(ff,P[E[0]],P[E[1]])[0]

3 邊界條件處理

for k in range(Nbn):    if boundary[0][k] == 'Dirichlet':        i = boundary[1][k]        A[i,:]=0        A[i,i]=1        b[i]=g(Pb[i])

4 求解與誤差計算

u = solve(A, b)u_exact = guu = u_exact(Pb)error = max(abs(u - uu))print(error)

5 作圖

  附錄:有限元理論中涉及到的幾個概念  

支集

一個函數的支集是它定義域裡使得函數不為零的範圍構成的子集

例如:delta(x)的支集為{0},因為它只在0處等於1

    

緊支集

有邊界的支集

[1,3]為緊支集,[1,+inf)不是

函數可導性分類

C^0 所有連續函數

C^1 一階可導且導數連續的集合

C^k 所有k階可導且導數連續的函數集合

C^inf 無限可導

弱導數

如果下式成立(int為積分)

int{a,b}{wv} = -int{a,b}{uv'}

則w是u的弱導數

勒貝格積分 Lebesgue integral

黎曼積分把積分區域縱向離散

勒貝格積分把積分區域橫向離散

勒貝格空間 Lebesgue spaces,L^p spaces

有限元空間與p-範數構成的空間(p-範數不為無窮)


p-範數

def norm_f(f,a,b,p):    """    ||x||_p = int{a,b}{|f|**p}**(1/p)    """        if p == "inf":        fp = lambda x: np.abs(f(x))        return fmin(fp)    fp = lambda x: np.abs(f(x))**p    return quad(fp,a,b)[0]**(1/p)


半賦范 seminorm

回顧範數norm的性質如下

commutes with scaling

obeys triangle inequality

zero only at the origin

半賦范少了範數的第三條,也就是不在原點的向量也可能範數為0。

像這樣:x=[1,0,0], 但  ||x|| = 0


賦范向量空間 normed vector spaces

向量V和範數||·||構成的空間(V,||V||)


半賦范向量空間 seminormed vector spaces

向量V和範數p-norm構成的空間(V,p)


內積空間

向量V和內積<,>構成的空間(V,<,>)

內積空間是歐幾裡得空間(三維)的擴展(到無窮維)

歐幾裡得空間中的內積擴展為點乘


度量空間 metric space

一個集合M及其度量d(一般是個函數)構成的空間(M,d)


巴拿赫空間 Banach space

巴拿赫空間是完備賦范向量空間 complete normed vector space


索博列夫空間 Sobolev space

向量V和L^p範數構成的空間

W(k,p),k表徵導數性質,p表徵範數性質


希爾伯特空間 Hilbert space

當p=2時

H^k = W(k,2)


  參考  

對有限元編程感興趣的可以去b站看何曉明的有限元編程短課,每周末直播。

https://en.wikipedia.org/wiki/Function_space

長按關注學習的最優體驗收穫更多


相關焦點

  • 大牛文章 有限元計算中的誤差來源與處理方法
    ▲張老師的書(點擊圖片放大)在有限元計算中,用戶最關心自己計算的結果是否準確與合理,那麼今天就和大家談談有限元計算的誤差來源,按照誤差來源類型主要分為兩類:>1.有限元理論假設引入的誤差有限元這種數值計算方法,為了實現對現實問題的計算,引入一些力學假設,即(1)連續介質假設,認為計算模型是理想連續,沒有孔洞,即位移具有單值性,但是實際產品在加工中難以避免會引入初始的孔洞缺陷,例如鑄造件。
  • 零基礎如何入門學習電腦編程?
    零基礎如何入門學習電腦編程?有哪些好的方法呢?現在帶著疑問一起去了解一下吧。1、了解編程歷史的意義了解一些編程的實質遠比知道如何編程更有意義,不要在編程是怎麼回事的情況下就去學習編程,這樣對你的學習是十分不利的,作為一個編程愛好者,知道計算機的工作原理,這應該是一件再正常不過的事。
  • 電腦入門程式語言
    今天和大家介紹一下電腦入門編程學什麼語言更合適。首選python語言,python 是一門開源免費、通用型的腳本程式語言,現在社會上會python語言的人很吃香的。它上手簡單,功能強大,堅持「極簡主義」。
  • ...元視頻教程自學入門進階課程-學習資料包ABAQUS有限元CAE軟體...
    本套教程僅針對在ABAQUS自身中進行有限元建模進行講解,不含如何在HyperMesh中完成ABAQUS格式有限元建模。但是只要入門了ABAQUS和HyperMesh很容易使用HyperMesh進行ABAQUS格式有限元建模。
  • 基於模板元編程的量綱檢測方法
    針對這些問題,提出一種基於模板元編程的量綱檢測方法TADA(TMP-bAsed Dimensional AnalysisMethod),其基本思路是利用程序設計語言自身的模板元編程(Template Meta Programming,TMP)功能,讓編譯器在編譯時對程序中的量綱進行準確性檢測,從而可以避免Osprey方法的計算量大等諸多問題。
  • 一種基於模板元編程的量綱檢測方法
    針對這些問題,提出一種基於模板元編程的量綱檢測方法TADA(TMP-bAsed Dimensional AnalysisMethod),其基本思路是利用程序設計語言自身的模板元編程(Template Meta Programming,TMP)功能,讓編譯器在編譯時對程序中的量綱進行準確性檢測,從而可以避免Osprey方法的計算量大等諸多問題
  • 精研多年,計算瞬間,具有國際水平的有限元軟體FEPG的特色
    五十年代末出現了有限元方法。有限元方法原則上可以求解任何複雜的偏微分方程和任何複雜的求解區域問題,但程序比較複雜,計算量比較大。有限元軟體是高科技大廈的重要支柱     由於有限元方法能求解複雜區域的偏微分方程問題,因此一出現就受到工程師,尤其是結構力學工程師的普遍歡迎和重視。根據有限元方法編制的程序即有限元軟體應運而生。
  • 9.9元學習Python編程學完月薪2萬5 真相併非那麼簡單
    編程就是其中之一。在各大程式語言中,Python入門容易,也成為很多培訓機構最好的廣告代言人,只要9.9元就能學習... 21世紀了,什麼技能最重要?編程就是其中之一。在各大程式語言中,Python入門容易,也成為很多培訓機構最好的廣告代言人,只要9.9元就能學習Python編程,學完月薪就能2萬5。
  • 推薦6歲+,編程入門啟蒙,培養孩子的邏輯思維
    其實,編程的語言一直在不斷更新,比如從最早的BASIC,到PASCAL、C語言, 從C++,到JAVA等等,特別是現在隨著網絡的普及,智能家電越來越多的地方都是使用到編程,正是程式設計師提前設定好各種程序,像洗衣機,電飯煲等等,只不過它們所採用的程式語言不同而已。
  • 程式設計師編程入門必知!程式設計師需要學什麼
    什麼是編程? 編程就是讓計算機為解決某個問題而使用某種程序設計語言編寫程序代碼,並最終得到結果的過程。資訊時代的大背景下,計算機的應用顯得舉足輕重,精通計算機的人才對於龐大的市場需求量來說還是顯得很匱乏,因此計算機行業的前景是很可觀的,但是也有不少人對於編程處於一竅不通的狀態,那編程該從何入手呢?
  • 資料| Python入門經典:以解決計算問題為導向的Python編程實踐
    from=leiphonecolumn_res0429內容簡介 《Python入門經典:以解決計算問題為導向的Python編程實踐》是一本系統而科學的Python入門教程,美國密西根州立大學等多所美國知名高校採用其作為程式語言的入門教材,被奉為經典。
  • Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信
    在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。
  • 一篇文章入門時域有限差分方法(FDTD)
    年提出,是求解Maxwell方程的一種方法,其核心思想是將求解空間離散成笛卡爾坐標上的長方體網狀結構,其中每個點賦值電場和磁場,隨著時間變化每個點以蛙跳形式交替更新電場和磁場,從本質上講,FDTD是對電磁場問題的最原始最完善的模擬,具有非常廣泛的適用性。
  • 人工智慧入門必須攻克三道門檻:數學基礎、英語水平與編程技術
    廣義的說,人工智慧包含諸多不同方法,其主旨是讓程序像一個智能體一樣解決問題。機器學習是實現人工智慧的一種方法,它不完全依靠預先設計,而是從數據中進行總結,達到模擬記憶、推理的作用。
  • PLC編程入門課程 第四節 臺達PLC產品輸入與輸出介紹
    PLC編程入門課程 第四節 臺達PLC產品輸入與輸出介紹 2020-11-24 16
  • 以圓面積的計算闡述有限元方法的思想和實質
    假定我們並不知道圓面積的計算公式和三角形面積計算公式,現在需要通過有限元方法給出半徑為R的圓的面積計算公式。
  • .top域名:如何讓孩子入門編程,不妨記住這個網站
    隨著人工智慧的興起,帶動了少兒編程學習的趨勢,教育要從娃娃抓起,少兒編程逐漸成市場中的熱門話題和黑馬。獅子編程是一家專注少兒編程的在線教育平臺,主要面向7-12歲學生培養創新創意能力、編程能力、邏輯能力以及解決問題能力,通過圖形化編程工具、人工智慧語言以及算法語言的學習
  • 網際網路編程如何入門,學習路徑又是什麼?
    今天給大家來講一講網際網路學習編程以及如何入門等相關知識。
  • 有限元分析的發展趨勢
    摘要:1965年「有限元」這個名詞第一次出現,到今天有限元在工程上得到廣泛應用,經歷了三十多年的發展歷史,理論和算法都已經日趨完善。ADINA非線性有限元分析軟體由著名的有限元專家、麻省理工學院的K.J.Bathe教授領導開發,其單一系統即可進行結構、流體、熱的耦合計算。並同時具有隱式和顯式兩種時間積分算法。由於其在非線性求解、流固耦合分析等方面的強大功能,迅速成為有限元分析軟體的後起之秀,現已成為非線性分析計算的首選軟體。
  • 您知道有限元之父嗎?
    1961年開始歷任英國威爾斯大學教授、工程數值方法研究所所長和榮譽教授,聯合國教科文組織工程數值方法機構主席。這就是Argyris、Clough和Zienkiewicz等先輩於二十世紀六十年代發明的有限元方法的基本原理。