【Python-CFD】08:二維線性對流

2021-03-02 CFD之道

前面的案例大多數是一維的問題,從現在開始我們進入二維的世界。

事實上將一維問題擴展到二維甚至三維都是非常簡單的,採用相同的思路。在2D空間中,結構網格可定義為:

注意這裡所提到的結構網格,我們在後面還會詳細介紹。

因此,可定義一階差分格式:

下面來處理二維線性對流方程。

二維線性對流控制方程為:

這裡時間項採用向前差分,空間項採用向後差分,離散方程可寫成以下格式:

式中,i為x方向角標,j為y方向角標,n為時間項角標。

可得待求項:

採用初始條件:

邊界條件:

先用代碼將初始條件和邊界條件表達出來。

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

nx = 81
ny = 81
nt = 100
c = 1
dx = 2 / (nx - 1)
dy = 2 / (ny - 1)
sigma  = 0.2
dt = sigma * dx

x = np.linspace(0,2,nx)
y  = np.linspace(0,2,ny)
u = np.ones((ny,nx))
un = np.ones((ny,nx))
u[int(0.5/dy):int(1/dy+1), int(0.5/dx):int(1/dx+1)] = 2


fig = plt.figure(figsize=(12,8))
ax = fig.gca(projection='3d')
x,y = np.meshgrid(x,y)
surf = ax.plot_surface(x,y,u[:],cmap = cm.viridis)
plt.show()

初始條件如下圖所示。

下面開始迭代計算。我們可以分別採用循環和數組操作來實現,自己體會他們計算時間上的區別。

for n in range(nt + 1): ##loop across number of time steps
   un = u.copy()
   row, col = u.shape    for j in range(1, row):
       for i in range(1, col):
           u[j, i] = (un[j, i] - (c * dt / dx * (un[j, i] - un[j, i - 1])) -
                                 (c * dt / dy * (un[j, i] - un[j - 1, i])))
           u[0, :] = 1
           u[-1, :] = 1
           u[:, 0] = 1
           u[:, -1] = 1

fig = plt.figure(figsize=(11, 7), dpi=100)
ax = fig.gca(projection='3d')
x,y = np.meshgrid(x,y)
surf2 = ax.plot_surface(x, y, u[:], cmap=cm.viridis)
plt.show()

計算結果如下圖所示。

利用for循環計算速度很慢,下面改用數組運算試試。

for n in range(nt + 1): ##loop across number of time steps
   un = u.copy()
   u[1:, 1:] = (un[1:, 1:] - (c * dt / dx * (un[1:, 1:] - un[1:, :-1])) -
                             (c * dt / dy * (un[1:, 1:] - un[:-1, 1:])))
   u[0, :] = 1
   u[-1, :] = 1
   u[:, 0] = 1
   u[:, -1] = 1
fig = plt.figure(figsize=(11, 7), dpi=100)
ax = fig.gca(projection='3d')
x,y = np.meshgrid(x,y)
surf2 = ax.plot_surface(x, y, u[:], cmap=cm.viridis)
plt.show()

相同的計算結果,如下圖所示。

本案例中,利用for循環所需的計算時間約為數組運算的400倍。

給大家推薦一本神書《批判性思維》

