La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/Matlab/1399683-Sentencia-if.html

Sentencia if

sin imagen de perfil

Sentencia if

Publicado por Pablo (3 intervenciones) el 07/10/2013 09:07:45
Buenos días. Estoy escribiendo mi proyecto fin de carrera y tengo algunas dudas muy simples sobre programación con matlab.
Tengo el dos vectores:
X1_dec=[8;9;13;12;11;8;7;1;6;11];
X2_dec=[12;13;11;5;7;13;9;6;3;14];
y una función:
y=(0.75*(X1_dec).^2+X1_dec.*X2_dec+1.25*(X2_dec).^2);
C=675

Necesito que se cumplan las siguientes tres condiciones:
X1_dec>0
X2_dec>0
X1_dec+X2_dec>=8

Quiero un vector con el valor de Y en el caso de que se cumplan las tres condiciones. Sino, que el valor de Y sea 0.

Esto es lo que he programado:

1
2
3
4
5
6
7
8
9
10
11
for i=1:10
    if X1_dec(i)<0
       y=0
  elseif X2_dec(i)<0
      y=0
 elseif X1_dec(i).*X2_dec(i)<=8
    y=0
 else
    y=C-(0.75*(X1_dec).^2+X1_dec.*X2_dec+1.25*(X2_dec).^2)
end
end

El resultado que obtengo es un vector con el resultado de Y pero no me ejecuta las condiciones ya que en la posición i=7, no se cumple la condición 3. En lugar de devolverme Y=0 en esa posición, me devuelve el valor de Y como si la cumpliese.

Agradecería mucho que me ayudaseis con esta duda. Sé que es muy simple pero no se en qué me estoy equivocando.
sin imagen de perfil

Sentencia if

Publicado por Luis (4 intervenciones) el 08/10/2013 19:32:59
Perdonaras mi ignorancia ya que no he manejado mucho MATLAB o no recuerdo mucho sobre las operaciones que manejas, pero en la posición i=7 tomas de

X1_dec=[8;9;13;12;11;8;7;1;6;11]
y de
X2_dec=[12;13;11;5;7;13;9;6;3;14];

¿7 y 9? Ya que están e la 7° posición y en la condición 3

elseif X1_dec(i).*X2_dec(i)<=8

¿Acaso no es una multiplicación de vectores? 7x9=63 y 63 no es menor o igual a 8. Si es como lo digo ese seria el problema de que se vaya directo a:

y=C-(0.75*(X1_dec).^2+X1_dec.*X2_dec+1.25*(X2_dec).^2)

Saludos.
Imágen de perfil de JOSE JEREMIAS CABALLERO

Sentencia if

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/10/2013 01:50:07
Trata de hacer clara tu pregunta, por una parte cuando inicias tu pregunta dices que quieres que se cumpla esta tres condiciones
X1_dec>0
X2_dec>0
X1_dec+X2_dec>=8

pero sin embargo abajo, empiezas probando si son negativos y además pones X1_dec*X2_dec>=8
que es en conclusión, multiplicación o suma, números positivos o negativos.
Tampoco no eres claro que es quieres como salida Y, un vector o un numero, si es un vector, que valores quieres que salga o si un numero que valores quieres que salga.
Hay mucha confusión en tu pregunta.
Imágen de perfil de JOSE JEREMIAS CABALLERO

Sentencia if

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 10/10/2013 15:33:09
Muchas gracias por vuestra ayuda. Finalmente conseguí averiguarlo y la duda ya está resuelta. Intentaré expresarme mejor en la próxima intervención.
sin imagen de perfil

Sentencia if

Publicado por Luis (4 intervenciones) el 11/10/2013 00:56:24
¿Podrías decirnos como lo solucionaste? ¿Cual era el problema?

Sentencia if

Publicado por Pablo (3 intervenciones) el 21/10/2013 12:22:10
Lo solucioné de la siguiente manera:

1
2
3
4
5
6
7
for i=1:10;
        if X2_dec(i)<0 | X1_dec(i)<0 | X1_dec(i)+X2_dec(i)<=8,
            f(i)=0;
        else
            f(i)=C-(0.75*(X1_dec(i)).^2+X1_dec(i).*X2_dec(i)+1.25*(X2_dec(i)).^2);
        end
end

Un saludo!