0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os

#Need Modifycation!!!
#对称表面上下可以动的距离,读取当前文件下POSCAR内容
# distance = eval(input("请输入slab上下要松弛的距离(单位A)"))
distance = 3
f = open('POSCAR', 'r')
lines = f.readlines()
f.close()
new = []
for line in lines:
new.append(line.strip())

#沿c方向slab距离
slab_c = eval(new[4].split(" ")[-1])

os.rename('POSCAR','POSCAR_unfixed_atoms')

#加上Selective Dynamics变成可改变模式的
new.insert(7,'Selective Dynamics')

#去掉最后的字母元素符号
for i in range(9,len(new)):
if new[i][-2] == ' ':
new[i] = new[i][0:-2]
else:
new[i] = new[i][0:-3]

#获得slab层数及坐标
ls = []
for i in range(9,len(new)):
# num = 1
# while new[i][-num] != ' ':
# num += 1
# print(num-1)
# print(i,new[i][1-num:])
ls.append(eval(new[i][-8:]))
ls = list((set(ls)))
ls.sort()
print("此slab模型高度为{}A, 松弛上下{}A".format(slab_c,distance))

#加上FT模式
for i in range(9,len(new)):
if eval(new[i][-8:])*slab_c <= (ls[0]*slab_c+3):
new[i] = new[i]+" T T T"
elif eval(new[i][-8:])*slab_c >= (ls[-1]*slab_c-3):
new[i] = new[i]+" T T T"
else:
new[i] = new[i]+" F F F"

#保存文件
f = open('POSCAR', 'w')
for para in new:
f.write(para)
f.write('\n')
f.close()

依赖

python 3

Atomic Simulation Environment

脚本内容

1
2
3
from ase import io
atoms = io.read(jobname+'.cif')
atoms.write('POSCAR', format = 'vasp')

基于ase的三行脚本即可将.cif文件转换为vasp格式文件,然而由于ase包的问题,转换后的POSCAR文件第六行缺少对应的元素符号,需额外通过python脚本处理生成好的POSCAR文件来达到最终目的。

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from ase import io
import os

#获取当前目录下全部.cif文件名称,其他目录下的.cif需要给出完整路径并且用os.chdir改变工作路径
files_bak = os.listdir('./')
files = []
for f in files_bak:
if f[-4:] == '.cif':
files.append(f)
else:
continue
#先将所有的cif用ase转换为poscar文件,并删除原来的cif文件
for i in files:
atoms = io.read(i)
atoms.write('temp.vasp', format = 'vasp')
os.remove(i)
#将现有的cif文件第六行加上第一行的元素符号,存为最终的POSCAR文件
f = open(i[0:-4]+'.vasp','w')
with open('temp.vasp','r') as p:
os.remove('temp.vasp')
#在readlines()读取元素时,不必将每个元素结尾的\n用.strip()函数去掉,因为再次写入会自动达到换行效果
lines = p.readlines()
lines.insert(5,lines[0])
for l in lines:
f.write(l)
f.close()

可能存在的问题

  • windows平台,MS建好模型后通过坚果云共享到MAC系统中,cif一定几率变成二进制文件报错

光学性质基础

wave particle duality(by Einstein)

photoelectric effect:the emission of electrons or other free carriers when electromagnetic radiation, like light, hits a material. Electrons emitted in this manner can be called photoelectrons.

Plank equation

E=hv, h=6.626× 10-34 m2 kg / s

The de Broglie Relations

p=hv=hc/λ

Standing and Traveling waves

驻波standing wavestationary wave)为两个波长周期频率和波速皆相同的正弦波相向行进干涉而成的合成波。与行波不同,驻波的波形无法前进,因此无法传播能量,故名之。驻波最大值和最小值在某一固定点不动

行波(travelling wave)是指平面波在传输线上的一种传输状态,其幅度沿传播方向按指数规律变化,相位沿传输线按线性规律变化。

波是y=sinx,行波就是波要在走,y=sin(x-t)就可表示行波, 可以看到t=0时波是y=sinx, t=1时y=sin(x-1). 每一刻波都在往右走,这就是行波。y=sin(x+t),也是行波,但是在往左走。

如果俩个完全一样,仅方向不一样的行波y=sin(x-t)和y=sin(x+t)相遇,公式变成y=2sinxcost,可以看到只要x=0,或者半波长整数倍的时候,y=0,代表这时不管t怎么变,这些点永远不动,这些点就是驻波的波节,在看除波节外的任一点,t=0时,y达到正幅值,t=1/4周期时,y=0,这时波是一条直线,所有值都是零,t=1/2周期时,y达到负幅值,所以y=2sinxcost就是驻波,波节不动,其余地方一直在震动。

???相速度和群速度???

