from intercalar03 by Miguel D. B.
Intercalates the elements of 2 or more vectors to form one row vector

[TT,T]=intercalar03(varargin)
function [TT,T]=intercalar03(varargin)
%[TT,T]=intercalar03(A,B,C,...)	Intercala dos o ms vectores vectores fila.
%Alterna los elementos de A, B, C....
%
%TT es un vector formado as: TT=[a1 b1 c1 a2 b2 c2...an bn cn]
%T es la correspondiente matriz de donde se obtiene leyendo las columnas: T=[a1 b1 c1; a2 b2 c2;...;an bn cn]
%
%TT=intercalar03(A) toma B=A
%
%Para todo B,C,D... que sea un escalar, ste se copia a s mismo hasta ser del tamao de A
%El truco est en colocar un vector fila debajo del otro
%en una matriz, y luego leer las columnas de la misma.
%
%Ejemplo 1: Intercalar letras
%[c,d]=intercalar03('hello')
%
%Ejemplo 2: Intercalar los elementos de 2 matrices
%a=magic(3), b=a-5, [c,d]=intercalar03(a,b)
%
%Ejemplo 3: Intercalar con 0 Nan para graficar el radio-vector de una elipse (Nan corta las lneas)
%t=0:pi/20:2*pi; x=2*cos(t); y=sin(t); plot(x,y), grid on, hold on
%xx=intercalar03(x,0,nan); yy=intercalar03(y,0,nan); plot(xx,yy,'r')


%%(c). Miguel Duque. Enero 8 de 2006--Modificado Marzo 11 de 2006

n=nargin;
T=varargin{1}(:).';	%Asegurarse que A sea un vector fila
s=length(T);			%El tamao de A se requiere para cuando algn B,C,D... es escalar
if n==1
%	Si slo hay un argumento de entrada, se intercala A con l mismo (B=A)
   varargin{2}=varargin{1}; 
   n=2;
end

%-----------------------------------------------%
%Este es todo el truco del algoritmo:
%	1. Formar una matriz T con los vectores fila
%  2. Leer TT en las columnas de T
%-----------------------------------------------%  
   
%	1.Creacin de la matriz: Se hace fila por fila
for ii=2:n
   if length(varargin{ii})==1		
      %Caso en que algn B,C,D... es un escalar: se copia a s mismo...k--> t=[k k...k] (s veces)
      	%Esto se hace como t=k(ones(1,s))
      T=[T; varargin{ii}(ones(1,s))];
   else
      T=[T;varargin{ii}(:).'];
   end 
end
%Leer las columnas de la matriz
TT=T(:).';

Contact us at files@mathworks.com