Matlab - Algoritmo para reemplazar la funcion sigadd

 
Vista:

Algoritmo para reemplazar la funcion sigadd

Publicado por Bejorro (1 intervención) el 02/06/2014 07:48:27
Alguien se le ocurre una forma para poder reemplazar esta function sigadd que sirve para sumar funciones por

una funcion que este libre de librerias del matlab como find, min ,max,length

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%Signal Addition 
 
function [y,n] = sigadd(x1,n1,x2,n2)
%implements y(n)=x1(n)+x2(n)
%--------------------------
%[y,n]= sigadd(x1,n1,x2,n2)
% y = sum sequence over n , which includes n1 and n2
% x1 = first sequence over n1 
% x2 = second sequence over n2 ( n2 can be different from n1 )
%
n=min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)
y1=zeros(1,length(n)); y2=y1;   %initialization
y1(find((n>=min(n1)) & (n<=max(n1))==1))=x1   %x1 with duration of y
y2(find((n>=min(n2)) & (n<=max(n2))==1))=x2   %x2 with duration of y
y=y1+y2;                                      %sequence addition
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge De Los Santos
Val: 30
Ha disminuido su posición en 12 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Algoritmo para reemplazar la funcion sigadd

Publicado por Jorge De Los Santos (213 intervenciones) el 02/06/2014 11:50:50
Hola Bejorro.

La solución a lo que planteas sería escribir nuestras propias funciones y utilizarlas como sub-funciones en la función principal.

Te adjunto las funciones max_2, min_2, length_2, zeros_2 y find_2 para sustituir a las correspondientes funciones de librería. La sintaxis de estas es practicamente la misma, evidentemente puede haber ciertas limitaciones respecto a las nativas, pero para lo que requieres creo que se ajustan correctamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function m=max_2(varargin)
if nargin==1
    v=varargin{1};
    m=v(1);
    for i=v
        if i>m
            m=i;
        end
    end
elseif nargin==2
    a=varargin{1};
    b=varargin{2};
    if a>b
        m=a;
    else
        m=b;
    end
end
end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function m=min_2(varargin)
if nargin==1
    v=varargin{1};
    m=v(1);
    for i=v
        if i<m
            m=i;
        end
    end
elseif nargin==2
    a=varargin{1};
    b=varargin{2};
    if a<b
        m=a;
    else
        m=b;
    end
end
end


1
2
3
4
5
6
7
8
9
10
function ind=find_2(cond)
MC=cond;
k=1;
for i=1:length_2(MC)
    if MC(i)>0
        ind(k)=i;
        k=k+1;
    end
end
end


1
2
3
4
5
6
function L=length_2(v)
L=0;
for i=v
    L=L+1;
end
end


1
2
3
4
5
6
7
8
9
10
function X=zeros_2(varargin)
if nargin==1
    dim=varargin{1};
    X(dim,dim)=0;
elseif nargin==2
    nf=varargin{1};
    nc=varargin{2};
    X(nf,nc)=0;
end
end



Cualquier duda respecto a las mismas podéis comentarlo.


Saludos.

Jorge De Los Santos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar