公开/公告号CN1731162A
专利类型发明专利
公开/公告日2006-02-08
原文格式PDF
申请/专利权人 中国科学院金属研究所;
申请/专利号CN200510047131.6
申请日2005-09-02
分类号G01N23/207(20060101);G06F19/00(20060101);
代理机构21002 沈阳科苑专利商标代理有限公司;
代理人张志伟
地址 110016 辽宁省沈阳市沈河区文化路72号
入库时间 2023-12-17 16:55:11
法律状态公告日
法律状态信息
法律状态
2013-10-30
未缴年费专利权终止 IPC(主分类):G01N23/207 授权公告日:20090930 终止日期:20120902 申请日:20050902
专利权的终止
2009-09-30
授权
授权
2006-04-05
实质审查的生效
实质审查的生效
2006-02-08
公开
公开
技术领域
本发明涉及X射线晶面指数标定方法和晶胞常数计算方法,特别提供了一种用于LaNi5基贮氢材料的基于MATLAB的半自动X射线晶面指数标定方法和晶胞常数计算方法。
背景技术
晶胞常数是晶态材料重要的物理参数之一,精确测定晶胞常数有助于研究该物质的键合能和键强;计算理论密度、各向异性热膨胀系数和压缩系数、固溶体的组分和固溶度、宏观残余应力大小;确定相溶解度曲线和相图的相界;研究相变过程;分析材料晶胞常数与各种物理性能的关系。针对LaNi5基贮氢材料,科学家们经常需要确定其吸放氢前后晶胞常数的变化程度来断定吸放氢过程中材料自身所承受应变的强度,从而进一步推断出该贮氢材料的服役寿命和抗粉化性能。单质或化合物晶体的晶胞常数随温度、压力、组分等变化很小,一般在10-3~10-5nm数量级,因而必须精确测定。精确测定晶胞常数的主要实验方法是多晶衍射法,主要计算方法有图解外推法,最小二乘法,线对法,线对最小二乘法。而在精确计算晶胞常数之前必须对样品的多晶X射线谱进行晶面指数标定以建立晶面指数与衍射角之间的一一对应关系。目前,学者们普遍认为柯亨提出的最小二乘法在计算晶胞常数时的通用性及准确度最高。最小二乘法数据量庞大,适宜于计算机运算。该计算过程涉及矩阵运算,采用传统计算机语言如C、C++或者Fortran实现则比较困难,且易出错。本发明采用MATLAB语言实现了针对LaNi5基贮氢材料的半自动X射线晶面指数标定和晶胞常数最小二乘精确计算。
发明内容
本发明的目的在于提供一种用于LaNi5基贮氢材料的基于MATLAB的半自动X射线晶面指数标定方法和晶胞常数计算方法。
本发明的技术方案是:
一种用于LaNi5基贮氢材料的基于MATLAB的半自动X射线晶面指数标定方法和晶胞常数计算方法,包括如下步骤:
1)将样品制粉并过20~30um细筛,然后在X射线衍射仪上,使用CuKα辐射(λ=1.54056)对样品进行连续扫描,扫描速度:0.12~2秒/步(sec./step),扫描步长:0.02~0.04度/步(deg./step),2θ的范围:20-90度(deg.)得到样品的X射线衍射谱。
2)将晶体参数及指数标定文件夹内文件名为LaNi5-CuKa-standard-xrd的数据文件导入到MATLAB的工作空间(workspace)中,用户只需将样品X射线衍射谱的衍射数据替代Sample_xrd已有数据即可。Sample_xrd是一个列数为二的数组,第一列为衍射角,第二列为衍射强度。
3)然后在MATLAB的命令窗口(command window)中键入cal_cell_para(Sample_xrd,lumda,standxrd_JCPDS,LaNi5xrd_reference)命令后屏幕上会出现一个人机交互式窗口,窗口中会显示两条X射线衍射谱和红十字LaNi5X射线峰的标准位置(数据来源于“粉末衍射标准联合委员会(JCPDS)”的PDF卡片),以及一个能够跟随鼠标移动的十字选峰标定工具。其中,显示蓝色的为用于用户参照的LaNi5的X射线衍射谱,显示黑色的为需要标定晶面指数和计算晶胞常数的样品X射线衍射谱。
4)用户通过参照LaNi5的X射线衍射谱来标定样品的晶面指数,并通过晶面指数与衍射角的一一对应关系最终计算出样品的晶胞常数。
5)整个标定及计算过程由以下程序完成,整个程序包含3个函数:cal_cell_para函数、cohenh函数、indexing函数;其中indexing函数用于标定样品的X射线衍射谱,输入变量为样品的X射线衍射谱的衍射角和对应的衍射强度,以及LaNi5标准X射线衍射峰的衍射角与对应晶面指数,输出变量为样品的衍射角和对应晶面指数;cohenh函数用于计算样品的晶胞常数,输入变量为样品的衍射角和对应晶面指数和衍射线的波长,输出变量为样品的晶胞常数a0、c0、V0,所用数学计算方法为最小二乘法。
最小二乘法计算晶胞常数的程序cohenh函数所用的正则系数矩阵为:
其中
所述cal_cell_para函数流程如下:
首先程序开始运行,由操作者输入试样的X射线谱数据,计算机自动作出LaNi5合金的X射线供操作者在标定时参考,从试样的X射线谱数据中提取出强度和折射角数据分别赋值给衍射角thet2a、峰强intensity,然后调用indexing函数完成晶面指数的标定,调用cohenh函数利用上述标定结果完成晶胞常数的计算,计算结果显示到屏幕上,程序结束。
所述indexing函数流程如下:
首先程序开始运行,输入试样X射线谱衍射角及峰强数据thet2a,intensity和LaNi5标准衍射数据standxrd,然后对试样的X射线强度进行归一化处理,从LaNi5标准衍射数据standxrd中提取出晶面指数数列和衍射角数列分别赋值给h_standard,k_standard,l_standard,thet2a_standard,然后建立一个用于存储试样衍射峰衍射角的空数组thet2a_peak和用于确定晶面指数的置换数列p,然后对n和but赋初值,其中n是用于确定数列中数位的下标,but是用于表征键盘按建的键值;判断键盘的按键键值,如果不是27(对应于键盘上的按钮为ESC键)获取鼠标的位置点和键值,分别存储于xi,yi,but中,通过计算机在xi,yi附近搜索获得试样峰位衍射角,显示于相应位置,然后判断键值,如果键值为1(对应于鼠标的左键),以样品X射线峰的左侧最近邻LaNi5标准峰位对应的晶面指数为样品所选峰的晶面指数,存入计算机中,如果键值是97(对应于键盘上的按钮a)以样品X射线峰的左侧次近邻LaNi5标准峰位对应的晶面指数为样品所选峰的晶面指数,存入计算机中,如果键值是32(对应于键盘上的按钮spacebar)以样品X射线峰的最近邻LaNi5标准峰位对应的晶面指数为样品所选峰的晶面指数,存入计算机中,如果键值是3(对应于鼠标右键)以样品X射线峰的右侧最近邻LaNi5标准峰位对应的晶面指数为样品所选峰的晶面指数,存入计算机中,如果键值是其他任意按键,以样品X射线峰的右侧次近邻LaNi5标准峰位对应的晶面指数为样品所选峰的晶面指数,存入计算机中,重复执行上述选峰过程,直到操作者按动ESC键,结束标定存储过程,显示标定结果于窗口中,同时以数组的形式存储输出标定数据供其它程序调用,程序结束。
所述cohenh函数流程如下:
首先程序开始运行,输入试样的X射线谱的晶面指数数列h、k、l及对应衍射角数列thet2a,以及X射线波长lumda,由计算机分别对theta,alpha,gama,deta赋值(theta,alpha,gama,deta这些都是中间变量,只是有利于数学推导和编程过程的表达,没有什么物理意义),然后建立正则方程组的系数矩阵a,b,对系数矩阵进行左除操作(左除操作是MATLAB编程语言中针对矩阵的特定的运算形式,其目的是获得线形方程组Ax=b的可靠解)x=a\b’(b’代表矩阵b的转置),获得一个数列,提取出数列的前两个数赋值给A,C,根据公式
本发明的有益效果是:
本发明采用公认的标准LaNi5X射线衍射数据来标定LaNi5基贮氢材料样品的X射线衍射谱,并且依据标定获得的晶面指数和对应衍射角采用最小二乘法计算获得样品的晶胞常数。此方法能够明显提高用户从LaNi5基贮氢材料X射线衍射谱中获得晶胞常数数据的速度和精度。有利于用户开发和研究新型LaNi5基贮氢材料。
附图说明
图1为本发明方法LaNi5-CuKa-standard-xrd的数据文件导入到MATLAB的工作空间(workspace)中软件界面图。
图2a-c为MATLAB程序流程图。
具体实施方式
本发明提供了一种用于LaNi5基贮氢材料的基于MATLAB的半自动X射线晶面指数标定方法和晶胞常数计算方法,依据LaNi5基贮氢材料具有与LaNi5在X射线谱上相同的峰形的基本原理编制了计算机半自动标定程序实现晶面标定,同时利用该晶面标定结果采用最小二乘法编制了晶胞常数精确计算程序,包括如下步骤:
1)将样品制粉并过20~30um细筛,然后在X射线衍射仪上,使用CuKα辐射(波长λ=1.54056)对样品进行连续扫描,扫描速度:0.12~2(秒/步),扫描步长:0.02~0.04(度/步),2θ的范围:20-90(度)得到样品的X射线衍射谱。
2)根据最小二乘法数学原理推导出针对LaNi5基贮氢材料的用于晶胞常数计算的正则方程组:
其中
3)依据该方程组编制MATLAB函数cohenh,其输入变量为样品的衍射角和对应晶面指数和衍射线的波长,输出变量为样品的晶胞常数a0、c0、V0。
4)由于LaNi5基贮氢材料具有与LaNi5相类似的晶胞结构,所以表现在X射线谱上LaNi5基贮氢材料具有与LaNi5相同的峰形,只是其峰位发生了改变,依据该原理编制MATLAB函数indexing,其输入变量为样品的X射线衍射谱的衍射角和对应的衍射强度,以及LaNi5标准X射线衍射峰的衍射角与对应晶面指数,输出变量为样品的衍射角和对应晶面指数。
5)编制MATLAB函数cal_cell_para,完成实验数据的分配,显示样品和LaNi5合金X射线谱以及LaNi5标准峰位分布,以及分别调用indexing函数和cohenh函数,完成标定及计算后将数据显示在窗口中。indexing函数用于标定样品的X射线衍射谱,输入变量为样品的X射线衍射谱的衍射角和对应的衍射强度,以及LaNi5标准X射线衍射峰的衍射角与对应晶面指数,输出变量为样品的衍射角和对应晶面指数;cohenh函数用于计算样品的晶胞常数,输入变量为样品的衍射角和对应晶面指数和衍射线的波长,输出变量为样品的晶胞常数a0、c0、V0,所用数学计算方法为最小二乘法。
下面分别就建立正则方程组的数学推导过程和晶面指数标定的程序实现思想进行详细描述。
最小二乘法的目的是求出被测量数据的最佳值,最佳值的条件是它与测量值之差的平方和为最小,即:∑(最佳值-测量值)2=最小值
LaNi5和LaNi5基贮氢材料的晶胞均属于六方晶系结构,在建立六方晶系的正则方程组之前必须建立与之相应的精确误差函数。
误差函数的表示:
用X射线衍射法测定点阵参数的依据是衍射线的位置,即2θ角。在衍射花样已经指数化的基础上,可通过Bragg方程和晶面间距公式计算点阵参数。根据布拉格方程:
两边取对数:
两边微分(为避免与晶面间距d混淆,微分符号用Δ):
从而得到:
可见d值的误差主要来源于衍射角误差Δθ与波长误差Δλ,而X射线波长的精度已达10-6且对任何测量此误差均相等,故忽略不计,即Δλ=0,所以:
对于晶面间距的相对误差,Nelson和Riley以及Taylor和Sinelair等研究了不同吸收性质的试样,得出更为严格的误差表达式:
将(5)式代入(6)式得(令D=-(k/2)):
又由于
Δsin2θ=sin2θ(具有一定系统误差的最佳值)-
sin2θ0(真实值) ,根据六方晶系的衍射方程:
所以由(7)式和(8)式得:
这就是六方晶系sin2θ误差函数的表达式。
正则方程组的确定:
在sin2θ误差函数的基础上,利用最小二乘法来确定目标方程。
sin2θ(最佳值)=Aα+Cγ+Dδ (10)
式中
对于衍射谱中的n个衍射峰,可分别求出它们的sin2θ,α,γ,δ代入(10)式,可以得到n个这样的方程,将每个方程乘以未知数A的系数α并相加得:
∑αisin2θi=A∑αiu+C∑αiγi+D∑αiδi (11)
将每个方程乘以C的系数γ并相加得:
∑γisin2θi=A∑αiγi+C∑γi2+D∑γiδi (12)
将每个方程乘以D的系数δ并相加得:
∑δisin2θi=A∑αiδi+C∑γiδi+D∑δi2 (13)
相应的正则方程组为:
解出正则方程组得到A和C,进而获得六方晶胞的点阵参数a0和c0。
指数标定的程序实现思想:
由于LaNi5基贮氢材料具有与LaNi5相类似的晶胞结构,所以表现在X射线谱上LaNi5基贮氢材料具有与LaNi5相同的峰形,只是其峰位发生了改变。所以,首先通过作出LaNi5标准xrd峰值图和具有同样晶型LaNi5基贮氢材料的xrd谱。依据LaNi5xrd谱和标准xrd峰值图用户可以很快得确定样品xrd谱的峰位和晶面指数的对应关系。该方法很好得体现了人机协作的概念:由计算机确定样品xrd谱的峰位然后由人判定峰位对应的晶面与LaNi5标准xrd峰值图中对应晶面的相似关系,从而最终由计算机确定峰位与晶面指数一一对应关系。
如图2a-c所示MATLAB程序流程图,整个程序包含3个函数cal_cell_para函数、cohenh函数、indexing函数;其中indexing函数用于标定样品的X射线衍射谱,输入变量为样品的X射线衍射谱的衍射角和对应的衍射强度,以及LaNi5标准X射线衍射峰的衍射角与对应晶面指数,输出变量为样品的衍射角和对应晶面指数;cohenh函数用于计算样品的晶胞常数,输入变量为样品的衍射角和对应晶面指数和衍射线的波长,输出变量为样品的晶胞常数a0、c0、V0,以下是整个标定及计算过程的MATLAB程序;cal_cell_para函数用于完成实验数据的分配,显示样品和LaNi5合金X射线谱以及LaNi5标准峰位分布,以及分别调用indexing函数和cohenh函数,完成标定及计算后将数据显示在窗口中。
该部分程序用于标定样品X射线衍射谱的晶面指数:
function[out1,out2,out3,out4]=indexing(thet2a,intensity,standxrd)
%thet2a,intensity--分别为样品X射线衍射谱的2theta,强度
%standxrd为LaNi5标准衍射数据
%LaNi5标准衍射数据来源于“粉末衍射标准联合委员会(JCPDS)”的PDF卡片
%获得所需峰的2theta值及对应晶面指数
%copyright@alex12cheng,Cheng Honghui
%------------------------
%load the standard-xrd of LaNi5
%get the standard thet2a and h,k,l
intensity=intensity./max(intensity).*100;%normlizing
thet2a_standard=standxrd(:,1);
h_standard=standxrd(:,3);
k_standard=standxrd(:,4);
l_standard=standxrd(:,5);
%plot the peak of the standxrd and the requested xrd
plot(standxrd(:,1),standxrd(:,2),′R+′,thet2a,intensity,′black-′);
set(gcf,′menubar′,′none′,′Position′,[1 39 1024 698]);%make the interface window fully open
set(gca,′position′,[0.03,0.03,0.96,0.96])%make the axis more big
axis([20,90,0,102]);
hold on
thet2a peak=
p=;%permutation vector
n=0;
but=1;%when push the ESC key,the choosing peak manipulation terminate
while but~=27%ESC key
[xi,yi,but]=ginput(1);
if but~=27
%Tb improve the accurancy,the peak will be acquired near the
%locafion of cursor
upi=xi+0.2;
downi=xi-0.2;
Irange=find(thet2a>downi&thet2a<upi);
[int_peaki,Ipeak]=max(intensity(Irange));
thet2a_peaki=thet2a(Irange(Ipeak));
plot(thet2a_peaki,int_peaki,′m^′);
n=n+1;
thet2a_peak(n,1)=thet2a_peaki;
ifbut==1%click the left button of mouse if the standard peak is close
%to the left side ofthe sample xrd peak
Ip=find(thet2_astandard>(thet2a_peaki-5)&thet2a_standard<thet2a_peaki);
p(n)=Ip(end);
hi=h_standard(Ip(end));
ki=k_standard(Ip(end));
li=l_standard(Ip(end));
elseifbut==97%click a key on keyboard if the standard peak is not
%so close to the left side ofthe sample xrd peak
Ip=find(thet2a standard>(thet2a_peaki-5)&thet2a_standard<thet2a_peaki);
p(n)=Ip(end-1);
hi=h_standard(Ip(end-1));
ki=k_standard(Ip(end-1));
li=l_standard(Ip(end-1));
elseif but==32%click spacebar if the manipulator can not figure out the location
%relation between the standardxrd peak and the sample xrd peak
Ip=find(thet2a_standard>(thet2a_peaki-0.5)&thet2a_standard<(thet2a_peaki+0.5));
[C,I]=min(abs(thet2a_standard(Ip)-thet2a_peaki));
p(n)=Ip(I);
hi=h_standard(Ip(I));
ki=k_standard(Ip(I));
li=l_standard(Ip(I));
elseif but==3%click right button of mouse if the standard peak is close to the
%right side of the sample xrd peak
Ip=find(thet2a_standard>thet2a_peaki&thet2a_standard<(thet2a_peaki+5));
p(n)=IP(1);
hi=h_standard(Ip1));
ki=k_standard(Ip(1));
li=l_standard(Ip(1));
elseifb but==100%click d key on keyboard if the standard peak is not so
%close to the right side of the sample xrd peak
Ip=find(thet2a_standard>thet2a_peaki&thet2a_standard<(thet2a_peaki+5));
p(n)=Ip(2);
hi=h_standard(Ip(2));
ki=k_standard(Ip(2));
li=l_standard(Ip(2));
end
string=[num2str(thet2a_peaki),′(′,num2st(hi),′′,num2str(ki),′′,num2str(li),′)′];
text(thet2a_peaki,int_peaki,string,...
′VerticalAlignment′,′bottom′,′HorizontalAlignment′,′center′);
%display the result of indexing
end
end
holdo off
h=h_standard(p);
k=k_standard(p);
l=l_standard(p);
hkl=[h,k,l];
thet2a_peakhkl=[thet2a_peak,h,k,l];
if nargout==1
out1=thet2a_peakhkl;
elseif nargout==2
out1=thet2a_peak;
out2=hkl;
elseif nargout==4
out1=thet2a_peak;
out2=h;
out3=k;
out4=1;
end
该部分程序用于样品的晶胞常数计算:
function[a0,c0,V0]=cohenh(h,k,l,thet2a,lumda)
%[a0,c0,V0]=cohenh(h,k,l,thet2a,lumda)
%a0,c0,V0为所要获得的点阵参数
%cohenh为函数名
%h,k,l为晶面指数
%thet2a为对应的衍射角,单位为度
%lumda为X射线波长,单位为埃
theta=thet2a./2;
alpha=h.^2+h.*k+k.^2;
gama=1.^2;
deta=sin(thet2a.*pi./180).^2.*(sin(theta.*pi./180)+theta.*pi./180)./(theta.*pi./180)./sin(theta.*pi./180);
a(1,1)=sum(alpha.^2);
a(1,2)=sum(alpha.*gama);
a(1,3)=sum(alpha.*deta);
a(2,2)=sum(gama.^2);
a(2,3)=sum(gama.*deta);
a(3,3)=sum(deta.^2);
for i=2:3
for j=1:2
ifi~=j
a(i,j)=a(j,i);
end
end
end
b(1)=sum(alpha.*sin(theta.*pi./180).^2);
b(2)=sum(gama.*sin(theta.*pi./180).^2);
b(3)=sum(deta.*sin(theta.*pi./180).^2);
x=a\b′;
A=x(1);
C=x(2);
a0=sqrt(lumda^2./3./A);
c0=sqrt(lumda^2./4./C);
V0=a0^2.*c0.*sin(pi/3);
该部分程序完成实验数据的分配,显示样品和LaNi5合金X射线谱以及LaNi5标准峰位分布,以及分别调用indexing函数和cohenh函数,完成标定及计算后将数据显示在窗口中:
function cal_cell_para(Sample_xrd,lumda,standxrd_JCPDS,LaNi5xrd_reference)
plot(LaNi5xrd_reference(:,1),LaNi5xrd_reference(:,2),′b-′);
text(60,40,′蓝色为LaNi5-x射线谱′,′color′,′blue′,′fontsize′,15);
hold on
thet2a=Sample_xrd(:,1);
intensity=Sample_xrd(:,2);
[thet2a,h,k,l]=indexing(thet2a,intensity,standxrd_JCPDS);
[a0,c0,V0]=cohenh(h,k,l,thet2a,lumda)
s=sprintf(′a0=%0.4f\nc0=%0.4f\n V0=%0.4f,a0,c0,V0);
text(60,80,s,′color′,′red′,′fontsize′,15);
以纯度(at%)为La 99.3,Ni 99.9,Al 99.7的原料按设计成分34∶61.05∶4.95配重。将配好的料置于水冷铜模中,在氩气气氛保护下的电弧炉中进行熔炼。熔炼过程中将合金翻面重熔五次,同时进行电磁搅拌,以保证合金的均匀性。熔炼后将合金锭封于真空石英管中,真空度<10-2a,放入热处理炉随炉升温至1100℃,保温8个小时后淬火制得样品。研磨样品过20~30um细筛,使用日本理学(Rigaku)D/max-2500pc X射线衍射仪和CuKα辐射(λ=1.54056)对粉末进行连续扫描,扫描速度:0.12(秒/步),扫描步长:0.04(度/步),2θ的范围:20-90(度)。整个实验共得到1750个数据点。将晶体参数及指数标定文件夹内文件名为LaNi5-CuKa-standard-xrd的数据文件导入到MATLAB的工作空间(workspace)中,然后将样品X射线衍射谱的衍射数据替代Sample_xrd已有数据即可(如图1所示)。然后在MATLAB的命令窗口(command window)中键入cal_ cell_para(Sample_xrd,lumda,standxrd_JCPDS,LaNi5xrd_reference)命令后屏幕上会出现一个人机交互式窗口。进行晶面指数标定及晶胞常数计算,得到LaNi4.25Al0.75合金的晶胞常数a0=5.0525;c0=4.0535;V0=89.61243(V0为晶胞体积)
机译: 用同性晶胞和平面均质晶胞测量铁电液晶的介电常数的方法和设备
机译: 坐姿体重指数的计算方法及体重指数的计算方法
机译: 指数计算装置,指数计算方法以及记录有该指数的媒体的指数计算程序