ååååå¦(MD)è¨ç®ã§å¾ããã座æ¨ãã¼ã¿ã«å¯¾ãã¦、SciPyã§ä¸»æååæããã¦ã¿ã。é常、座æ¨ã®ãã©ã¸ã§ã¯ããªã¼ã«å¯¾ãã¦æå°äºä¹æ³ã«ãããã£ããã£ã³ã°ãè¡ã£ã¦ããPCAãè¡ãã®ã ã、ããã§ç¤ºãPCAã®ä»®å¼æ°trjã«æ¸¡ããã©ã¸ã§ã¯ããªã¼ã¯ãã£ããã£ã³ã°ãåæã«ãã¦ãã。 å®éã®ã³ã¼ãã§ã¯ãã£ããã£ã³ã°ãã、ARPACKã®å©ç¨ãã、ååã®éã¿ä»ãã®æ¹æ³ããããªãã·ã§ã³ã§å¼ã渡ãã¦å¦çããããã«ãªã£ã¦ããã®ã ã、ããã§ã¯å
容ãæ確ã«ããããã«、MDã®ä¸è¬çãªPCAã«çµã£ãã³ã¼ãã示ã。 MDè¨ç®ã«ãã10åã®æ§é ãåºåãããå ´å、Nååãæã¤ä¸æ§é ã®XYZ座æ¨ã®ãªã¹ã([N][3])ããã©ã¸ã§ã¯ããªã¼([10][N][3])ã¨ãã¦æ¸¡ã(trj)。ååéã¯è¦ç´ ãNåã®ãªã¹ãã¨ãªã(mass)。ååéã®ãªã¹ãã渡ããªããã°ååã®éã¿ä»ãã¯è¡ããã、Essential Dynamics (ED)ã®è¨ç®ã¨ãªã。 以ä¸、ã³ã¼ã。 from scipy import * def pca(trj, mass=[], num=2): """trj: 座æ¨ãã¼ã¿. / mass: ååéã®ãªã¹ã(éã¿ä»ããå¿
è¦ã§ããã°) / num: æ±ãã主æåã®æ°""" # 座æ¨ã®å¹³æ»å. R = [mat(crd).A1 for crd in trj] NDIM, N = len(R), len(R[0]) # å¹³åæ§é ã®ä½æ. R_mean = zeros(N) for i in range(NDIM): R_mean += R[i] R_mean /= NDIM # åæ§é ã¨å¹³åæ§é ã®å·®. for i in range(NDIM): R[i] -= R_mean # å¿
è¦ãªãååã®éã¿ä»ããè¡ã. if mass: sq_mass = [sqrt(m) for m in mass] for i in range(NDIM): for j in range(N): R[i][j] *= sq_mass[j // 3] # ...