关于2019高压油管网格搜索可视化Python作图
生活随笔
收集整理的這篇文章主要介紹了
关于2019高压油管网格搜索可视化Python作图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網格搜索
網格搜索,通過在一張網內對x,yx,yx,y離散搜索,可以得出關于目標函數在每一個x,yx,yx,y散點的值,做可視化的時候我想到了山峰的三維表面圖。
一個簡單的事例
已知xxx的范圍,yyy的范圍,還有對應每一個x,yx,yx,y的高程數據zzz,我們就可以利用python作圖。
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3])
z = np.array([[122, 424, 221, 231, 742],
[231, 421, 423, 523, 215],
[213, 124, 231, 422, 633],
[151, 532, 241, 734, 215]])
數據純屬胡編亂造,怎么樣,是不是很有趣。在這個示例代碼中,x,yx,yx,y的值我是從0開始設置的,步長為111,也就是正好對應著zzz的下標,但在實際應用過程中,xxx,yyy并不是從111開始的,而且zzz也一般是通過xxx,yyy確定的,所以需要用嵌套for循環,再設置兩個下標變量,解決實際應用問題,請看以下代碼。
關于高壓油管此題的搜索可視化
import numpy as np import pandas as pd import matplotlib.pyplot as plt import mathdata = '附件3-彈性模量與壓力.xlsx' data = pd.read_excel('附件3-彈性模量與壓力.xlsx') # 導入附件3數據 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x_pandas_list = data[u'燃油密度(mm3/ms)'] # 附件3 燃油密度列數據 y_pandas_list = data[u'壓力(MPa)'] # 附件3 壓力列數據coefficient1_numpy_list = np.polyfit(x_pandas_list, y_pandas_list,2) # [ 10784.65349198 -15693.86029255 5648.09019803]y=壓強 x=密度擬合系數def ρ_P(x): # 密度轉壓力函數return coefficient1_numpy_list[0] * x ** 2 + coefficient1_numpy_list[1] * x + coefficient1_numpy_list[2]coefficient2_numpy_list = np.polyfit(y_pandas_list, x_pandas_list,2) # [-6.59843062e-07 5.23409641e-04 8.04251284e-01]y=密度 x=壓強擬合系數def P_ρ(x): # 壓力轉密度函數return coefficient2_numpy_list[0] * x ** 2 + coefficient2_numpy_list[1] * x + coefficient2_numpy_list[2]C = 0.85 # 流量系數d_a = 1.4 # 小孔處的直徑1.4mm r_a = d_a / 2 # 小孔處的半徑1.4mm A = S_a = math.pi * r_a ** 2 # 小孔處的面積1.5393804002589984mm2l_primary = 500 # 內腔長度500mm d_primary = 10 # 內腔直徑10mm r_primary = d_primary / 2 # 內腔半徑5mm S_primary = math.pi * r_primary ** 2 # 內腔橫截面積78.53981633974483mm2 V_primary = S_primary * l_primary # 內腔體積39269.90816987242mm3ρ0 = 0.85 # 初始100MPa壓力下的密度 ρ160 = P_ρ(160) # 160MPa壓力下的密度 0.8711048440368855mg/mm3 m0 = ρ0 * V_primary # 初始高壓油管油氣33379.42194439156mgt = 0 # 記錄時刻 t_ = 0.1 # 每隔0.01ms時間段刷新一次狀態 m = m0 # 記錄每一時刻高壓油管內的質量 初始為m0 P = 100 # 記錄每一時刻高壓油管內的壓強 ρ = 0.85 # 錄每一時刻高壓油管內的密度 P_list = [] # 壓強時刻表# 進油函數 參數t為時刻,t1為進油時間段 def enter(t, t1):global m, P, ρ # 全局變量,可做修改if 0 < t % (t1 + 10) < t1:Q = C * A * math.sqrt(2 * (160 - P) / ρ160) # 單位時間進油量det_m = Q * ρ160 * t_ # 0.01為步長 質量改變量m = m + det_m # 更新質量rou = m / V_primary # 更新密度P = ρ_P(rou) # 更新壓強else:pass# 出油函數 參數t為時刻,t0為出油時刻 def out(t, t0):global m, P, ρ # 全局變量,可做修改if t0 < (t % 100) < t0 + 0.2: # 第一段0~0.2msQ = (t - t0) % 100 * 100 # 在不同周期內時刻的流量det_m = Q * ρ * t_ # 0.01為步長 質量改變量m = m - det_m # 更新質量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新壓強elif t0 + 0.2 <= (t % 100) < t0 + 2.2: # 第二段0.2~2.2msQ = 20det_m = Q * ρ * t_ # 0.01為步長 質量改變量m = m - det_m # 更新質量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新壓強elif t0 + 2.2 <= (t % 100) <= t0 + 2.4: # 第三段2.2~2.4msQ = ((t - t0) * (-100) + 240) % 100det_m = Q * ρ * t_ # 0.01為步長 質量改變量m = m - det_m # 更新質量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新壓強else:passsum_min = 10000000000000 # 刷新壓力波動最小值 P_list_min = [] # 波動最小的壓力差表 i_best = 0 # 最優開閥門時長 j_best = 0 # 最優出氣時刻x = np.arange(0.285, 0.29, 0.001) y = np.arange(50, 60, 1) z = np.zeros([len(y), len(x)]) q = -1for i in x: # 遍歷開閥門時長 start->endq = q + 1p = -1for j in y: # 遍歷出氣時刻 start->endp = p + 1sum = 0 # 記錄壓力波動偏差t = 0 # 每次循環刷新時刻從0開始P_list = [] # 每次循環刷新壓力時刻表 為空表while t <= 5000: # 時間可修改,單位為ms 循環2000/t_次t = t + t_enter(t, i)out(t, j)P_list.append(P)sum = sum + abs(P - 100) # 每隔t_=0.01ms時刻記錄一下總波動 best=sum|P-100|z[p][q] = sumprint('開始遍歷:', 'i =', i, 'j =', j)print('壓差距離最優質值和(越小越好):', sum)if sum_min > sum:sum_min = sumi_best = ij_best = jP_list_min = P_listprint('最優開閥門時長為:', i_best, '最優出氣時刻為:', j_best)len_P_list = len(P_list) # 長度為設值遍歷長度個 x_numpy_list = np.arange(0, len_P_list * t_, t_) # 每隔0.01ms列一個x坐標與P_list對應plt.figure() # 創建一個繪圖對象 ax = plt.axes(projection='3d') # 用這個繪圖對象創建一個三維坐標軸對象 X, Y = np.meshgrid(x, y) ax.plot_surface(X, Y, z, cmap='viridis') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.show()總結
以上是生活随笔為你收集整理的关于2019高压油管网格搜索可视化Python作图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: elsevier中elsarticle模
- 下一篇: plsql链接oracle64位报错,P