Gmd.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:9k
源码类别:

其他行业

开发平台:

Matlab

  1. % This function is developed for the computation of GMD, GMRL and
  2. % GMRC for single-circuit and double-circuit transposed transmission line.
  3. % Copyright (C) 1998 by H. Saadat
  4. function [GMD, GMRL, GMRC] = gmd
  5. clc, clear
  6. par = [
  7. ' Parameters of transposed transmission lines              '
  8. '                                                          '
  9. '     Number of three-phase circuits            Enter      '
  10. '     ------------------------------            -----      '
  11. '     Single-circuit line                         1        '
  12. '     Double-circuit vertical configuration       2        '
  13. '     Double-circuit horizontal configuration     3        '
  14. '     To quit                                     0        '
  15. '                                                          '];
  16. disp(par)
  17. nc = -1;
  18.   while nc ~=1 & nc ~= 2 & nc ~=3 & nc~=0
  19.   nc = input('Select number of menu ');
  20.     if nc ~= 1 & nc ~= 2 & nc ~=3 & nc~=0
  21.      disp('Enter 1, 2 3 or 0'), end
  22.   end
  23. fprintf(' n')
  24. clc
  25. if nc == 0, return, end
  26. if nc == 1
  27.    ckt1 = [
  28.    '              b                                                 '
  29.    '              O                            For spacing unit use '
  30.    '             /                            m within quotes or   '
  31.    '            /                             ft within quotes.    '
  32.    '           /                                                   '
  33.    '         D12     D23                                            '
  34.    '         /                      a           b           c      '
  35.    '        /                       O----D12----O----D23----O      '
  36.    '      a/             c                                         '
  37.    '      O------D13------O    OR     ----------D13----------       '];
  38.    disp(ckt1)
  39.    unit ='z';
  40.    while strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  41.       unit = input('Enter spacing unit within quotes ''m'' or ''ft''-> ');
  42.    if strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  43.       disp('Incorrect spacing unit, try again'),end
  44.    end
  45.    space = 0;
  46.    while length(space) ~= 3
  47.    space = input('Enter row vector [D12, D23, D13] = ');
  48.      if length(space) ~= 3
  49.      disp(' Values of D12, D23, D13 must be entered within brackets, try again.'), end
  50.    end
  51.    D12 = space(1); D23 = space(2);D13=space(3);
  52.    GMD = (D12*D23*D13)^(1/3);
  53. elseif nc == 2
  54.    ckt2 = [
  55.    '                           a             c`(a`)                         '
  56.    ' Circuit Arrangements      O-----S11-----O         For spacing unit use '
  57.    ' --------------------      |                       m within quotes or   '
  58.    ' (1)  abc-c`b`a`          H12                      ft within quotes.    '
  59.    ' (2)  abc-a`b`c`        b  |                b`(b`)                      '
  60.    '                        O--------S22--------O                           '
  61.    '                            |                                           '
  62.    '                           H23                                          '
  63.    '                           c|           a`(c`)                          '
  64.    '                            O----S33----O                               '];
  65.    disp(ckt2)
  66.    nph = 0;
  67.    while nph ~= 1 & nph ~= 2
  68.    nph = input('Enter (1 or 2)  -> ');
  69.    end
  70.    fprintf('  n')
  71.    unit = 0;
  72.    while strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  73.      unit = input('Enter spacing unit within quotes ''m'' or ''ft''-> ');
  74.    if strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  75.      disp('Incorrect spacing unit, try again'),end
  76.    end
  77.    S  =  0;
  78.    while length(S) ~= 3
  79.    S = input('Enter row vector [S11, S22, S33] = ');
  80.      if length(S) ~= 3
  81.      disp(' Values of S11, S22, S33 must be entered within brackets, try again.'), end
  82.    end
  83.    H =  0;
  84.    while length(H) ~= 2
  85.    H = input('Enter row vector [H12, H23] = ');
  86.      if length(H) ~= 2
  87.      disp('Values of H12, H23 must be entered within brackets, try again.'), end
  88.    end
  89.    S11 = S(1); S22 = S(2); S33 = S(3); H12 = H(1); H23 = H(2);
  90.    a1 = -S11/2 + j*H12;
  91.    b1 = -S22/2 + j*0;
  92.    c1 = -S33/2 - j*H23;
  93.    if nph == 1
  94.      a2 = S33/2 - j*H23;
  95.      b2 = S22/2 + j*0;
  96.      c2 = S11/2 + j*H12;
  97.      elseif nph == 2
  98.      a2 = S11/2 + j*H12;
  99.      b2 = S22/2 + j*0;
  100.      c2 = S33/2 - j*H23;
  101.    end
  102. elseif nc == 3
  103.    ckt3 = [
  104.    '        a         b         c             a`(c`)    b`(b`)   c`(a`) '
  105.    '        O---D12---O---D23---O-----S11------O---D12---O---D23---O    '
  106.    '         --------D13--------                --------D13--------     '
  107.    '                                                                    '
  108.    ' Circuit Arrangements                        For spacing unit use   '
  109.    ' --------------------                        m within quotes or     '
  110.    ' (1) abc-a`b`c`                              ft within quotes.      '
  111.    ' (2) abc-c`b`a`                                                     '];
  112.    disp(ckt3)
  113.    nph = 0;
  114.    while nph ~= 1 & nph ~= 2
  115.      nph = input('Enter (1 or 2)  -> ');
  116.    end
  117.    fprintf('  n')
  118.    unit = 0;
  119.    while strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  120.      unit = input('Enter spacing unit within quotes ''m'' or ''ft''-> ');
  121.    if strcmp(unit,'m')~=1 & strcmp(unit,'M') ~=1 & strcmp(unit,'ft')~=1 & strcmp(unit,'FT') ~=1
  122.      disp('Incorrect spacing unit, try again'),end
  123.    end
  124.    S  =  0;
  125.    while length(S) ~= 3
  126.    S = input('Enter row vector [D12, D23, D13] = ');
  127.       if length(S) ~= 3
  128.       disp(' Values of D12, D23, D13 must be entered within brackets, try again.'), end
  129.    end
  130.    S11 = input('Enter Distance between two circuits, S11 = ');
  131.    D12 = S(1); D23 = S(2); D13 = S(3);
  132.    a1 = -(D13+S11/2);
  133.    b1 = -(D23+S11/2);
  134.    c1 = -S11/2;
  135.      if nph == 1
  136.      a2 = S11/2;
  137.      b2 = D12+S11/2;
  138.      c2 = D13+S11/2;
  139.      elseif nph == 2
  140.      a2 = D13+S11/2;
  141.      b2 = D12+S11/2;
  142.      c2 = S11/2;
  143.      end
  144. end
  145.      if nc==2 | nc == 3
  146.        Da1b1 = abs(a1 - b1);   Da1b2 = abs(a1 - b2);
  147.        Da1c1 = abs(a1 - c1);   Da1c2 = abs(a1 - c2);
  148.        Db1c1 = abs(b1 - c1);   Db1c2 = abs(b1 - c2);
  149.        Da2b1 = abs(a2 - b1);   Da2b2 = abs(a2 - b2);
  150.        Da2c1 = abs(a2 - c1);   Da2c2 = abs(a2 - c2);
  151.        Db2c1 = abs(b2 - c1);   Db2c2 = abs(b2 - c2);
  152.        Da1a2 = abs(a1 - a2);
  153.        Db1b2 = abs(b1 - b2);
  154.        Dc1c2 = abs(c1 - c2);
  155.        DAB=(Da1b1*Da1b2* Da2b1*Da2b2)^0.25;
  156.        DBC=(Db1c1*Db1c2*Db2c1*Db2c2)^.25;
  157.        DCA=(Da1c1*Da1c2*Da2c1*Da2c2)^.25;
  158.        GMD=(DAB*DBC*DCA)^(1/3);
  159.      end
  160.   unitc = 0;
  161.   while strcmp(unitc,'cm')~=1 & strcmp(unitc,'CM') ~=1 & strcmp(unitc,'in')~=1 & strcmp(unitc,'IN') ~=1
  162.   unitc = input('Cond. size, bundle spacing unit: Enter ''cm'' or ''in''-> ');
  163.   if strcmp(unitc,'cm')~=1 & strcmp(unitc,'CM') ~=1 & strcmp(unitc,'in')~=1 & strcmp(unitc,'IN') ~=1
  164.      disp('Incorrect conductor unit, try again'),end
  165.   end
  166. if unitc == 'cm' | unitc == 'CM'
  167. dia = input('Conductor diameter in cm = '); r=dia/2;
  168. Ds  = input('Geometric Mean Radius in cm = ');
  169. elseif unitc == 'in' | unitc == 'IN'
  170. dia = input('Conductor diameter in inch = '); r=dia/2;
  171. Ds  = input('Geometric Mean Radius in inch = ');
  172. end
  173. nb = 0;
  174.    while nb ~= 1 & nb ~= 2 & nb ~= 3 & nb ~= 4
  175.    nb =  input('No. of bundled cond. (enter 1 for single cond.) = ');
  176.      if nb ~= 1 & nb ~= 2 & nb ~= 3 & nb ~= 4
  177.      disp('You can only enter 1 or 2 or 3 or 4'), end
  178.      end
  179. if nb > 1
  180. %  fprintf(' n')
  181.    if unitc == 'cm' | unitc == 'CM'
  182.      d = input('Bundle spacing in cm = ');
  183.      elseif unitc == 'in' | unitc == 'IN'
  184.      d = input('Bundle spacing in inch = ');
  185.      end
  186. else d = 0; end
  187. if unit == 'm'| unit =='M'
  188.      if unitc == 'cm'| unitc == 'CM', Ds = Ds/100; r = r/100; d = d/100;
  189.      elseif unitc == 'in'| unitc == 'IN', Ds = 2.54*Ds/100; r = 2.54*r/100; d = 2.54*d/100;
  190.      end
  191. elseif unit == 'ft' | unit == 'FT'
  192.      if unitc == 'in'| unitc == 'IN', Ds = Ds/12; r = r/12; d = d/12;
  193.      elseif unitc == 'cm'| unitc == 'CM', Ds = Ds/(2.54*12); r = r/(2.54*12); d = d/(2.54*12);
  194.      end
  195. end
  196. if nb == 1, Dsb = Ds;  rb = r;
  197. elseif nb == 2, Dsb = (d*Ds)^(1/2); rb = (d*r)^(1/2);
  198. elseif nb == 3, Dsb = (d^2*Ds)^(1/3); rb = (d^2*r)^(1/3);
  199. elseif nb == 4, Dsb = 2^0.125*(d^3*Ds)^(1/4); rb = 2^0.125*(d^3*r)^(1/4);
  200. end
  201. if nc == 1
  202. GMRL = Dsb; GMRC = rb;
  203. elseif nc == 2 | nc == 3
  204. DSA=sqrt(Dsb*Da1a2);      rA = sqrt(rb*Da1a2);
  205. DSB=sqrt(Dsb*Db1b2);      rB = sqrt(rb*Db1b2);
  206. DSC=sqrt(Dsb*Dc1c2);      rC = sqrt(rb*Dc1c2);
  207. GMRL=(DSA*DSB*DSC)^(1/3); GMRC = (rA*rB*rC)^(1/3);
  208. end
  209. fprintf('  nn')
  210. if unit == 'm' | unit =='M'
  211. fprintf(' GMD  = %8.5f mn',GMD)
  212. fprintf(' GMRL = %8.5f m',GMRL),  fprintf('   GMRC = %8.5f mn', GMRC)
  213. elseif unit == 'ft' | unit == 'FT'
  214. fprintf(' GMD  = %8.5f ftn',GMD)
  215. fprintf(' GMRL = %8.5f ft',GMRL), fprintf('   GMRC = %8.5f ftn', GMRC)
  216. end