相關焦點

  • Julia CFD|00 系列說明
    整個系列內容包括:01 一維線性對流02 一維非線性對流03 計算穩定性與CFL條件04 一維擴散05 一維Burgers方程06 計算效率及數組操作07 二維線性對流08 二維非線性對流09 二維擴散10 二維
  • python線性回歸
    或者為了簡化,乾脆將b視為k0·x0,,其中k0為1,於是我們就有:   二.代碼實現本次,我們將用iris數據集實現單元線性回歸的機器學習,使用boston數據集實現多元線性回歸的機器學習。在python中,單元線性回歸與多元線性回歸的操作完全一樣,這裡只是為了演示而將其一分為二。
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。# 工具:python3#固定導入import numpy as np #科學計算基礎庫,多維數組對象ndarrayimport pandas as pd #數據處理庫,DataFrame(二維數組)import matplotlib as mpl #畫圖基礎庫import matplotlib.pyplot
  • Python 線性分類模型簡介
    它是一個簡單的線性分類器,並且由於其算法很直觀,被認為是更多高級的機器學習和深度學習算法的基石。繼續閱讀來加深你對線性分類器的認識,以及如何使用它們進行圖像分類。Python線性分類模型簡介本教程的前半部分主要關注線性分類有關的基本原理和數學知識。總的來說,線性分類指的是那些真正從訓練數據中「學習」的有參分類算法。
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • 用Python求解線性規劃問題
    線性規劃簡介及數學模型表示線性規劃簡介一個典型的線性規劃問題線性規劃模型的三要素線性規劃模型的數學表示圖解法和單純形法圖解法單純形法使用python求解簡單線性規劃模型編程思路求解案例例1:使用scipy求解例2:包含非線性項的求解從整數規劃到0-1規劃整數規劃模型0-1規劃模型案例:投資的收益和風險問題描述與分析建立與簡化模型線性規劃簡介及數學模型表示線性規劃簡介在人們的生產實踐中
  • Python機器學習算法入門之梯度下降法實現線性回歸
    背景        文章的背景取自An Introduction to Gradient Descent and Linear Regression,本文想在該文章的基礎上,完整地描述線性回歸算法。部分數據和圖片取自該文章。沒有太多時間摳細節,所以難免有什麼缺漏錯誤之處,望指正。
  • 談CFD計算發散原因
    8 對流項離散對流項的離散格式對收斂性的影響很多cfd的書上都有介紹。 一般而言低階格式較穩定,高階穩定性則較差。9 不合適的初始場對於cfd計算初始場往往設置具有較大的隨意性,特別是對於穩態問題更是如此。如果設置的初值偏離真實物理量太遠會造成一開始就發散。
  • Python 機器學習:多元線性回歸
    python機器學習:線性回歸往下講,這篇文章要講解的多元線性回歸。1、什麼是多元線性回歸模型?當y值的影響因素不唯一時,採用多元線性回歸模型。例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關係,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
  • 用Python的Scikit-Learn庫實現線性回歸
    線性回歸理論代數學中,術語「線性」是指兩個或多個變量之間的線性關係。如果在二維空間中繪製兩個變量之間的關係,可以得到一條直線。線性回歸可以根據給定的自變量(x)預測因變量值(y),而這種回歸技術可以確定x(輸入)和y(輸出)之間的線性關係,因此稱之為線性回歸。如果在x軸上繪製自變量(x),又在y軸上繪製因變量(y),線性回歸給出了一條最符合數據點的直線,如下圖所示。得出線性方程大概是:
  • 數學建模(一):用python解決線性規劃問題
    線性規劃說起來很高端,但實際上在高中學習過數學的同學應該對此不陌生。舉個慄子,工廠生產甲、乙兩種商品,其需要A、B、C三種資源,每種產品資源消耗量及單位產品銷售後所能獲得的利潤值以及這三種資源的儲備如下表所示:消耗資源ABC銷售利潤甲94370乙4610120資源儲備360200300線性規劃問題可以表述為一個目標函數與一系列約束條件
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • sklearn機器學習心得—線性回歸|粉絲投稿1
    ,也是重要的算法之一,基本上第一次接觸的機器學習算法就是線性回歸了。因為相對其他算法而言,我覺得線性回歸是相對比較容易的算法,從某種意義上來說,在學習函數的時候已經開始接觸線性回歸了,只不過那個時候並沒有涉及到誤差項,其實在中學的時候就有接觸了,學習的最小二乘法就是啦~~1).對於坐標系中給定的點,我們希望用一條線或是一個類似於:f(x)=θ0+θ1*x1+θ2*x2_...θn*xn 方程來擬合這寫數據點,這就是我們說的回歸了2).這次我們要用的是
  • 多重線性回歸
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸#數據準備
  • 了解線性回歸的數學原理:線性回歸背後的微積分
    線性回歸通常是任何機器學習課程的起點。目的是預測輸入變量與目標變量之間的線性關係。天真的情況是穿過空間原點的直線。在這裡,我們僅限於二維空間,即笛卡爾平面。讓我們從y = mx格式開始逐步發展,然後從y = mx + c回歸開始。
  • Abaqus熱分析中對流係數的定義
    利Abaqus進行熱分析對工業生產有很大的指導意義,然而,無論是進行單純的傳熱分析還是完全的熱-力耦合分析,對流邊界條件往往必不可少。因此,下面簡單介紹一下Abaqus中對流邊界條件的定義。通過臨近流體加熱或冷卻的自由表面為對流邊界,它會通過邊界和周圍環境間的溫差丟失或獲取熱能。q=-h(θ-θ∞)其中h為對流係數。
  • 線性代數學習之線性相關,線性無關與生成空間
    說了這段話是不是還是比較抽象,下面則以二維平面的角度來直觀感受一下線性相關,按著線性相關的定義:其實在二維平面中,只要是兩個向量不共線,就可以說這兩個向量是線性無關的,在三維空間中,三個向量不共面,則這三個向量線性無關。最後對於線性相關和無關的結語為:
  • python性能提高10倍的通用方法
    這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表要高效的多,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫,在整個python生態中佔有舉足輕重的作用,本篇文章旨在講解如何藉助它來提升python的計算性能。
  • 用 Python 進行多元線性回歸分析(附代碼)
    很多人在做數據分析時會經常用到一元線性回歸,這是描述兩個變量間統計關係的最簡單的回歸模型。但現實問題中,我們往往會碰到多個變量間的線性關係的問題,這時就要用到多元線性回歸,多元線性回歸是一元回歸的一種推廣,其在實際應用中非常廣泛,本文就用python代碼來展示一下如何用多元線性回歸來解決實際問題。圖1.