24小时热门版块排行榜    

查看: 2065  |  回复: 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的回帖

glazio

铁虫 (小有名气)

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

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

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

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的回帖

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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 03:40 by OEbVnUOu01ol
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 2JOx3r2CYEgw 2026-08-21 9/450 2026-08-23 03:31 by OEbVnUOu01ol
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 DpSrDtM079iu 2026-08-22 3/150 2026-08-23 00:55 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 00:52 by OEbVnUOu01ol
[论文投稿] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 3/150 2026-08-22 22:03 by OEbVnUOu01ol
[基金申请] 93BebMhtakh前后11位开头都是大写 +7 且听虎啸 2026-08-17 8/400 2026-08-22 21:55 by 医学老男孩
[教师之家] 跳槽后在研项目怎么办? +3 简单化xn 2026-08-22 7/350 2026-08-22 19:46 by 简单化xn
[基金申请] 什么时候开奖? +7 CrisMessi 2026-08-18 8/400 2026-08-22 18:29 by 淀粉搬运工
[教师之家] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 2JOx3r2CYEgw 2026-08-21 4/200 2026-08-22 16:52 by sunzitan
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 科研孤儿太难了 +17 我4大白菜 2026-08-20 18/900 2026-08-21 20:57 by zhangev
[基金申请] 感觉是下周放榜了 +7 angus9576 2026-08-17 12/600 2026-08-21 13:38 by weiyin
[基金申请] 我面上完蛋了 +7 且听虎啸 2026-08-20 8/400 2026-08-21 12:31 by 酷酷墨镜
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[论文投稿] 投稿咨询 +5 wwm09 2026-08-17 7/350 2026-08-21 10:11 by 期刊论文帮手
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
[基金申请] 今天系统多次维护,明天很可能放榜! +10 zju2000 2026-08-16 11/550 2026-08-20 20:02 by cl479861084
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
信息提示
请填处理意见