Matlab - Error con los argumentos de salida de una función

 
Vista:

Error con los argumentos de salida de una función

Publicado por Luis Miguel (3 intervenciones) el 01/04/2017 20:07:29
Hola, estoy tratando de realizar gráficas de singularidad, para esto cree una función que se ejecuta a partir de ciertos valores de entrada y los argumentos de salida son o un vector de ceros o un vector con valores, sin embargo me arroja el siguiente error

>> Prueba_Macaulay
Error in MV (line 18)
exp = [];
Output argument "MacaulayV" (and maybe others) not assigned
during call to "MV".
Error in Prueba_Macaulay (line 2)
V = 20000 - 46000 * (MV(0, x - 2500, 0, 7500)) + 40000 * (MV(0, x
- 5500, 0, 7500));

El código de las funciones son:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function MacaulayV = MV(q, int, exp, n)
 
exp = [];
Zerovector =[];
Zerovector = zeros(1, n);
 
    if q == 0
        exp = -1;
    elseif q == 1
        exp = 0;
    elseif q == 2
        exp = 1;
    elseif q == 3
        exp = 2;
    end
 
    if int <= 0
        [MacaulayV] = Zerovector;
    elseif int > 0
        [MacaulayV] = (int).^exp;
    end
 
end
 
 
 
function [MacaulayM] = MM(q, int, exp, n)
 
exp = [];
Zerovector =[];
Zerovector = zeros(1, n);
 
    if q == 0
        exp = 0;
    elseif q == 1
        exp = 1;
    elseif q == 2
        exp = 2;
    elseif q == 3
        exp = 3;
    end
 
    if int <= 0
        [MacaulayM] = Zerovector;
    elseif int > 0
        [MacaulayM] = (int).^exp;
    end
 
end


y el código donde llamo a las funciones es:


1
2
3
4
5
6
x = 0:1:7500;
V = 20000 - 46000 * (MV(0, x - 2500, 0, 7500)) + 40000 * (MV(0, x - 5500, 0, 7500));
M = - 20000 .* x + 46000 * (MM(0, x - 2500, 0, 7500)) + 40000 * (MM(0, x - 5500, 0, 7500));
O = 0 .* x;
subplot(1,2,1), plot(x, V, 'b', x, O, 'k'), grid on, xlabel('x'), ylabel('V(x)');
subplot(1,2,2), plot(x, M, 'b', x, O, 'k'), grid on, xlabel('x'), ylabel('M(x)');

Muchas gracias
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error con los argumentos de salida de una función

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 02/04/2017 19:52:08
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
function MacaulayV = MV(q, int1, exp1, n)
    Zerovector = zeros(1, n);
    int1=int1
    if q == 0
        exp1 = -1;
    elseif q == 1
        exp1 = 0;
    elseif q == 2
        exp1 = 1;
    elseif q == 3
        exp1 = 2;
    end
    condicion=int1 <= 0
    if int1 <= 0
      % cómo no todos los valores son menores 1 entonces no se da
      % está opción
 
        MacaulayV = Zerovector;
 
    elseif int1 > 0
      % cómo no todos los valores son positivos  1 entonces no se da
      % está opción
        MacaulayV  = (int1).^exp1;
    end
  % por lo tanto no tiene argumento de salida  MacaulayV (Output argument
  % "MacaulayV")
end

1
2
3
4
5
6
7
8
>> x = 0:1:10;  MacaulayV=MV(0, x - 5, 0, 10)
int1 =
    -5    -4    -3    -2    -1     0     1     2     3     4     5
condicion =
     1     1     1     1     1     1     0     0     0     0     0
Error in MV (line 2)
    Zerovector = zeros(1, n);
Output argument "MacaulayV" (and maybe others) not assigned during call to "MV".


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
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

Error con los argumentos de salida de una función

Publicado por Luis Miguel (3 intervenciones) el 02/04/2017 23:10:09
Hola Jose Jeremias, entiendo tus comentarios dentro del código. No estoy seguro si me hice entender del todo,

tengo los valores de 1 a n en el vector x; al realizar la operación, en tu ejemplo x-5, para algunos valores va a dar números negativos, para otros números positivos y para uno va ser igual a cero. Por lo tanto para los que sean positivos, el resultado de la función va a ser ese número positivo, elevado a la variable exp, ya previamente definida; y para los que sean cero o números negativos, el resultado siempre va a ser cero.


Ahora me ssruge la duda si Matlab reconoce ese vector elelmento a elemento o tienen que ser todoslos elementos, positivos o negativos, para poder elegir una de las dos condiciones.

Agradezco mucho tu colaboración
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Error con los argumentos de salida de una función

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 02/04/2017 23:43:53
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
36
37
38
39
40
41
42
43
44
45
46
47
48
function principal
x = 0:1:7500;
V = 20000 - 46000 * (MV(0, x - 2500))+ 40000 * (MV(0, x - 5500));
 M = - 20000 .* x + 46000 * (MM(0, x - 2500)) + 40000 * (MM(0, x - 5500));
 O = 0 .* x;
 subplot(1,2,1), plot(x, V, 'b', x, O, 'k'), grid on, xlabel('x'), ylabel('V(x)');
 subplot(1,2,2), plot(x, M, 'b', x, O, 'k'), grid on, xlabel('x'), ylabel('M(x)');
end
 
function MacaulayV = MV(q, int1)
if q == 0
    exp1 = -1;
elseif q == 1
    exp1 = 0;
elseif q == 2
    exp1 = 1;
elseif q == 3
    exp1 = 2;
end
 
for i=1:length(int1)
    if int1(i) <= 0
        MacaulayV(i) = 0;
    elseif int1(i) > 0
        MacaulayV(i)  = (int1(i))^exp1;
    end
end
end
 
function MacaulayM = MM(q, int1)
    if q == 0
    exp1 = 0;
    elseif q == 1
        exp1 = 1;
    elseif q == 2
        exp1 = 2;
    elseif q == 3
     exp1 = 3;
    end
    for i=1:length(int1)
        if int1(i)<= 0
            MacaulayM(i) =0;
        elseif int1(i) > 0
            MacaulayM(i) = (int1(i)).^exp1;
    end
    end
 
end


Es un solo archivo, guardalo con el nombre de principal.m


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
principal
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

Error con los argumentos de salida de una función

Publicado por Luis Miguel (3 intervenciones) el 03/04/2017 00:48:16
Me sirvió mucho, gracias !
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