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

📄 mom.m

📁 利用矩量法求解hallen方程和伯克林顿方程
💻 M
📖 第 1 页 / 共 2 页
字号:



%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
%***********************************************************************
%***          HALLEN'S INTEGRAL EQUATION                             ***
%***********************************************************************

case 2
%******************************************************
%     SOME CONSTANTS AND INPUT DATA
%******************************************************
nm=input('NUMBER OF SUBDIVISIONS <ODD OR EVEN NUMBER> =');
tl=input('TOTAL DIPOLE LENGTH <WAVELENGTHS> =');
ra=input('RADIUS OF DIPOLE <WAVELENGTHS> =');
n=nm;
l=tl;
rho=ra;
rtod=180/pi;
eta=120*pi;
bk=2*pi;
cj=0.0+j*1.0;
dz=l/(2*(n-1));
dz1=l/(2*n);
%C***********************************************************************
%C    PERFORM COMPLEX INTEGRATION USING SIXTEEN POINT 
%C    GAUSSIAN QUADRATURE WITH INCREASING ACCURACY SET 
%C    BY INTEGER NO
%C***********************************************************************
absica=[-0.095012509837637,-0.281603550779259;
        -0.458016777657227,-0.617876244402644;
        -0.755404408355003,-0.865631202387832;
        -0.944575023073233,-0.989400934991650;
         0.095012509837637,0.281603550779259;
         0.458016777657227,0.617876244402644;
         0.755404408355003,0.865631202387832;
         0.944575023073233,0.989400934991650];
wght=[0.189450610455068,0.182603415044924;
         0.169156519395002,0.149595988816577;
         0.124628971255534,0.095158511682493;
         0.062253523938648,0.027152459411754;
         0.189450610455068,0.182603415044924;
         0.169156519395002,0.149595988816577;
         0.124628971255534,0.095158511682493;
         0.062253523938648,0.027152459411754];
      %************************************************************
      %     FILL THE MATRIX AND EXCITATION VECTOR OF THE SYSTEM: 
      %      [ZMATRX] and [ELECUR]
      %************************************************************
for i=1:n
    z=(2*i-1)*dz1/2.0;
    zmatrx(i,n)=-cos(bk*z);
    elecur(i)=-cj*sin(bk*z)/(2.0*eta);
    for j=1:n-1
        lower=(j-1)*dz1;
        upper=(j)*dz1;
        %*****************************************************************
        %     PERFORM NUMERICAL INTEGRATION OF THE KERNEL FOR HALLEN'S
        %     INTEGRAL EQUATION
        %*****************************************************************
        no=10;
        del=(upper-lower)/(2.0*no);
        sum=0.0+j*0.0;
        for t=1:no
            s=lower+(2*t-1)*del;
            for q=1:16
               x=s+absica(q)*del;
               %***********************************************************************
               %C    KERNEL PROVIDES THE KERNEL OF HALLEN'S EQN FOR INTEGRATION 
               %C    SYMMETRY IS USED TO REDUCE THE SYSTEM OF EQUATIONS AND 
               %C    HENCE ALTERS THE KERNEL
               %***********************************************************************
                r1=sqrt(rho*rho+(z-x)*(z-x));
                r2=sqrt(rho*rho+(z+x)*(z+x));
                kernel=exp(-cj*bk*r1)/(4.0*pi*r1)+exp(-cj*bk*r2)/(4.0*pi*r2);
                sum=sum+wght(q)*kernel;
            end
        end
        res=sum*del;
    zmatrx(i,j)=res;
  end
end

%*********************************************************************************
%   DECOMPOSE AND SOLVE THE SYSTEM FOR THE CURRENT DISTRIBUTION
%*********************************************************************************

%****************************
%    GET SCALING INFO.
%****************************
for i=1:n
    zmax=0.0;
    for j=1:n
        caz=abs(zmatrx(i,j));
        if caz >= zmax
            zmax=caz;
        end
    end
    scal(i)=1.0/zmax;
 end
