计算化学公社

 找回密码 Forget password
 注册 Register

笛卡尔坐标与分数坐标的转化

查看数: 18894 | 评论数: 2 | 收藏 Add to favorites 8
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-3-16 15:31

正文摘要:

MS新手,学习CO分子吸附在Pd(110)晶面的过程,不理解关于笛卡尔坐标与分数坐标的转换,下图中的xc,yc,zc的来源与自己算的不一样,最下面是自己的转化,求大神指点例子中的xc,yc

回复 Reply

飞翔的小猪 发表于 Post on 2017-3-17 10:46:55
万里云 发表于 2017-3-16 17:14
坐标转换和量子力学中表象变换是一回事,可以直接套用公式=,其中和都是列向量,是基组b在基组a下的表示矩 ...

谢谢
万里云 发表于 Post on 2017-3-16 17:14:55
本帖最后由 万里云 于 2017-3-16 17:18 编辑

坐标转换和量子力学中表象变换是一回事,可以直接套用公式<a|x>=<a|b><b|x>,其中<a|x>和<b|x>都是列向量,<a|b>是基组b在基组a下的表示矩阵。拿从分数坐标到笛卡尔坐标变换举例,<a|b>就是基矢笛卡尔坐标所组成矩阵的专置。

附两个笛卡尔坐标和分数坐标互换的matlab函数:

  1. function y = cart2frac(latvec, x)
  2. %
  3. % latvec = [ a1x, a1y, a1z;
  4. %            a2x, a2y, a2z;
  5. %            a3x, a3y, a3z ]
  6. %
  7. % x = [ atom1x, atom1y, atom1z;
  8. %       atom2x, atom2y, atom2z;
  9. %       .......................
  10. %       atomNx, atomNy, atomNz ]
  11. %
  12.     [ m, n ] = size(x);
  13.     y = zeros(m, n);
  14.     convmat = inv(latvec');
  15.     for k = 1:m
  16.         y(k,:) = (convmat * x(k,:)')';
  17.     end
复制代码


  1. function y = frac2cart(latvec, x)
  2. %
  3. % latvec = [ a1x, a1y, a1z;
  4. %            a2x, a2y, a2z;
  5. %            a3x, a3y, a3z ]
  6. %
  7. % x = [ atom1x, atom1y, atom1z;
  8. %       atom2x, atom2y, atom2z;
  9. %       .......................
  10. %       atomNx, atomNy, atomNz ]
  11. %
  12.     [ m, n ] = size(x);
  13.     y = zeros(m, n);
  14.     convmat = latvec';
  15.     for k = 1:m
  16.         y(k,:) = (convmat * x(k,:)')';
  17.     end
复制代码


以及一个由晶格常数计算基矢坐标的函数:
  1. function y = latvec(latconst)
  2.     a = latconst(1);
  3.     b = latconst(2);
  4.     c = latconst(3);
  5.     alpha = latconst(4) / 180 * pi;
  6.     beta  = latconst(5) / 180 * pi;
  7.     gamma = latconst(6) / 180 * pi;
  8.     y = zeros(3, 3);
  9.     y(1,:) = [ a, 0, 0 ];
  10.     y(2,:) = [ b*cos(gamma), b*sin(gamma), 0 ];
  11.     y(3,1) = c * cos(beta);
  12.     y(3,2) = c * (cos(alpha) - cos(beta)*cos(gamma)) / sin(gamma);
  13.     y(3,3) = c * sqrt(1 + 2*cos(alpha)*cos(beta)*cos(gamma) - cos(alpha)^2 - cos(beta)^2 - cos(gamma)^2) / sin(gamma);
复制代码

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
sobereva + 3

查看全部评分 View all ratings

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-16 21:10 , Processed in 0.294227 second(s), 26 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list