MATLAB-钠原子光谱数据处理

最近强迫症很严重,花好多工夫做了一些没什么用的事情。做完了感觉想留下来,然后又觉得占地方。突然就想出来还有博客这么一个东西,想想也是很好玩的。如果以后还有强迫症的时候,就把这些东西堆在这。如果遇上高手指点,还可以顺带学点东西……
关于钠原子发射光谱实验,实在感觉数据分析比较繁杂。其它近代物理实验大多有编好的程序可以高效分析数据(虽然有些是老师或学长随手编出来的MathCAD小脚本,还有bug在里面)。最初是想随便整个粗糙的自己用,后来越做越停不下来。

上面是中科大的网站,原理说的挺清楚的。我光谱这一块我学的模棱两可。理解的很不准确。大致有几个要点:
  1. 通过摄谱仪获得的谱线与数据库中钠原子光谱数据相对比,得知对应的线系;
  2. 谱线的波长满足一系列的波长公式,形式上都是初态和末态的光谱项值的差;
  3. 通过两条(已知初末态的量子数即可)同线系下的谱线的波长公式作差,可以得到固定项方程,相应的可以解出量子缺;
  4. 光谱项值映射谱线能级,各参数的到之后可以画出能级跃迁图;
公式 MATLAB-钠原子光谱数据处理我一直感觉好像没有什么用。得到初末态的量子数之后,直接带入固定项公式就可以了。(我感觉这里我一定理解得有一些偏差,但是快考试了也不想去管。这样的学习态度可以说是非常恶劣了。)
MATLAB 上其实没有什么难点,有一些语法上tips我稍微标一下,妄想写一遍就能记得住吧。
//////////////////////////////////////////////////////////////////////////////////////

function q = fixeq(x)

%fixeq 发射谱固定相方程

%  

n1:第一条谱线末态量子数;n2:第二条末态量子数;v1:第一条波数;v2:第二条波数

global n1 n2 v1 v2

R=109737.31;

q=(v1+R./(n1-x).^2)-(v2+R./(n2-x).^2);

end

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

function del = findqd( a,b,c,d )

%findqd 计算量子亏损

%  

参数分别为,主量子数,波长,第二条谱线主量子数,第二条波长

global n1 n2 v1 v2

n1=a;n2=c;

v1=b;v2=d;    
 

     

     

%x=0:0.01:1;plot(x,fixeq(x));

del=fsolve('fixeq',0);    

     

     

   

  




end
%fsolve函数求解自变量取值,使得函数值在预设或默认的误差阈值下等于0
%要设定初值,从初值开始向上迭代
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////

function T= Fix( n,fixqd )

%Fix 钠原子固定项

%   n:主量子数,fixqd;量子缺

R=109737.31;

T=(-1)*R/(n-fixqd)^2;

end

////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////

clear all

data=xlsread('Na_Data.xlsx');  
 

     

     

     

     

     

     

     

     

  (1)

leng=length(data(:,1));  

   %输入的谱线对的数量

%%%%%%%%%%%%%求量子缺

answer=zeros(leng,8);

answer(:,1:4)=data(:,1:4);

x=1:leng;

%x=num2cell(x');

%answer(1,:)={'s';'初态量子数';'初态波长/nm';'末态量子数';'末态波长/nm';'初态波数*cm';'末态波数*cm';'波数差*cm';'量子缺'}';

%answer(:,1)=[{'组序号'};x(1:leng)];

for i=1:leng

   

answer(i,5)=10^7/data(i,2);  
 

   

  

%将波长换算成波数,nm->cm^-1

   

answer(i,6)=10^7/data(i,4);

   

answer(i,7)=answer(i,6)-answer(i,5);

   %波数差(不用里德伯插值表时没什么用)

   

answer(i,8)=findqd(data(i,1),answer(i,5),data(i,3),answer(i,6));

end

ans=num2cell(answer);    

%用了元胞数组完成一个简单的结果展示,可以输出为excel

ans=[{'第一条谱线量子数','第一条谱线波长/nm','第二条谱线主量子数','第二条谱线波长/nm','第一条谱线波数*cm','第二条谱线波数*cm','波数差*cm','量子缺'};ans];

ans

%%%%%%%%%%%%%画能级图

clear i x

R=109737.31;

for i=1:1:leng

   

l=[data(i,7)-0.8,data(i,7)-0.2];

    for

j=3:1:7

       

T=Fix(j,answer(i,8));

       

line1T=[Fix(answer(i,1),answer(i,8)),Fix(data(i,5),answer(data(i,6),8))];

       

line2T=[Fix(answer(i,3),answer(i,8)),Fix(data(i,5),answer(data(i,6),8))];

       

line1=[data(i,7)-0.55,data(i,6)-0.5];

       

line2=[data(i,7)-0.45,data(i,6)-0.5];

       

plot(l,ones(1,2).*T,'k','LineWidth',2);hold
on 

%画能级(为了省事直接把hc放到单位里了)

       

symb=['S','P','D'];

       

text(l(2)+0.08,T,{j});text(l(2)+0.13,T,{symb(data(i,7))});

       

plot(line1,line1T,'b','LineWidth',1+0.5*i);

   %画跃迁情况

       

plot(line2,line2T,'b','LineWidth',1+0.5*i);

    end

end

title('钠原子能级跃迁图','fontsize',15);

ylabel('能量/hc','fontsize',10);

hold off

//////////////////////////////////////////////////////////////////////////////////////////

短短 几行代码推敲了一个星期,还是 基本功太差。实验原理似懂非懂,MATLAB也用的半生不熟。学的是很粗糙的,Mathematica、MATLAB相互混淆,用这个的时候依赖另一个。很多工具都会一点,但是都没有办法把一个简单的问题在段时间内干练地解决掉。
发布了29 篇原创文章 · 获赞 3 · 访问量 6718

猜你喜欢

转载自blog.csdn.net/weixin_43316938/article/details/88393552
今日推荐