www.gusucode.com > 运用粒子群和改进粒子群算法求解典型函数 > 运用粒子群和改进粒子群算法求解典型函数/pso优化算法/hiddenutils/spiral_dyn.m

    % spiral_dyn.m
% returns x,y position along an archimedean spiral of degree n
% based on cputime, first time it is called is start time
%
% based on: r = a*(theta^n)
%
% usage: [x_cnt,y_cnt] = spiral_dyn(n,a)
% i.e., 
%   n =  2 (Fermat)
%     =  1 (Archimedes)
%     = -1 (Hyberbolic)
%     = -2 (Lituus)

% Brian Birge
% Rev 1.1
% 8/23/04

function [x_cnt,y_cnt] = spiral_dyn(n,a)
 % this keeps the same start time for each run of the calling function 
 % this will reset when any calling prog is re-saved or workspace is
 % cleared
  persistent tnot iter
 % find starting time
  if ~exist('tnot') | length(tnot)==0
     tnot = cputime;
   %  iter = 0;
  end
  %iter = iter+10 ;
  
 theta = cputime-tnot;
 %theta = iter/10000;
 
 r = a*(theta.^n);
 
 x_cnt = r*cos(theta);
 y_cnt = r*sin(theta);
 return