Contenido principal

.if

Realizar operaciones condicionales por elemento con predicados de tipo arreglo

Desde R2023b

Sección principal: equations | intermediates

Sintaxis

.if Predicate1 
   Branch1
.elseif Predicate2
   Branch2
.else
   Branch3
.end

Descripción

Puede realizar operaciones condicionales elemento por elemento con predicados de tipo arreglo, utilizando instrucciones .if. Estas instrucciones son similares a las instrucciones if, pero en una instrucción if, los predicados deben ser escalares. Para evaluar predicados de tipo arreglo, utilice instrucciones .if.

Se aplican las siguientes reglas y restricciones:

  • Cada .if requiere un .else.

  • Las ramificaciones .elseif son opcionales. Cualquier ramificación .elseif posterior debe tener un predicado del mismo tamaño y forma que el predicado de la ramificación .if original.

  • Cada una de las ramificaciones de la instrucción .if-.elseif-.else debe coincidir con el tamaño y forma de los predicados. La expansión escalar es aplicable.

    La necesidad de expansión escalar se determina caso por caso en función de la ramificación, por lo que se puede utilizar un arreglo en una ramificación y un escalar en otra.

  • Las unidades deben ser proporcionales entre las ramificaciones.

  • Las instrucciones .if deben terminar con la palabra clave .end.

  • La salida es un arreglo del mismo tamaño y forma que el predicado de la ramificación .if. Para múltiples valores de retorno, cada variable de salida debe ser del mismo tamaño y forma que el predicado.

No se admiten predicados de tipo arreglo para:

  • Secciones condicionales

  • Gráficos de modo

  • Instrucciones ASSERT

Ejemplos

expandir todo

Realice la asignación condicional a un valor intermedio basado en predicados de tipo arreglo:

component my_comp
inputs
  pred1 = [1 0 0];
  pred2 = [0 0 1];
end
parameters
    A = [1 2 3];
    B = [4 5 6];
    C = [7 8 9];
end
intermediates
    y = .if pred1, A; .elseif pred2, B; .else C; .end
end
... % Other parameters, variables, equations
end

Con estos valores de entrada, el valor intermedio y evalúa [1 8 6] porque:

  • El primer elemento de pred1 es verdadero, de modo que el primer valor es el primer elemento del parámetro A

  • Ninguno de los segundos elementos de pred1 o pred2 es verdadero, de modo que el segundo valor es el segundo elemento del parámetro C

  • El tercer elemento de pred2 es verdadero, de modo que el tercer valor es el tercer elemento del parámetro B

Este componente representa un bloque de saturación vectorizado:

component vec_saturation
    inputs
        I = zeros([3 3]);
    end
 
    outputs
        ITrue = zeros(size(I));
    end
 
    parameters
        upper_limit = 5;
        lower_limit = 0.7;
    end
 
    equations
        ITrue == .if I>=upper_limit, upper_limit; 
                 .elseif I <= lower_limit, lower_limit; 
                 .else I; 
                 .end
    end
end
  • Si I está dentro de los límites especificados por los parámetros upper_limit y lower_limit, ITrue es igual a I.

  • Si el valor de I está fuera de los límites, ITrue se satura en el límite superior o inferior, respectivamente.

Historial de versiones

Introducido en R2023b