some quiz

  1. Can gravity bend the light?(Yes, the star is not at the position we observe because of the sun)
  2. What is the princeple of fiber?(Total reflection)
  3. Are there any loss during the transpotation of fiber? If yes, where is the loss from?(yes, they from:a.any materials can absorb some light. b.the fiber is not all straight along the whole road. if there is a corner, 90 degree, which do not satisfy the prerequest of the total reflection. Herein, there will be some loss.)
  4. What are the conditions for total reflection to occur?(a.from n larger medium to n small medium, n is refraction index b. staify critical angle)
  5. What’s the difference between mechanical wave and electromagnetic wave?(transportation medium)
  6. Waht is the wave number?(k=2π/λ)

words

Isotropic:各向同性

Sodium:钠

copper:铜

Zinc:锌

Prism:棱镜

reflection:反射

refraction:折射

enumerate

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,可减少命名额外的变量。索引默认从0开始。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 普通的for循环
>>>i = 0
>>> seq = ['one', 'two', 'three']
>>> for element in seq:
... print i, seq[i]
... i +=1
...
0 one
1 two
2 three

# for循环使用enumerate
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... print i, element
...
0 one
1 two
2 three

Numpy

1
2
3
4
5
6
7
8
9
data.shape #数组形状
numpy.around(a, decimals=0) #0为想保存的小数个数
np.transpose(arr) #数组转置
# SVD函数
np.linalg.svd(a,full_matrices=1,compute_uv=1)
#参数:
#a是一个形如(M,N)矩阵
#full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N)。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。
#compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。

Pandas

1
2
3
4
5
6
7
8
9
data.iat[0,0] #特定位置元素

df['列名'] #直接取出一列
df['列名1', '列名2'] #取出两列

df.loc['行名1':'行名2'] #选取行名1到行名2的所有行
df.iloc[2:3] #选取第三行到第四行

df.iloc[a:b,c:d] #同时选取行列

筛选x列小于18.69的数据并且对第二列求平均

绘图

