www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/match1.m

    function [ObjV,S21_passband] = match1(Chrom,num_integer,num_parameter)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
ChromCopy=Chrom;
column_of_compoment=num_integer+1:num_integer+num_integer*num_parameter;                             %代表元件值的基因所在列的列标号

num_structure=1:num_integer;                        %单元结构的标号

[num_of_individual,num_of_variable]=size(ChromCopy);                       %提取出种群的个体数目和变量数

frequency_1MHz=1e6.*[30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 56 47 48 49 50 ...
    51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...
    71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88];
%    1 2 3 4 5 6 7 8 9 10 11 ...
%    98 99 100 101 102 103 104 105 106 107 108 109 110];   %设置需要计算的频率点
num_of_point=length(frequency_1MHz);               %用于计算的频率点的数目

C0=90*1e-12;
LO=100*1e-9;

ABCD=zeros(2,2,num_of_individual,num_of_point);    %预先给ABCD矩阵分配内存空间

for f=1:num_of_point              %频率点循环
  w=2*pi*frequency_1MHz(f);
  for k=1:num_of_individual       %个体循环
%    ABCD(:,:,k,f)=[1 0;1/(1i*w*LO)+1i*w*C0 1];
     ABCD(:,:,k,f)=[1 0;0 1];
    structure=zeros(2,2,num_integer);       %预先给structure矩阵分配内存空间,共包括num_integer个单元结构

    for m=1:num_integer
      if m==1
          ChromCopy(k,num_structure(1))=8;
          L=ChromCopy(k,column_of_compoment(1))*1e-9/5;
          C=(ChromCopy(k,column_of_compoment(2))/500*(500-90)+90)*1e-12;
      else
      increment=(m-1)*num_parameter;
      L=ChromCopy(k,column_of_compoment(1+increment))*1e-9;
      C=ChromCopy(k,column_of_compoment(2+increment))*1e-12;
      R=ChromCopy(k,column_of_compoment(3+increment));
      end
      switch ChromCopy(k,num_structure(m))         %判断单元电路的结构
        case 0                     %0代表空单元
          A=1;
          B=0;
          C=0;
          D=1;   
        case 1                     %1代表串联L
          A=1;
          B=1i*w*L;
          C=0;
          D=1;
        case 2                     %2代表串联C
          A=1;
          B=1/(1i*w*C);
          C=0;
          D=1;
        case 3                     %3代表并联L
          A=1;
          B=0;
          C=1/(1i*w*L);
          D=1;
        case 4                     %4代表并联C
          A=1;
          B=0;
          C=1i*w*C;
          D=1;
        case 5                    %5代表串联的串联LC
          A=1;
          B=1i*w*L+1/(1i*w*C);
          C=0;
          D=1;
        case 6                    %6代表串联的并联LC
          A=1;
          B=1/(1/(1i*w*L)+1i*w*C);
          C=0;
          D=1;
        case 7                    %7代表并联的串联LC
          A=1;
          B=0;
          C=1/(1/(1i*w*C)+1i*w*L);
          D=1;
        case 8                    %8代表并联的并联LC
          A=1;
          B=0;
          C=1i*w*C+1/(1i*w*L);
          D=1;
        case 9                   %9代表变压器电阻
          A=1;
          B=R;
          C=0;
          D=1;
        case 10                   %10代表串联电阻
          A=1;
          B=0;
          C=1/R;
          D=1;
        case 11                   %11代表
          A=1;
          B=R/(1+1i*w*R*C);
          C=0;
          D=1;
        case 12                   %12代表
          A=1;
          B=0;
          C=1/R+1i*w*C;
          D=1;
        case 13                   %13代表
          A=1;
          B=1/(1/R+1/(1i*w*L));
          C=0;
          D=1;
        case 14                   %14代表
          A=1;
          B=0;
          C=1/R+1/(1i*w*L);
          D=1;
        case 15                   %15代表
          A=1;
          B=1/(1/R+1/(1i*w*L)+1i*w*C);
          C=0;
          D=1;
        case 16                   %16代表
          A=1;
          B=0;
          C=1/R+1/(1i*w*L)+1i*w*C;
          D=1;
        case 17                   %17代表
          A=1;
          B=R+1i*w*L;
          C=0;
          D=1;
        case 18                   %18代表
          A=1;
          B=R+1/(1i*w*C);
          C=0;
          D=1;
        case 19                   %19代表
          A=1;
          B=R+1i*w*L+1/(1i*w*C);
          C=0;
          D=1;
        case 20                   %20代表
          A=1;
          B=0;
          C=1/(R+1i*w*L);
          D=1;
        case 21                   %21代表
          A=1;
          B=0;
          C=1/(R+1/(1i*w*C));
          D=1;
        case 22                   %22代表
          A=1;
          B=0;
          C=1/(R+1i*w*L+1/(1i*w*C));
          D=1;
      end
      structure(:,:,m)=[A B;C D];
      ABCD(:,:,k,f)=ABCD(:,:,k,f)*structure(:,:,m);
    end        
  end
end
S21_all=zeros(num_of_point,num_of_individual);
S11_all=zeros(num_of_point,num_of_individual);
polar_point=zeros(num_of_point,num_of_individual);
for f=1:num_of_point
    S21_all(f,:)=-20*log10(abs(2./(squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f)))));   %由ABCD矩阵计算S21
    S11_all(f,:)=-20*log10(abs((squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50-squeeze(ABCD(2,1,:,f))*50-squeeze(ABCD(2,2,:,f)))./(squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f)))));
    polar_point(f,:)=20*log10(abs((squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f))))-2);
end
ObjV=zeros(num_of_individual,1);
S21_passband=zeros(num_of_individual,1);
for k=1:num_of_individual
    S21_passband(k)=max(S21_all(1:59,k));       %通带的最大插损
    for f=1:59
   if  S21_all(f,k)>1
       ObjV(k,1)=ObjV(k,1)+10*(S21_all(f,k)-0).^2;
   else ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-0).^2;
   end
   
%   if  S11_all(f,k)<25
%       ObjV(k,1)=ObjV(k,1)+(S11_all(f,k)-25).^2;
%   else ObjV(k,1)=ObjV(k,1);
%   end
   
%   if polar_point(f,k)>-50
%       ObjV(k,1)=ObjV(k,1)+polar_point(f,k);
%   else ObjV(k,1)=ObjV(k,1)-50;
%   end
    end
%    for f=60:num_of_point
%        ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-60).^2;
%    end
    
end

end