⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qcacp.m

📁 The EM Wave MATLAB Library consists of a collection of MATLAB programs related to electromagnetic wa
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                             qcacp.m                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Main program for the calculation of effective propagation constant 
% under the quasicrystalline approximation with coherent potentail 
% approximation (QCA-CP) for a medium with particle size distribution 
% -- Part of the Electromagnetic Wave MATLAB Library (EWML)--
%    <http://www.emwave.com/>

% Original: by K.H. Ding, November 1998

% input parameters
freq=input('Enter the frequency (GHz) : ');
ep0=input('Enter the relative permittivity of background : ');
eps=input('Enter the relative permittivity of scatterer : ');
alf=input('Enter the parameter "P" of size distribution : ');
gma=input('Enter the parameter "Q" of size distribution : ');
am=input('Enter the mode radius of size distribution (cm) : ');
na=input('Enter the number of discretized radius sizes : ');

wavl=30/freq;
k0=2*pi/wavl;
k=k0*sqrt(ep0);
ks=k0*sqrt(eps);
mu=((ks/k)^2-1)/3;

% determine constant "b" in size distribution
b=alf/gma/(am^gma);

pi6=pi/6;
alf3=alf+3;
alf6=alf+6;
af4g=(alf+4)/gma;
af6g=alf6/gma;
I=eye(na);
niter=10;

% determine the range of radius
ac=(af6g/b)^(1.0/gma);
eaf6g=exp(af6g);
aend=1.0;
np=1000;
da=ac/np;
amin=ac;
for ip=1:np
  a=ac-da*ip;
  ratio=((a/ac)^alf6)*eaf6g*exp(-b*a^gma);
  if ratio < 1.0e-3
    break;
  end
end
amin=a;
da=(aend-ac)/np;
amax=ac;
for ip=1:np
  a=ac+da*ip;
  ratio=((a/ac)^alf6)*eaf6g*exp(-b*a^gma);
  if ratio < 1.0e-3
    break;
  end
end
amax=a;

% determine discrete diameters "dia"
xa=zeros(1,na);
xb=zeros(1,na);
dia=zeros(1,na);
da=(amax-amin)/na;
for ia=1:na
  xa(ia)=amin+da*(ia-1);
  xb(ia)=xa(ia)+da;
  dia(ia)=xa(ia)+xb(ia);
end

fp=fopen('qcacp.dat','w+');
for nf=1:201
  ftot=0.002*(nf-1);
  if ftot == 0.0
    ner=0.0;
    edc=0.0;
  else

%   determine constant "c" in size distribution
    c=3*ftot*gma*b^af4g/4/pi/gamma(af4g);

%   determine discrete volume fractions "fv", and number
%   densities "rho", and contants xi0, xi1,xi2, and xi3
    fv=zeros(1,na);
    rho=zeros(1,na);
    xi0=0.0;
    xi1=0.0;
    xi2=0.0;
    xi3=0.0;
    c4p3=c*4*pi/3;
    for ia=1:na
      fxa=c4p3*(xa(ia)^alf3)*exp(-b*xa(ia)^gma);
      fxb=c4p3*(xb(ia)^alf3)*exp(-b*xb(ia)^gma);
      fv(ia)=(fxa+fxb)*da/2;
      vol=pi6*dia(ia)^3;
      rho(ia)=fv(ia)/vol;
      xi0=xi0+pi6*rho(ia);
      xi1=xi1+pi6*rho(ia)*dia(ia);
      xi2=xi2+pi6*rho(ia)*dia(ia)^2;
      xi3=xi3+fv(ia);
    end

%   build matrix Ct (k=0)
    Ct=zeros(na,na);
    dn=1.0-xi3;
    for ia=1:na
      ni=rho(ia);
      Ri=dia(ia);
      for ja=1:na
        nj=rho(ja);
        Rj=dia(ja);
        tm1=(Ri+Rj)^3/dn;
        tm2=(3*Ri*Rj*(Ri^2+Rj^2)*xi2+3*(Ri*Rj)^2*(Ri+Rj)*xi1+9*(Ri*Rj)^2*xi2+(Ri*Rj)^3*xi0)/(dn^2);
        tm3=(9*(Ri*Rj*xi2)^2*(Ri+Rj)+6*(Ri*Rj)^3*xi1*xi2)/(dn^3);
        tm4=(9*Ri^3*Rj^3*xi2^3)/(dn^4);
        Ct(ia,ja)=-pi6*(tm1+tm2+tm3+tm4)*sqrt(ni*nj);
      end
    end

%   build matrix Ht (k=0)
    Ht=zeros(na,na);
    Ht=inv(I-Ct)-I;

%   build matrix H (k=0)
    H=zeros(na,na);
    for ia=1:na
      ni=rho(ia);
      for ja=1:na
        nj=rho(ja);
        H(ia,ja)=Ht(ia,ja)/(sqrt(ni*nj));
      end
    end

    tm2=zeros(na,1);
    for ia=1:na;
      for ja=1:na
        tm2(ia)=tm2(ia)+dia(ja)^3*rho(ja)*H(ja,ia)/8;
      end
    end

%   initial solution
    p2=ones(1,3);
    p2(3)=mu*(ftot-1);
    p2(2)=mu-4*mu*ftot-1;
    root2=sqrt(roots(p2));
    kef=k*root2(1);

%   iterative solution
    for iter=1:niter
      y=mu/((kef/k)^2+mu);
      D=1-ftot*y;
      tm1=0.0;
      for ia=1:na
        tm1=tm1+fv(ia)*(1+i*2*kef^3*y*(dia(ia)^3/8+tm2(ia))/3/D);
      end
      kef=sqrt(k^2+3*kef^2*y*tm1/D);
    end
    ner=2*imag(kef)/k;
    edc=real(kef^2/k^2);
  end
  fprintf(fp,'%9.6f %14.9f %14.9f \n',ftot,ner,edc);
end
fclose(fp);

% plot attenuation rate and effective permittivity
clear;
load qcacp.dat -ascii;
figure;
plot(qcacp(:,1),qcacp(:,2),'r:');
axis([0.0,0.4,0.0,8e-4]);
xlabel('Volume Fraction ');
ylabel('Attenuation Rate ');
legend('QCA-CP-PY');
figure;
plot(qcacp(:,1),qcacp(:,3),'r:');
axis([0.0,0.4,1.0,1.7]);
xlabel('Volume Fraction ');
ylabel('Effective Permittivity ');
legend('QCA-CP-PY');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -