www.pudn.com > loopantenna.rar > impmet.m, change:2002-04-17,size:2488b

```function [Z]=       impmet( EdgesTotal,TrianglesTotal,...
EdgeLength,K,...
Center,Center_,...
TrianglePlus,TriangleMinus,...
RHO_P,RHO_M,...
RHO__Plus,RHO__Minus,...
FactorA,FactorFi);
%IMPMET Standard impedance matrix (metal surface)
%
%	Returns the complex impedance matrix [EdgesTotal x EdgesTotal]
%	Uses 9 integration points for every triangle
%   (barycentric subdivision)
%
%   The impedance matrix is calculated as a sum of the contributions
%   due to separate triangles (similar to the "face-pair" method).
%   See Appendix B for a detailed algorithm.
%
%   A 9-point quadrature is used for all integrals, including
%   the self-coupling terms. The alternative source code with
%   the analytical approximation of the self-coupling terms
%   is given in Appendix B. The difference between two methods
%   is not significant.
%
%   Copyright 2002 AEMM. Revision 2002/03/12
%   Chapter 2

%Memory allocation
Z   =zeros  (EdgesTotal,EdgesTotal)+j*zeros(EdgesTotal,EdgesTotal);

%Loop over integration triangles
for p=1:TrianglesTotal

Plus     =find(TrianglePlus-p==0);
Minus    =find(TriangleMinus-p==0);

D=Center_-repmat(Center(:,p),[1 9 TrianglesTotal]); %[3 9 TrianglesTotal]

R=sqrt(sum(D.*D));                              %[1 9 TrianglesTotal]
g=exp(-K*R)./R;                                 %[1 9 TrianglesTotal]

gP=g(:,:,TrianglePlus);                         %[1 9 EdgesTotal]
gM=g(:,:,TriangleMinus);                        %[1 9 EdgesTotal]

Fi=sum(gP)-sum(gM);                             %[1 1 EdgesTotal]
ZF= FactorFi.*reshape(Fi,EdgesTotal,1);         %[EdgesTotal 1]

for k=1:length(Plus)
n=Plus(k);
RP=repmat(RHO__Plus(:,:,n),[1 1 EdgesTotal]);         %[3 9 EdgesTotal]
A=sum(gP.*sum(RP.*RHO_P))+sum(gM.*sum(RP.*RHO_M));
Z1= FactorA.*reshape(A,EdgesTotal,1);
Z(:,n)=Z(:,n)+EdgeLength(n)*(Z1+ZF);
end
for k=1:length(Minus)
n=Minus(k);
RP=repmat(RHO__Minus(:,:,n),[1 1 EdgesTotal]);        %[3 9 EdgesTotal]
A=sum(gP.*sum(RP.*RHO_P))+sum(gM.*sum(RP.*RHO_M));
Z1= FactorA.*reshape(A,EdgesTotal,1);
Z(:,n)=Z(:,n)+EdgeLength(n)*(Z1-ZF);
end
end```