24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1937  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 086000生物与医药求调剂 +3 老天眷顾之人 2026-03-31 3/150 2026-04-05 22:24 by syh9288
[考研] 复试调剂 +13 呼呼?~+123456 2026-04-05 13/650 2026-04-05 22:07 by 醉翁wl
[考研] 348求调剂 +3 车厘子zzz 2026-04-05 3/150 2026-04-05 20:30 by 啵啵啵0119
[考研] 计算机11408,286分求调剂 +7 木子念晞 2026-04-05 7/350 2026-04-05 19:02 by chy09050039
[考研] 348求调剂 +6 wukira 2026-04-04 6/300 2026-04-05 18:11 by 猪会飞
[考研] 求调剂,一志愿郑州大学材料与化工专硕,英二数二342分,求老师收留 +18 v12abo 2026-04-02 20/1000 2026-04-05 11:37 by a8144223
[考研] 考研调剂 +11 小sun要好运 2026-04-04 11/550 2026-04-05 08:02 by qlm5820
[考研] 材料专硕322分 +11 哈哈哈吼吼吼哈 2026-04-02 11/550 2026-04-04 23:37 by 永字号
[考研] 292分,材料与化工,申请调剂 +22 程晴之 2026-04-01 26/1300 2026-04-04 22:03 by hemengdong
[考研] 338求调剂 +7 晟功? 2026-04-03 7/350 2026-04-04 20:37 by 蓝云思雨
[考研] 297求调剂 +11 ljy20040718! 2026-04-03 13/650 2026-04-04 09:23 by 来看流星雨10
[考研] 281求调剂 +10 aaawhy 2026-04-03 10/500 2026-04-03 21:42 by lbsjt
[考研] 0705理学294求调剂 +3 成果成果cg5 2026-04-03 3/150 2026-04-03 14:04 by simons1972
[考研] 326求调剂 +10 崽崽仔 2026-04-02 10/500 2026-04-03 09:08 by 帕尔马拉特
[考研] 302求调剂 +9 zyx上岸! 2026-04-02 9/450 2026-04-02 23:07 by 马儿快快地跑
[考研] 085410 一志愿211 22408分数359求调剂 +3 123456789qw 2026-03-31 4/200 2026-04-02 00:06 by 义文wang
[考研] 求调剂 +4 图鉴212 2026-03-30 5/250 2026-04-01 15:32 by 图鉴212
[考研] 材料调剂 +11 一样YWY 2026-03-31 11/550 2026-04-01 11:35 by wangjy2002
[考研] 土木304求调剂 +5 顶级擦擦 2026-03-31 5/250 2026-04-01 08:15 by fdcxdystjk¥
[考研] 抱歉 +3 田洪有 2026-03-30 3/150 2026-03-30 19:11 by 迷糊CCPs
信息提示
请填处理意见