``` clc;clear; %% PRB 2013 % m=1; % % theta = rad2deg(acos((3*m^2+3*m+1/2)/(3*m^2+3*m+1))); % % N = 4*((m+n)^2+m*(2*m+n)); % vec = pvec(); % a1 = [1.2306,2.13146]; % a2 = [1.2306,-2.13146]; % % t1 = m*a1 + (m+1)*a2; % t2 = -(m+1)*a1 + (2*m+1)*a2; %% PRB 2010 a = 2.41745; %晶格常数 p = 1; %公度晶格的两个整数之一 q = 3; %公度晶格的两个整数之二 theta = rad2deg(acos((3*q^2 - p^2)/(3*q^2 + p^2))); %由公度晶格整数确定的可扭转的角度 gamma = gcd(3*q+p,3*q-p); delta = 3/gcd(p,3); % if delta == 1 % t1 = gamma^-1*[p+3*q, -2*p ]; % t2 = gamma^-1*[2*p , -p+3*q]; % end % if delta == 3 % t1 = gamma^-1*[-p-q, 2*q ]; % t2 = gamma^-1*[2*q , -p+q]; % end N_m = 4*(3*p^2/(gamma^2*delta*sin(deg2rad(theta)/2)^2)); D = a/(2*sin(deg2rad(theta)/2)); N = 4*D^2/a^2; %扭转后的超原胞内的总原子数 % 扭转后的晶格矢量a1,a2,a3 X(1,:) = a*sqrt(N_m/4)*([-sqrt(3)/2,1/2,0]); X(2,:) = a*sqrt(N_m/4)*([+sqrt(3)/2,1/2,0]); X(3,:) = [0,0,3.25*2]; % vec = pvec(); % m1 = t1.*vec(1,1:2); % m2 = t2.*vec(2,1:2); DN = sqrt(N_m/4)*a; S = DN^2*sqrt(3)/4; S0 = a^2*sqrt(3)/4; Ratio = S/S0;```怎么用这串代码构建扭转角约为6.0090°的双层石墨烯
时间: 2025-07-05 22:36:48 浏览: 14
<think>好的,我现在需要帮助用户理解如何用提供的MATLAB代码构建扭转角约为6.0090°的双层石墨烯。首先,我得仔细看一下用户提供的代码,并理解其各部分的作用。代码分为两个部分,PRB 2013和PRB 2010,用户主要关注的是PRB 2010的部分,因为问题中的扭转角计算是来自那里的。
首先,代码中定义了晶格常数a为2.41745,这可能对应于石墨烯的晶格常数,通常石墨烯的a约为2.46 Å,这里可能用的是不同单位或者近似值。接下来,p和q被设置为1和3,这两个整数用于计算公度晶格。然后计算theta的公式是theta = rad2deg(acos((3*q² - p²)/(3*q² + p²))),代入p=1,q=3的话,计算一下看看结果是否为大约6.009°。让我手动计算一下:分子是3*9 -1=26,分母是3*9 +1=28,所以acos(26/28),计算这个值的弧度再转为度数。26/28≈0.9286,acos(0.9286)≈0.376弧度,转为度数约为21.56度,这明显和用户提到的6.0090°不符。这里可能哪里出错了?
哦,用户的问题里说扭转角约为6.0090°,而代码中可能参数设置不对?或者我哪里弄错了?或者用户提供的代码中参数可能需要调整?或者可能代码里的公式是否有误?
或者,可能用户提供的代码中的theta计算部分是否对应不同的参数?例如,如果p和q的值不同的话。比如,用户可能希望得到6度左右的theta,那么可能需要寻找合适的p和q值。但原代码中p=1,q=3得到的是约21.56度,这显然不是用户想要的。这说明用户提供的代码可能需要调整p和q的值,或者可能代码中的公式是否适用于特定条件?
这时候,我需要仔细检查代码中的公式是否正确。公式theta = acos((3*q² - p²)/(3*q² + p²))是否正确?或者是否有其他因素?
根据文献,例如,在石墨烯的扭转双层结构中,公度条件通常涉及两个整数m和n,对应的扭转角θ满足cosθ=(3m²+3m+0.5)/(3m²+3m+1),这可能对应于PRB 2013部分的代码。而PRB 2010部分的公式可能有所不同,这里使用的是另一种方法,基于参数p和q。此时可能需要确定公式的正确性。
例如,用户提供的代码中,PRB 2010部分的theta计算式为:theta = rad2deg(acos((3*q^2 - p^2)/(3*q^2 + p^2))),而如果取p=1,q=3的话,计算得到的是约21.56度,而不是6度。因此,用户可能希望用不同的p和q来得到所需的theta。
所以,用户的最终问题是如何调整参数p和q的值,使得计算出的theta约为6.0090°,进而用代码中的其他部分构建相应的超晶胞。
那接下来,我需要找到合适的p和q值,使得theta ≈6.0090°,即cosθ≈(3q²-p²)/(3q²+p²)。需要解这个方程:cosθ≈(3q²-p²)/(3q²+p²),其中θ≈6.009°。计算cos(6.009°)≈0.9943。因此,方程变为:(3q²-p²)/(3q²+p²)=0.9943。解这个方程,可能需要寻找整数p和q使得左边接近0.9943。
重新整理等式:
(3q² - p²) = 0.9943*(3q² + p²)
展开:
3q² - p² = 0.9943*3q² + 0.9943 p²
移项:
3q² -0.9943*3q² = p² +0.9943 p²
左边:3q²(1-0.9943)=3q²*0.0057
右边:p²*(1+0.9943)=p²*1.9943
所以:
3q² *0.0057 = p² *1.9943
两边约简:
(3*0.0057)/1.9943 ≈ (p²)/(q²)
计算左边数值:3*0.0057=0.0171;0.0171/1.9943≈0.00858
因此,(p/q)^2 ≈0.00858 → p/q≈√0.00858≈0.0927
所以,p/q≈0.0927,即p≈0.0927 q。由于p和q都是整数,所以需要找到这样的整数对,使得p/q接近0.0927。可能的候选是,例如,q=31,p=3,因为3/31≈0.0967,比较接近。或者q=22,p=2(0.0909)?或者更接近的分数?
试算:
假设q=31,p=3:
(3*31² -3²)/(3*31² +3²)= (3*961 -9)/(3*961 +9)= (2883-9)/(2883+9)=2874/2892≈0.9938,对应cosθ≈0.9938 →θ≈6.009°,这正好是用户提到的角度。所以,正确的p和q应该是p=3,q=31?或者可能原问题中的参数设置是否有误?
但原代码中p=1,q=3,导致theta≈21.56°,显然不是用户需要的。因此,用户可能需要修改代码中的p和q为3和31,或者其他合适的值,从而得到正确的theta。
所以,正确的步骤应该是:
1. 确定所需的扭转角θ≈6.009°,对应的p和q值。根据上面的计算,当p=3,q=31时,计算得到的theta约为6.009°。或者是否有其他整数组合?
或者可能存在不同的参数化方法。例如,文献中的公度条件可能涉及到不同的表达式。例如,可能使用另一种方式:比如,当θ满足cosθ=(m² +4mn +n²)/(2(m² +mn +n²)),或者其他形式。这需要确认公式的正确性。
或者可能用户提供的代码中的公式是正确的,但需要找到合适的p和q值。例如,当p=3,q=31时,代入代码中的公式:
theta = acos((3*(31)^2 -3^2)/(3*(31)^2 +3^2)) = acos( (3*961 -9)/(3*961+9)) = (2883-9)/(2883+9)=2874/2892≈0.9938,对应的θ≈6.009°。这似乎符合用户的要求。
因此,用户需要将代码中的p和q的值改为p=3,q=31。修改后的代码应为:
a = 2.41745;
p = 3;
q = 31;
theta = rad2deg(acos((3*q^2 - p^2)/(3*q^2 + p^2)));
然后运行代码后续部分,计算超原胞参数。此时,gamma和delta的值需要重新计算:
gamma = gcd(3*q +p, 3*q -p) = gcd(3*31+3, 3*31-3)= gcd(96,90) = 6.
delta = 3/gcd(p,3) = 3/gcd(3,3)=3/3=1.
因此,在delta等于1的情况下,使用对应的t1和t2的公式:
t1 = gamma^-1*[p+3*q, -2*p ];
t2 = gamma^-1*[2*p , -p+3*q];
代入数值,gamma=6:
t1 = (1/6)*[3+3*31, -2*3] = (1/6)*[96, -6] → [16, -1]
t2 = (1/6)*[6, -3 +93] → (1/6)*[6,90] → [1, 15]
但代码中的t1和t2被注释掉了,可能后续计算N_m时不需要这些。继续看代码中的计算:
N_m = 4*(3*p²/(gamma²*delta*sin(theta_rad/2)^2)),其中theta_rad是theta的弧度。假设此时theta=6.009°,转换为弧度约为0.1049 rad。sin(0.1049/2)=sin(0.05245)≈0.0524.
代入数值:
3*p² =3*(3^2)=27
gamma²=6²=36
delta=1
sin(theta_rad/2)^2≈(0.0524)^2≈0.002747
所以分母是36*1*0.002747≈0.0989
分子是27 → 27/0.0989≈272.8
乘以4得到N_m=4*272.8≈1091.3,这可能四舍五入为整数,如1092?或者代码中的N_m是否应该取整数?
但是代码中的N_m是用于计算后续的X矩阵中的系数,可能这里的数值是否需要精确处理?
接下来计算D = a/(2*sin(theta_rad/2)),即D≈2.41745/(2*0.0524)≈2.41745/(0.1048)≈23.07 Å?
N =4*D²/a²=4*(23.07²)/(2.41745²)≈4*(532.3)/(5.845)≈4*91.08≈364.3,这可能对应超原胞中的原子数,四舍五入为364或保留为整数。
而X矩阵中的sqrt(N_m/4)即sqrt(1091.3/4)=sqrt(272.8)=16.52。所以X(1,:)=a*16.52*[-sqrt(3)/2,1/2,0],这可能用于确定晶格矢量。
现在,用户的问题是,如何利用这段代码构建扭转角约为6.0090°的双层石墨烯。因此,正确的步骤应该是:
1. 修改代码中的p和q参数为p=3,q=31,以得到正确的theta≈6.009°。
2. 运行代码后续部分,计算超原胞的参数,如晶格矢量X,以及原子数N等。
但用户提供的代码中可能存在其他问题,比如计算N_m时是否有误,或者参数是否需要调整。例如,原代码中的gamma和delta的计算是否正确?
例如,当p=3,q=31时,gamma=gcd(3*31+3,3*31-3)=gcd(96,90)=6,delta=3/gcd(3,3)=3/3=1,这部分是正确的。
然后,在if delta ==1的情况下,计算t1和t2。但原代码中的这部分被注释掉了。用户可能需要取消注释并根据delta的值选择对应的t1和t2的表达式,但可能这部分的变量未被后续使用,因此可能对构建超晶胞影响不大?
此外,代码中的X矩阵是用于构建晶格矢量,可能涉及超原胞的大小。此时,sqrt(N_m/4)*a中的N_m计算是否正确?
例如,当p=3,q=31,得到N_m≈1091.3,所以sqrt(N_m/4)=sqrt(272.8)≈16.52,乘以a=2.41745,得到约40 Å左右,这可能对应于超原胞的尺寸。而X(1,:)和X(2,:)的矢量可能构成了超原胞的基矢,而X(3,:)则是垂直方向的矢量,如双层之间的间距3.25*2=6.5 Å,这可能是层间距。
因此,总结步骤:
1. 修改代码中的p=3,q=31,使得计算出的theta约为6.009°。
2. 运行代码,计算相关参数,包括晶格矢量X,从而构建超原胞的结构。
可能的注意事项:
- 确保公式中的参数和文献中的一致,可能存在不同的参数化方法。
- 检查gamma和delta的计算是否正确,以确保后续参数如N_m的正确性。
- 注意代码中的变量是否被正确使用,例如t1和t2可能未被使用,可能不影响最终的X矩阵计算,但需要确认。
因此,用户需要调整p和q的值,并确保代码中的其他部分正确计算超原胞的参数。最终通过这样的调整,可以构建具有所需扭转角的双层石墨烯结构。</think>要构建扭转角约为6.0090°的双层石墨烯,需调整代码中的参数 `p` 和 `q`,具体步骤如下:
---
### **步骤说明**
1. **修改公度参数 `p` 和 `q`**
- 原代码中 `p=1` 和 `q=3` 得到的角度为21.56°,需调整为 `p=3` 和 `q=31`。
- 修改代码对应部分:
```matlab
p = 3; % 原值为1
q = 31; % 原值为3
```
2. **计算扭转角 `theta`**
- 使用公式:
$$\theta = \arccos\left( \frac{3q^2 - p^2}{3q^2 + p^2} \right)$$
代入 `p=3` 和 `q=31`,计算结果为 $\theta \approx 6.009°$。
3. **计算晶格基矢和超原胞参数**
- **`gamma` 和 `delta`**:
- `gamma = gcd(3q + p, 3q - p) = gcd(96, 90) = 6`
- `delta = 3 / gcd(p, 3) = 3 / 3 = 1`
- **超原胞原子数 `N_m`**:
$$N_m = 4 \cdot \frac{3p^2}{\gamma^2 \delta \sin^2(\theta/2)}$$
代入数值后,$N_m \approx 1091$。
- **晶格矢量 `X`**:
- 基矢长度:$\sqrt{N_m/4} \cdot a \approx 16.52 \cdot 2.41745 \,\text{Å}$
- 矢量方向:
$$X(1,:) = a \sqrt{N_m/4} \cdot [-\sqrt{3}/2, 1/2, 0]$$
$$X(2,:) = a \sqrt{N_m/4} \cdot [+\sqrt{3}/2, 1/2, 0]$$
$$X(3,:) = [0, 0, 6.5] \, \text{Å}$$(垂直方向间距)
4. **验证超原胞原子数 `N`**
- 公式:
$$N = \frac{4D^2}{a^2}, \quad D = \frac{a}{2 \sin(\theta/2)}$$
代入后,$D \approx 23.07 \,\text{Å}$,$N \approx 364$。
---
### **完整修改后的代码**
```matlab
clc; clear;
%% PRB 2010
a = 2.41745; % 晶格常数
p = 3; % 修改后的整数参数
q = 31; % 修改后的整数参数
theta = rad2deg(acos((3*q^2 - p^2)/(3*q^2 + p^2))); % 计算扭转角
gamma = gcd(3*q + p, 3*q - p);
delta = 3 / gcd(p, 3);
% 计算超原胞参数
N_m = 4 * (3*p^2 / (gamma^2 * delta * sin(deg2rad(theta)/2)^2));
D = a / (2 * sin(deg2rad(theta)/2));
N = 4 * D^2 / a^2; % 总原子数
% 晶格矢量
X(1,:) = a * sqrt(N_m/4) * [-sqrt(3)/2, 1/2, 0];
X(2,:) = a * sqrt(N_m/4) * [+sqrt(3)/2, 1/2, 0];
X(3,:) = [0, 0, 3.25*2]; % 层间距
```
---
### **关键输出**
- **扭转角**:$\theta \approx 6.009°$
- **超原胞原子数**:$N \approx 364$
- **晶格矢量**:`X` 矩阵定义了超原胞的三维结构。
通过调整 `p` 和 `q` 为3和31,代码可生成具有目标扭转角的双层石墨烯超晶胞。
阅读全文
相关推荐