%**************************** 
%    CROUT's algorithm.
%****************************
for j=1:n
    for i=1:j-1
        for k=1:i-1
            zmatrx(i,j)=zmatrx(i,j)-zmatrx(i,k)*zmatrx(k,j);
        end
    end
    zmax=0.0;
    %*****************************************
    %    SEARCH FOR LARGEST PIVOT ELEMENT.
    %*****************************************
    for i=j:n
        for k=1:j-1
            zmatrx(i,j)=zmatrx(i,j)-zmatrx(i,k)*zmatrx(k,j);
        end
        problem=scal(i)*abs(zmatrx(i,j));
        if problem >=zmax
            imax=i;
            zmax=problem;
        end
     end
     %***********************************
     %    INTERCHANGE THE ROWS.
     %***********************************
    if j~=imax
        for k=1:n
            temp=zmatrx(imax,k);
            zmatrx(imax,k)=zmatrx(j,k);
            zmatrx(j,k)=temp;
        end
        scal(imax)=scal(j);
    end
    iperm(j)=imax;
    %***********************************
    %    DIVIDE BY PIVOT ELEMENT.
    %***********************************
    if j~=n
        for i=j+1:n
            zmatrx(i,j)=zmatrx(i,j)/zmatrx(j,j);
        end
    end
 end
%****************************************************************** 
%    SOLVES LINEAR SYSTEM GIVEN THE LU DECOMPOSITION FROM LUDEC
%    FORCING VECTOR IS REPLACED WITH SOLUTION VECTOR UPON EXIT
%*****************************
%    FORWARD SUBSTITUTION.
%******************************************************************
for i=1:n
    temp=elecur(iperm(i));
    elecur(iperm(i))=elecur(i);
    for j=1:i-1
        temp=temp-zmatrx(i,j)*elecur(j);
    end
    elecur(i)=temp;
 end
%******************************** 
%    BACKWARD SUBSTITUTION.
%********************************
for i=1:n
    ii=n-i+1;
    temp=elecur(ii);
    for j=ii+1:n
        temp=temp-zmatrx(ii,j)*elecur(j);
    end
    elecur(ii)=temp/zmatrx(ii,ii);
 end
%*************************************************************************** 
%     COMPUTATION OF THE INPUT IMPEDANCE AND CURRENT DISTRIBUTION
%***************************************************************************
zin=1.0/elecur(1);
%******************************************************************
%     Output files for curr-MoM_m.dat
%******************************************************************
fid=fopen('Curr-MoM_m.dat','wt');
fprintf(fid,'CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE\n');
fprintf(fid,'POSITION Z:   CURRENT MAGNITUDE:    CURRENT PHASE:    SECTION:\n');
for i=1:n-1
   %******************************************************************
   %    THIS FUNCTION IS COMPUTES THE ARCTANGENT GIVEN X,Y.  IT IS 
   %    SIMILAR TO ATAN2 EXCEPT IT AVOIDS THE RUN TIME ERRORS ON 
   %    SOME MACHINES FOR SMALL ARGUMENTS.
   %******************************************************************
    smlt=0.0000001;
    if (abs(x)<=smlt) & (abs(y)<=smlt)
        btan2=0.0;
    else
        btan2=atan2(real(elecur(i)),imag(elecur(i)));
    end
    cur=abs(elecur(i));
    pha=rtod*btan2;
    table=[i*dz-dz/2.0,cur,pha,i];
    fprintf(fid,'%2.6f       %2.6f              %3.6f          %3.1f\n\n\n\n',table);
 end
%******************************************************************
%     Output figure for curr-MoM_m.dat
%******************************************************************

i=[1:n-1];
smlt=0.0000001;
    if (abs(x)<=smlt) & (abs(y)<=smlt)
        btan2=0.0;
    else
        btan2=atan2(real(elecur(i)),imag(elecur(i)));
    end
     cur=abs(elecur(i));
    pha=rtod*btan2;
stem(i*dz-dz/2.0,cur)
grid on
xlabel('Position (z)')
ylabel('Current magnitude')
title('CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE')
fclose(fid);
figure;
%*********************************************************************************
%   CALCULATE THE RADIATION PATTERN OF THE ANTENNA
%*********************************************************************************
maxang=181;
pmax=-1.0;
for j=1:maxang
    theta=(j-1)/(maxang-1)*pi;
    %********************************************************************
    %    CALCULATES THE RADIATED POWER LEVEL AT ANGLE THETA RADIANS
    %    TO THE DIPOLE AXIS.  SINCE THE PATTERN IS NORMALIZED TO THE 
    %    MAXIMUM RADIATED POWER, COMMON CONSTANTS ARE REMOVED
    %********************************************************************
    sth=sin(theta);
    cth=cos(theta);
    arg=pi*dz*cth;
    if abs(arg) <= 0.001
        ft=1.0;
    else
        ft=sin(arg)/arg;
    end
    n2=n-1;;
    crt=0.0+j*0.0;
    for k=1:n2
        argp=pi*(-l+(k-1)*2.0*dz+dz)*cth;
        crt=crt+exp(cj*argp)*ft*elecur(k);
        argp=pi*(-l+(n2+k-1)*2.0*dz+dz)*cth;
        crt=crt+exp(cj*argp)*ft*elecur(k);
    end
    power=abs(crt)*sth*sth;
    pwr(j)=power;
    if pwr(j)>=pmax
        pmax=pwr(j);
    end
 end
 
