python结构_科学网—Python与结构分析(1)---反应谱 - 潘超的博文
Python for Structural Analysis(1)
---Response Spectrum
對于結構地震分析而言,地震波的選擇非常重要。而地震波選擇的主要依據是地震波的頻譜特性,頻譜特性在實際應用中多以傅里葉譜(幅值譜、相位譜、功率譜等)及反應譜等來描述。傅里葉譜可以簡單地用Matlab中的fft()函數得到,但工程中使用更為廣泛的反應譜的計算則不是很方便,(用SeismoSignal可以很容易得到反應譜,但目前的版本只能算周期0~4s的反應譜;據說Midas也可以算但沒用過)。早就想自己DIY一個反應譜的小程序,但苦于編程水平太一般,擱置許久。近來因學習ABAQUS而認識了Python,感覺非常好用,第一個Python程序就先從反應譜開始吧。
其實原理很簡單,就是調用了Scipy.signal模塊的幾個函數,功能就是把同一文件夾下的地震波文件(時間-加速度)讀入生成反應譜并保存為文本。計算結果倒是準確,就是慢了點兒。我取了上海人工波和著名的El-centro波試算了一下,結果如下圖所示:
下面把代碼曬出來獻獻丑:
from glob import *
from scipy import *
from scipy.signal import *
from matplotlib.pyplot import *
for wf in glob('*.txt'):
dr = 0.05
eq = loadtxt(wf)
plot(eq[:,0],eq[:,1])
show() #繪制地震波
t0,t,dt = 0.01,6,0.05 #設定反應譜的周期范圍及間隔
T = arange(t0,t+dt,dt)
s=zeros(len(T))
w=2.*pi/T
num = (1.)
for i in range(0,len(w)):
den = (1.,2.*dr*w[i],w[i]*w[i])
SYS = (num, den)
t1, y, x = lsim(SYS,eq[:,1],eq[:,0])
s[i]=max(abs(y))
v=s*w #偽速度譜
a=v*w #偽加速度譜
X = zeros((len(T),4))
X[:,0]=T;X[:,1]=a;X[:,2]=v;X[:,3]=s
savetxt(wn.replace('.txt','.dat'), X, fmt='%4.4f', delimiter=' ')
plot(T,a) #繪制偽加速度譜
show()
總結
以上是生活随笔為你收集整理的python结构_科学网—Python与结构分析(1)---反应谱 - 潘超的博文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于HyperVID数据集训练自己的车型
- 下一篇: 模二多项式环 及 BCH码 的纯pyth