1
2
3
4
5
6
7
8
# 散点图,alpha透明度,color为内部颜色,color=' '无内部颜色,s标记大小
plt.scatter(x,y,alpha=0.6,marker = 's',color="w",linewidths=1,s=50,edgecolors='black')
# 生成网格
# which : {'major', 'minor', 'both'}, optional
# The grid lines to apply the changes on.
# axis : {'both', 'x', 'y'}, optional
# The axis to apply the changes on.
plt.grid(which='major', axis='both', **kwargs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
for i in *;
do
#如果i是文件夹则打开i
if [ -d $i ];then
cd $i
if grep -q "to POSCAR and continue" vasp.out;then
pwd
mv CONTCAR POSCAR
sbatch -N 2 ~/bin/vasp_std.slurm
#若结果收敛则输出数字0
else
echo 0
fi
fi
done

for循环

1
2
3
4
for 变量 in 取值列表
do
各种操作
done

举例:

1
2
3
4
5
6
7
#计算1-100的和
ans=0
for i in {1..100}
do
let ans+=$i
done
echo $ans

if else条件判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#elif可以省略
if 条件判断;then
语句1
语句2
……
elif
语句1
语句2
……
elif
语句1
语句2
……
else
语句1
语句2
……
fi

无监督学习的目标

利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。

  • 有监督学习和无监督学习的最大区别在于数据是否有标签

  • 无监督学习最常应用的场景是聚类(clustering)降维(Dimension Reduction)

  • 聚类(clustering),就是根据数据的“相似性”将数据分为多类的过程。评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”。使用不同的方法计算样本间的距离会关系到聚类结果的好坏。距离的常见算法有欧氏距离,曼哈顿距离,马氏距离,夹角余弦。

  • 降维,就是在保证数据所具有的代表性特性或者分布的情况下,将高维数据转化为低维数据的过程。降维可以精简数据和数据可视化。

聚类常见算法(sklearn.cluster)

算法名称 参数 可拓展性 相似性度量
K-means 聚类个数 大规模数据 点间距离
DBSCAN 邻域大小 大规模数据 点间距离
Gaussian Mixtures 聚类个数及其他超参 复杂度高,不适合处理大规模数据 马氏距离
Birch 分支因子,阈值等其他超参 大规模数据 两点间的欧式距离

常见降维算法(sklearn.decomposition)

算法 参数 可拓展性 适用任务
PCA 所降维度及其他超参 大规模数据 信号处理等
FastICA 所降维度及其他超参 超大规模数据 图形图像特征提取
NMF 所降维度及其他超参 大规模数据 图形图像特征提取
LDA 所降维度及其他超参 大规模数据 文本数据,主题挖掘

常用数据集

数据集名称 调用方式 适用算法 数据规模
波士顿房价数据集 load_boston() 回归 506*13
鸢尾花数据集 load_iris() 分类 150*4
糖尿病数据集 load_diabetes() 回归 442*10
手写数字数据集 load_digits() 分类 5620*64
Olivetti 脸部图像数据集 fetch_olivetti_faces() 降维 4006464
新闻分类数据集 fetch_20newsgroups() 分类 -
带标签的人脸数据集 fetch_lfw_people() 分类;降维 -
路透社新闻语料数据集 fetch_rcv1() 分类 804414*47236

sklearn.datasets.load_boston

其重要参数为:

return_X_y:表示是否返回target(即价格),默认为False,只返回data(即属性)。

1
2
3
4
>>> from sklearn.datasets import load_boston
>>> boston = load_boston
>>> print( boston.data.shape)
(506, 13)

sklearn库的基本功能

分类任务

分类模型 加载模块
最近邻算法 neighbors.NearestNeighbors
支持向量机 svm.SVC
朴素贝叶斯 naive_bayes.GaussianNB
决策树 tree.DecisionTreeClassifier
集成方法 ensemble.BaggingClassifier
神经网络 neural_network.MLPClassifier

回归任务

回归模型 加载模块
岭回归 linear_model.Ridge
Lasso回归 linear_model.Lasso
弹性网络 linear_model.ElasticNet
最小角回归 linear_model.Lars
贝叶斯回归 linear_model.BayesianRidge
逻辑回归 linear_model.LogisticRegression
多项式回归 preprocessing. PolynomialFeatures

聚类任务

聚类方法 加载模块
K-means cluster.KMeans
AP聚类 cluster.AffinityPropagation
均值漂移 cluster.MeanShift
层次聚类 cluster.AgglomerativeClustering
DBSCAN cluster.DBSCAN
BIRCH cluster.Birch
谱聚类 cluster.SpectralClustering

降维人物

降维方法 加载模块
主成分分析 decomposition.PCA
截断SVD和LSA decomposition.TruncatedSVD
字典学习 decomposition.SparseCoder
因子分析 decomposition.FactorAnalysis
独立成分分析 decomposition.FastICA
非负矩阵分解 decomposition.NMF
LDA decomposition.LatentDirichletAllocation

基本概念梳理

  • $E_o$, the standard equilibrium potential (or standard electrode potential), is defined as the equilibrium potential of an electrode reaction when all components are in their standard states, measured against the standard hydrogen electrode (SHE).

标准电极电位是反应处在标准状态下(298K,所有离子的浓度都是1mol/L),的平衡电位,其数值可在标准电位表中查出,也可以根据热力学上的数据自行运算。

eg:在腐蚀电化学原理(曹楚南)一书中,常见金属相对于H电极的标准平衡电位是:

反应 SHE(V)
$Li$=$Li^+$+$e^-$ -3.024
Ca=Ca^2+^+2e^-^ -2.87
Mg=Mg^2+^+2e^-^ -2.34
Al=Al^3+^+3e^-^ -1.67
Zn=Zn^2+^+2e^-^ -0.762

自己计算的方法如下,首先在德国爱德华久保热力学和物质动力学基金会找到对应离子的化学势;

网站的数据遵循标准:(1)在标准状态下 (T = 298 K, p = 101,3 kPa),(2)在溶液标准浓度下 (1000 mol/m3),(3)处于理想状态下,没有分子间相互作用的气体或溶解物质,(4)由元素的天然同位素组成的所有物质。

单位μ代表kJ/mol,1 eV/atom = 96.49 kJ/mol,网站中“,”代表小数点

元素 网站数据(μ) ev/atom 计算平衡电位
Li^+^ -293.80 -3.0449 -3.0449
Ca^2+^ -553.04 -5.7316 -2.8658
Mg^2+^ -456.01 4.726 -2.363
Al^3+^ -485.34 -5.03 -1.6767
Zn^2+^ -147.03 -1.5238 -0.7619
  • $E_e$,equilibrium potential of an electrode, 平衡电极电位。大多数时候,反应都无法在标准状态下进行。由于此时离子浓度较标准状态下发生变化,平衡随之移动,平衡电位也会相继发生改变。
  • 反应的氧化态和还原态,注意能斯特方程的浓度方法,+氧化态在上面的浓度

Oxidised State + ne- ⇌ Reduced State

能斯特方程

The Nernst equation links the equilibrium potential of an electrode, Ee, to its standard potential(standard equilibium potential), E0, and the concentrations or pressures of the reacting components at a given temperature. It describes the value of Ee for a given reaction as a function of the concentrations (or pressures) of all participating chemical species.

In its most fundamental forms, the Nernst equation for an electrode is written as:

$E_e$=$E_0$+$\frac{RT}{zF}ln\frac{[Oxidised]}{[Reduced]}$

or

$E_e$=$E_0$+$\frac{2.303RT}{zF}log\frac{[Oxidised]}{[Reduced]}$

or

$E_e$=$E_0$+$\frac{2.303$k_b$T}{ze}log\frac{[Oxidised]}{[Reduced]}$

[Click here for a full derivation of Nernst equation – popup]

R is the universal gas constant (8.3145 J K-1 mol-1)
T is the absolute temperature
z is the number of moles of electrons involved in the reaction as written
F is the Faraday constant (96 485 C per mole of electrons)

The notation [reduced] represents the product of the concentrations (or pressures where gases are involved) of all the species that appear on the reduced side of the electrode reaction, raised to the power of their stoichiometric coefficients. The notation [oxidised] represents the same for the oxidised side of the electrode reaction.

Explanation of Activity