24小时热门版块排行榜    

查看: 2062  |  回复: 6

glazio

铁虫 (小有名气)

[求助] 用python求7个原子的回转半径

写代码上我是门外汉,我自己算出来的结果怀疑不对,在这里请python达人指点一下,能给出你们的计算脚本让我拜读是最好了,呵呵。


1.  回转半径网页请见这里

2.  代码要求:因为这个脚本是在一个模拟软件中使用的,该软件使用基本的python环境而没有scipy、numpy等模块,所以在脚本里只能用python内置的一些函数和命令

3.  七个原子的三维坐标和我做的代码如下

def f_Rg(list):
    n=len(list)
    sum_x=sum_y=sum_z=0
    for list_sub1 in list:
        sum_x+=list_sub1[0]
        sum_y+=list_sub1[1]
        sum_z+=list_sub1[2]
    rc=[1.0*sum_x/n,1.0*sum_y/n,1.0*sum_z/n]  #center of gravity, assuming all atoms have equal weight
   
    sum_Rg2=0
    for list_sub2 in list:
        sum_Rg2+=(list_sub2[0]-rc[0])**2+(list_sub2[1]-rc[1])**2+(list_sub2[2]-rc[2])**2

    result=[rc,(1.0*sum_Rg2/n)**0.5]
    return result


mol = [ [9.6397, 10.8355, 5.5044], \
            [7.6624, 11.6655, 5.5672], \
            [9.1239, 10.4822, 4.5657], \
            [8.1561, 10.4279, 4.4660], \
            [7.3390, 10.9163, 4.8606], \
            [7.4566, 12.0949, 4.5525], \
            [7.9986, 12.6564, 5.3909]]

Gy = f_Rg(mol)
print format( 'Center=(%.2f, %.2f, %.2f),  Rg=%.2f' %(Gy[0][0], Gy[0][1], Gy[0][2], Gy[1]) )

4.  以上脚本的计算结果如下
Center=(8.20, 11.30, 4.99),  Rg=1.22
下图中绿色球就是7个原子,红色箭头起始点是重心rc,箭头长度就是Rg,怎么看怎么觉得计算结果是错的

7 atoms

