光谱测量——米氏散射计算Matlab代码

 米氏散射的计算非常复杂,限制了其在一般场景的应用。这里附上matlab的计算代码,欢迎大家使用。米氏散射的详情可以参考之前的一篇文章:光谱测量——比尔朗伯定律和米氏散射-CSDN博客

如下代码与参考文献中的代码相比,经过少许简化。

其中,尺寸参数alpha={\frac{\pi d}{lambda}},d为颗粒直径,lambda为波长。

clc
clear
alpha=5:0.1:50;
n =1.195-0.00i ;
f =0 ; %消光截面递推公式求和项
for l=1:70 %级数求和次数
  syms x f1 f2
  if l==1
        f1 =sin(x)./x -cos(x);
        f1dot =diff( f1,x ,1);
        f2 =(sin(x)+i*cos(x))./x -cos(x)+i *sin(x);
        f2dot =diff(f2,x,1);
  else
        f1 =(pi*x/2).*besselj(l+0.5,x);
        f1dot =(pi*x/2).*besselj(l-0.5,x)-l*(pi*x/2).*besselj(l+0.5,x)./x;
        f2 =(pi*x/2).*(besselj(l+0.5,x)-i*bessely(l +0.5,x));
        f2dot =(pi*x/2).*(besselj(l-0.5,x)-i*bessely(l-0.5,x))-l*(pi*x/2).*(besselj(l+0.5,x)-i*bessely(l+0.5,x))./x;
  end
   g1=inline(vectorize(f1),'x'); %将符号变量转换为函数
   g1dot=inline(vectorize(f1dot),'x');
   g2=inline(vectorize(f2),'x');
   g2dot=inline(vectorize(f2dot),'x');
   al=(g1dot(n*alpha).* g1(alpha)-n*g1(n*alpha).*g1dot(alpha))./(g1dot(n*alpha).*g2(alpha)-n*g1(n*alpha).*g2dot(alpha));
   bl =(n*g1dot(n*alpha).*g1(alpha)-g1(n*alpha).*g1dot(alpha))./(n*g1dot(n*alpha).*g2(alpha)-g1(n*alpha).*g2dot(alpha));
   f=f+(2*l+1)*real(al+bl); %( 求消光系数)
end
kext=2./alpha.^2.*f;

plot(alpha,kext);
xlabel('Size Parameter')
ylabel('Extinction Coefficient')

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值