%******************************************************************
%     Output files for Patt-MoM_m.dat
%******************************************************************
hel=fopen('Patt-MoM_m.dat','wt');
fprintf(hel,'RADIATION PATTERN   vs  OBSERVATION ANGLE THETA\n');
fprintf(hel,'THETA (in degrees)      MAGNITUDE (in dB)\n');
%*******************************************************************
%   WRITE THE RADIATION PATTERN IN dB
%*******************************************************************
for i=1:maxang
    theta=(i-1)/(maxang-1)*180;
    pattrn=pwr(i)/pmax;
    if pattrn <=0.00001
        pattrn=-100;
    else
        pattrn=20*log10(pattrn);
    end
    table1=[theta,pattrn];
    fprintf(hel,'%3.1f                         %3.3f         \n',table1);
end
%******************************************************************
%     Output figure for Patt-MoM_m.dat
%******************************************************************
i=[1:181];
theta=(i-1);
pattrn=pwr(i)/pmax;
pattrn=20*log10(pattrn);
% Polar Plot
pattrn=[pattrn,fliplr(pattrn(1:180))];
q=polar_dB([0:360],pattrn,-40,0,4,'-');
set(q,'linewidth',1.5);
% plot(theta,pattrn,'linewidth',2);
% axis ([0 180 -60 0]);
% grid on;
% xlabel('Theta(degrees)');
% ylabel('Magnitude(dB)');
title('RADIATION PATTERN   vs   OBSERVATION ANGLE')
for i=182:361
    theta=(i-1)/(maxang-1)*180;
    pattrn=pwr(362-i)/pmax;
    if pattrn <=0.00001
        pattrn=-100;
    else      
        pattrn=20*log10(pattrn);
    end
    table2=[theta,pattrn];
    fprintf(hel,'%3.1f                         %3.3f         \n',table2);
end
fclose(hel);
end
%*******************************************
%        OUTPUT FILE
%*******************************************
if(option_a==2)
   diary(filename);
end
%*******************************************
%         FORMAT STATEMENTS 
%*******************************************     
disp(sprintf('\n\n\n\n\n\n\n\n'));
disp(strvcat('WIRE ANTENNA PROBLEM','================'));
if (option==1)&(iex==1)
    disp(sprintf('POCKLINGTON''S EQUATION AND MAGNETIC FRILL MODEL'));
elseif (option==1)&(iex==2)
    disp(sprintf('POCKLINGTON''S EQUATION AND DELTA GAP MODEL'));
elseif (option==2)
    disp(sprintf('HALLEN''S EQUATION'));
end
disp(sprintf('\nLENGTH = %4.4f (WLS)',tl));
disp(sprintf('RADIUS OF THE WIRE = %4.4f (WLS)',ra));
disp(sprintf('NUMBER OF SUBSECTIONS = %2.2f\n',nm));
ZR=real(zin);
ZI=imag(zin);
if ZI>0
    output=sprintf('INPUT IMPEDANCE: Z= %5.1f +j %5.1f  (OHMS)\n',ZR,ZI);
else
    output=sprintf('INPUT IMPEDANCE: Z= %5.1f -j %5.1f  (OHMS)\n',ZR,abs(ZI));
end
disp(output);
disp(strvcat('*** NOTE:',...
   '    THE DIPOLE CURRENT DISTRIBUTION IS STORED IN Curr-MoM_m.dat',...
   '    THE AMPLITUDE RADIATION PATTERN IS STORED IN Patt-MoM_m.dat',...
   '    ========================================================='));
diary off;
warning off;

⌨️ 快捷键说明

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