[ Last edited by glazio on 2012-6-21 at 13:00 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军


如果按照这个公式来计算,的出来的是个很小的数
你的答案跟这个中始终的r_mean是一致的,也就是the mean position of the monomers
不过真心不懂不要做的东西,光能根据公式看看
CODE:
#! /usr/bin/env python
#
mol = [[9.6397, 10.8355, 5.5044], \
            [7.6624, 11.6655, 5.5672], \
            [9.1239, 10.4822, 4.5657], \
            [8.1561, 10.4279, 4.4660], \
            [7.3390, 10.9163, 4.8606], \
            [7.4566, 12.0949, 4.5525], \
            [7.9986, 12.6564, 5.3909]]

# r_mean
rmean = [x/len(mol) for x in reduce(lambda x,y:[x[i]+y[i] for i in range(len(x))],mol)]

# r_k - r_mean
subsum = [map(lambda x,y: x-y, mol_item,rmean) for mol_item in mol]

# sum(r_k - r_mean)^2
sumsqure = map(lambda x: [pow(y,2) for y in x], subsum)

# 1/N * sum(r_k - r_mean)^2
Rg_2 = [x/len(sumsqure) for x in reduce(lambda x,y:[x[i]+y[i] for i in range(len(x))],sumsqure)]

# sqrt(1/N * sum(r_k - r_mean)^2
Rg = [pow(x,0.5) for x in Rg_2]

# print result
print 'r_mean = ', rmean
print 'Rg^2 = ', Rg_2
print 'Rg = ', Rg

结果
CODE:
>>> ================================ RESTART ================================
>>>
r_mean =  [8.196614285714286, 11.296957142857142, 4.986757142857144]
Rg^2 =  [0.650244935510204, 0.6282219424489798, 0.20302449959183683]
Rg =  [0.8063776630774219, 0.7926045309288736, 0.4505824004461746]
>>>  

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-06-21 16:41:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
glazio: 金币+5, ★★★很有帮助 2012-06-21 18:31:45

如果按照这个公式来计算,的出来的是个很小的数
你的答案跟这个中始终的r_mean是一致的,也就是the mean position of the monomers
不过真心不懂不要做的东西,光能根据公式看看
CODE:
#! /usr/bin/env python
#
mol = [[9.6397, 10.8355, 5.5044], \
            [7.6624, 11.6655, 5.5672], \
            [9.1239, 10.4822, 4.5657], \
            [8.1561, 10.4279, 4.4660], \
            [7.3390, 10.9163, 4.8606], \
            [7.4566, 12.0949, 4.5525], \
            [7.9986, 12.6564, 5.3909]]

# r_mean
rmean = [x/len(mol) for x in reduce(lambda x,y:[x[i]+y[i] for i in range(len(x))],mol)]

# r_k - r_mean
subsum = [map(lambda x,y: x-y, mol_item,rmean) for mol_item in mol]

# sum(r_k - r_mean)^2
sumsqure = map(lambda x: [pow(y,2) for y in x], subsum)

# 1/N * sum(r_k - r_mean)^2
Rg_2 = [x/len(sumsqure) for x in reduce(lambda x,y:[x[i]+y[i] for i in range(len(x))],sumsqure)]

# sqrt(1/N * sum(r_k - r_mean)^2
Rg = [pow(x,0.5) for x in Rg_2]

# print result
print 'r_mean = ', rmean
print 'Rg^2 = ', Rg_2
print 'Rg = ', Rg

结果
CODE:
>>> ================================ RESTART ================================
>>>
r_mean =  [8.196614285714286, 11.296957142857142, 4.986757142857144]
Rg^2 =  [0.650244935510204, 0.6282219424489798, 0.20302449959183683]
Rg =  [0.8063776630774219, 0.7926045309288736, 0.4505824004461746]
>>>  

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-06-21 16:42:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

glazio

铁虫 (小有名气)

感谢libra回复!代码正在拜读,其中map、lambda的方法都是我还没学到的东西,需要去翻教科书来理解。

疑问在于,回转半径应该是标量。
例如矢量r的平方,其值等于r的模( |r| )的平方,即 r^2 = |r|^2

请libra有时间再解答一下这个疑问,谢谢。
4楼2012-06-21 17:12:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

引用回帖:
4楼: Originally posted by glazio at 2012-06-21 17:12:31
感谢libra回复!代码正在拜读,其中map、lambda的方法都是我还没学到的东西,需要去翻教科书来理解。

疑问在于,回转半径应该是标量。
例如矢量r的平方,其值等于r的模( |r| )的平方,即 r^2 = |r|^2

请libr ...

那可能是我计算错误,我计算的时候
r =[x,y,z],r_mean=[mean(x),mean(y),mean(z(],然后(r-r_mean)的平方我直接是[x^2,y^2,z^2]了
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2012-06-21 18:39:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

内容已删除
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
6楼2012-06-21 18:46:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

glazio

铁虫 (小有名气)

五体投地矣,拜谢!
7楼2012-06-21 18:55:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 glazio 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 时间戳又变了8-15 +15 archvillain 2026-08-15 27/1350 2026-08-21 11:32 by tim76
[基金申请] 科研孤儿太难了 +15 我4大白菜 2026-08-20 16/800 2026-08-21 11:07 by yming1319
[论文投稿] 投稿咨询 +5 wwm09 2026-08-17 7/350 2026-08-21 10:11 by 期刊论文帮手
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 让我中一个面上吧! +10 大萍1987 2026-08-20 12/600 2026-08-21 09:31 by 020100099
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
[基金申请] 放榜前的不淡定 40+4 snowwithsea 2026-08-19 13/650 2026-08-21 08:30 by 北京莱茵编辑
[基金申请] 时间戳今天,20号变了 +4 archvillain 2026-08-20 4/200 2026-08-21 08:10 by gatelove
[基金申请] 估计是周四 +3 archvillain 2026-08-18 3/150 2026-08-21 01:48 by jnhyjjm
[基金申请] 时间戳又变了 +12 wuchongjun 2026-08-20 17/850 2026-08-20 20:05 by spzhao
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[基金申请] filecode,4个jtjc了 +11 ziyangfang 2026-08-19 13/650 2026-08-19 21:28 by aasahr
[基金申请] 今天放榜吗? +14 布布和一二 2026-08-19 15/750 2026-08-19 18:07 by gltch
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 什么时候开奖? +6 CrisMessi 2026-08-18 6/300 2026-08-19 08:06 by Equinoxhua
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
信息提示
请填处理意见