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

    function S21_Difference = bandpassS21_test2(Chrom)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
ChromCopy=Chrom+1;    %复制矩阵

%column_of_compoment=[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];                             %代表元件值的基因所在列的列标号
column_of_compoment=[6 7 8 9 10 11 12 13 14 15];                             %代表元件值的基因所在列的列标号
num_of_component=length(column_of_compoment);             %元件的个数
%num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
num_structure=[1 2 3 4 5];                        %单元结构的标号
ChromCopy(:,column_of_compoment)=ChromCopy(:,column_of_compoment)/10;      %元件值范围为【0.1 250】,精度为0.1
[num_of_individual,num_of_variable]=size(ChromCopy);                       %提取出种群的个体数目和变量数
%frequency_10MHz=[45 46 47 48 49 50 51 52 53 54 55 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80];   %设置需要计算的频率点
frequency_10MHz=[45 46 47 48 49 50 51 52 53 54 55 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100];   %设置需要计算的频率点
expectations_of_S21=crtbase([11 71],[0 40])';
%expectations_of_S21=[0 0 0 0 0 0 0 0 0 0 0 98 96 94 92 90 88 86 84 82 80 78 76 74 72 70 68 66 64 62 60 58 56 54 52 50 48 46 44 42 40 38 36 34 32 30 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100]';
%num_of_point=size(frequency_10MHz,2);
num_of_point=length(frequency_10MHz);               %用于计算的频率点的数目
ABCD=zeros(2,2,num_of_individual,num_of_point);    %预先给ABCD矩阵分配内存空间
for f=1:num_of_point              %频率点循环
  for k=1:num_of_individual       %个体循环
    structure=zeros(2,2,num_of_component/2);       %预先给structure矩阵分配内存空间,共包括5个单元结构
%    num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
    for i=1:2:num_of_component
      switch ChromCopy(k,num_structure((i+1)/2))         %判断单元电路的结构
        case 1                     %1代表空单元
          structure(:,:,(i+1)/2)=[1 0;0 1];    
        case 2                     %2代表串联L
          structure(:,:,(i+1)/2)=[1 2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i;0 1];
        case 3                     %3代表串联C
          structure(:,:,(i+1)/2)=[1 1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-12*1i);0 1];
        case 4                     %4代表并联L
          structure(:,:,(i+1)/2)=[1 0;1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i) 1];
        case 5                     %5代表并联C
          structure(:,:,(i+1)/2)=[1 0;2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-12*1i 1];
        case 6                    %6代表串联的串联LC
          structure(:,:,(i+1)/2)=[1 2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i);0 1];
        case 7                    %7代表串联的并联LC
          structure(:,:,(i+1)/2)=[1 1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i));0 1];
        case 8                    %8代表并联的串联LC
          structure(:,:,(i+1)/2)=[1 0;1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i)) 1];
        case 9                    %9代表并联的并联LC
          structure(:,:,(i+1)/2)=[1 0;2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i) 1];
 %       case 10                   %10代表变压器
 %         structure(:,:,(i+1)/2)=[ChromCopy(k,column_of_compoment(i)) 0;0 1/(ChromCopy(k,column_of_compoment(i)))];
      end
    end
    ABCD(:,:,k,f)=structure(:,:,1)*structure(:,:,2)*structure(:,:,3)*structure(:,:,4)*structure(:,:,5);%*structure(:,:,6)*structure(:,:,7)*structure(:,:,8)*structure(:,:,9)*structure(:,:,10);
  end
end
S21_all=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
end
S21_Difference=zeros(num_of_individual,1);
for k=1:num_of_individual
S21_Difference(k,1)=sum((S21_all(1:11,k)-expectations_of_S21(1:11)).^2)+0.1*sum((S21_all(12:num_of_point,k)-expectations_of_S21(12:num_of_point)).^2);
end
end