⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stabilityfactors.py

📁 利用C
💻 PY
字号:
#!/usr/bin/env pythonfrom numpy import *from numpy.linalg import normfrom scipy.linalg import expmdef getUU(val, t, U) :  dummy, u = min(zip(abs(t-val), U), key=lambda u:u[0])  return udef stabilityfactors(t, U, Jacobian, show_progress=True, plot=True) :  # Initial data for the dual  psi = array((1, 0, 0))  k   = 0.025  T   = t[len(t)-1]  tt  = k  A = [0]; B = [0]  S =  [0.0]; tS = [0.0]  lastprogressprint = 0  if show_progress :    print "Computing stability factor as function of time"  while tt < T :    if show_progress and tt/T > lastprogressprint+0.05 :      # show simple text based progress bar      length = 70      progress = tt/T      print "-"*length      print "%d%%" % int(100*progress),      print "*" * (progress*length-len("%d%%" % progress))      print "-"*length      lastprogressprint = progress    UU = getUU(tt, t, U)    JT = transpose(Jacobian(UU));    A.append(JT)    # Compute new matrix exponential    E = expm(k*JT)    # Multiply solution matrices from the right    B[1:] = [dot(b,E) for b in B[1:]]    B.append(E)    # Compute stability factor    sum = 0.0    for A_j, B_j in zip(A[1:], B[1:]) :      phi = B_j*psi      sum = sum + k * norm(A_j * phi)    # Save result    S.append(sum)    tS.append(tt)    # Next time step    tt = tt + k  if show_progress : print "Done"  if plot :     import pylab    pylab.figure(1)    pylab.semilogy(tS, S)    pylab.xlabel('T')    pylab.ylabel('S')    pylab.show()if __name__ == '__main__' :  t = fromfile('solution_t.data', sep=" ")  U = fromfile('solution_u.data', sep=" ")  U.shape = (len(U)/3, 3)  def Jacobian(u) :    # The usual constants    s = 10.0;    r = 28.0;    b = 8.0/3;    return array([[ -s      , s   , 0     ],                  [ r - u[2], -1  , -u[0] ],                  [ u[1]    , u[0], -b    ]])  stabilityfactors(t, U, Jacobian)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -