Matlab - Realizar operaciones dependiendo de un valor en un arreglo

 
Vista:
sin imagen de perfil
Val: 62
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Realizar operaciones dependiendo de un valor en un arreglo

Publicado por Pilar (35 intervenciones) el 15/10/2019 21:25:20
Buen día,

Ojala puedan ayudarme con una duda, tengo un arreglo de datos, con 18 datos en especifico. Deseo realizar que en base al valor que haya en el arreglo se realicen ciertas operaciones. Lo que no sé es cómo escribir las condiciones, se que se necesito un if y el operador "o" que es "||", lo he utilizado pero no hace lo que quiero, así que creo que estoy empleando mal la idea.
Este es el código que tengo:
1
2
3
4
5
6
7
8
9
10
11
12
13
C=[10	8	34	7	7	24	11	15	10	13	13	20	17	39	6	9	5	21];
datos=2200;
for i=1:length(C)
    if C(i)==5||6||7
        N(i)=datos/188.5;
 
    elseif C(i)==8||9||10||11||12||13||14||15||16||17
       N(i)=datos/396;
 
    else C(i)<=18
        N(i)=datos/1659.5;
    end
end

Lo que quiero lograr es que si el valor que tengo en el arreglo C en el orden en el que está es igual a 5, 6 o 7, la variable datos se divida entre 188.5, si el valor es 8,9,10,11,12,13,14,15,16 o 17 la variable datos se divida entre 396 y si el valor es mayor o igual a 18, entonces se divida entre 1659.5; y el resultado de la operación se va guardando en un nuevo arreglo llamado N para cada valor. Pero tengo un error porque no se utilizar correctamente el operador "o" y cómo lograr que se puedan realizar las operaciones dependiendo del valor.

Espero puedan ayudarme, de antemano 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: 8.149
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Realizar operaciones dependiendo de un valor en un arreglo

Publicado por JOSE JEREMIAS CABALLERO (5623 intervenciones) el 16/10/2019 01:55:14
filtrado el código
1
2
3
4
5
6
7
8
9
10
11
12
13
clear
C=[10	8	34	7	7	24	11	15	10	13	13	20	17	39	6	9	5	21];
datos=2200;
for i=1:length(C)
    if C(i)==5||C(i)==6||C(i)==7
        N(i)=datos/188.5;
    elseif C(i)==8||C(i)==9||C(i)==10||C(i)==11||C(i)==12||C(i)==13||C(i)==14||C(i)==15||C(i)==16||C(i)==17
       N(i)=datos/396;
    elseif C(i)<=18
        N(i)=datos/1659.5;
    end
end
N


1
2
3
4
5
6
7
>> condicion_or
N =
  Columns 1 through 13
    5.5556    5.5556         0   11.6711   11.6711         0    5.5556    5.5556    5.5556    5.5556    5.5556         0    5.5556
 
  Columns 14 through 17
         0   11.6711    5.5556   11.6711

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en 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
sin imagen de perfil
Val: 930
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Realizar operaciones dependiendo de un valor en un arreglo

Publicado por Daniel (281 intervenciones) el 16/10/2019 19:06:02
Hola,

Se puede simplificar el código utilizando el operador OR (|) matricial que realiza la comparación elemento a elemento de una matriz para realizar la asignación en tres líneas.

1
2
3
N(C==5 | C==6 | C==7) = datos/188.5;
N(C==8 | C==9 | C==10 | C==11 | C==12 | C==13 | C==14 | C==15 | C==16 | C==17) = datos/396;
N(C<=18) = datos/1659.5;

Otra opción es usar no comprar con todos los números, sino con el rango. Ya que para este problema es lo más lógico.

1
2
3
N(C<8) = datos/188.5;
N(C>=8 & C<18) = datos/396;
N(C<=18) = datos/1659.5;

Lo que deja el código mucho más legible.

Saludos,
Daniel Rodríguez.
Analytics Lane
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