Working with simscape.Value and simscape.Unit
      Objects
In physical modeling, block parameters, variables, and physical signals are represented as
      a value with associated unit. Simscape™ unit manager automatically performs the necessary unit conversion operations
      when solving a physical network. simscape.Value and
        simscape.Unit objects essentially implement a MATLAB® interface that replicates the unit manager functionality outside of Simscape:
- simscape.Valuebinds arrays of arithmetic values to units and propagates those units through mathematical operations. All members of an array must have the same unit.
- simscape.Unitrepresents units of measure without an associated value, and therefore lets you write MATLAB functions that emulate the unit propagation behavior.
Use simscape.Value and simscape.Unit to:
- Preprocess or postprocess simulation data with units in MATLAB, for example, calculate total fluid mass or plot vehicle dynamics. 
- Create value with unit objects in MATLAB and manipulate them during programmatic model construction. 
- Write MATLAB functions that operate on values with units. 
For example, this function computes page-wise matrix multiplication while propagating units:
function out = mypagemtimes(a, b) out = simscape.Value(pagemtimes(value(a),value(b)),unit(a)*unit(b)); end
The function:
- Takes two - simscape.Valueobjects,- aand- b, as arguments.
- Extracts values from - aand- b.
- Uses the MATLAB - pagemtimesfunction on these extracted values.
- Uses the - simscape.Unitobjects to compute the derived unit.
- Reattaches the new unit to the computed array of values and returns the resulting - simscape.Valueobject.
Core MATLAB Functions Supporting simscape.Value Arrays
You can use core MATLAB array functions when working with simscape.Value arrays. The
        tables list additional restrictions that pertain to using simscape.Value
        arguments. 
simscape.Value Math Functions
| Name | Description | 
|---|---|
| abs | Absolute value | 
| acos | Inverse cosine | 
| acosh | Inverse hyperbolic cosine | 
| asin | Inverse sine | 
| asinh | Inverse hyperbolic sine | 
| atan | Inverse tangent | 
| atan2 | Four quadrant inverse tangent | 
| atanh | Inverse hyperbolic tangent | 
| cos | Cosine | 
| cosh | Hyperbolic cosine | 
| cross | Cross product | 
| diff | Difference | 
| dot | Dot product | 
| exp | Exponential | 
| log | Natural logarithm | 
| log10 | Common (base 10) logarithm | 
| max | Maximum elements of an array | 
| min | Minimum elements of an array | 
| mod | Modulus after division | 
| prod | Product of elements | 
| sign | Signum function | 
| sin | Sine | 
| sinh | Hyperbolic sine | 
| sqrt | Square root | 
| sum | Sum of elements | 
| tan | Tangent | 
| tanh | Hyperbolic tangent | 
| erf | Error function | 
| erfc | Complementary error function | 
simscape.Value Operations
simscape.Value Inspection
| Name | Description | 
|---|---|
| isequal | Compares two simscape.Valueobjects. Returns1if both arrays are the same size, contain the same values,
                and have the same unit, and0otherwise. | 
| isequaln | Compares two simscape.Valueobjects, treating NaN elements as
                equal to each other. Returns true if both arrays are the same size, contain the same
                values, and have the same unit, and0otherwise. | 
| isfinite | Returns 1for finite array elements, and0otherwise. | 
| isinf | Returns 1for infinite array elements, and0otherwise. | 
| isnan | Returns 1for NaN array elements, and0otherwise. | 
simscape.Value Type Conversions
| Name | Description | 
|---|---|
| double | For a dimensionless argument only, converts array elements to double precision. Dimensionless quantities are implicitly converted to unitless before conversion to double. For example: double(simscape.Value(1,'m')/simscape.Value(2,'cm')) ans =
    50 | 
| logical | Converts numeric values to logicals. Supported for
                     | 
Core MATLAB Functions Supporting simscape.Unit Arrays
The basic multiplication, division, power, and relational operations are defined on
          simscape.Unit. The table lists additional restrictions that pertain to
        using simscape.Unit arguments.
simscape.Unit Arithmetic and Relational Operations
| Name | Description | 
|---|---|
| times | Elementwise unit products | 
| mtimes | Matrix unit products | 
| rdivide,ldivide | Elementwise unit quotients | 
| mrdivide,mldivide | Matrix unit quotients. Supported, but denominator must be a scalar simscape.Unitobject. | 
| power | Elementwise power. Base must be a simscape.Unitobject.
                Exponent must be a compatibly sized numeric array. See also Fractional and Rational Exponents. | 
| mpower | Matrix power. Supported, but requires base and exponent to be scalar. | 
| eq,ne | Determine equality or inequality. Compares units in canonical form. | 
| isequal | Determine array equality. True if the unit arrays are the same size and all units are equivalent. | 
simscape.Unit Type Conversions
For example, create a 2x3 unit array:
u1 = simscape.Unit(["kg", "g", "lb"; "km", "m", "mm"])
u1 = 
    2×3 unit array
      kg    g    lb
      km    m    mmConvert unit array into a string array:
string(u1)
ans = 
  2×3 string array
    "kg"    "g"    "lb"
    "km"    "m"    "mm"Convert the same unit array into a cell array of character vectors:
cellstr(u1)
ans =
  2×3 cell array
    {'kg'}    {'g'}    {'lb'}
    {'km'}    {'m'}    {'mm'}Convert the same unit array into a character array:
char(u1)
ans =
  6×2 char array
    'kg'
    'km'
    'g '
    'm '
    'lb'
    'mm'Computational Units
When a math operation, such as addition, requires a computational unit, the return unit is the operand unit whose conversion factor to the fundamental unit is the largest. For example:
simscape.Value(2.2,'cm') + simscape.Value(2,'mm')
ans =
    2.4000 (cm)The fundamental unit for length is m. The conversion factor of
          cm into m is larger than that of
          mm into m, therefore, the return unit when adding
          cm and mm is cm.
Multiplication and division operations do not require a computational unit. These operations are performed by multiplying (dividing) the values and multiplying (dividing) the units. For example:
simscape.Value(2.2,'N') * simscape.Value(2,'m')
ans =
    4.4000 (N*m)Fractional and Rational Exponents
Fractional exponents are supported for simscape.Value objects. The
        numeric value is raised to the double power specified by the function and
        a rational approximation of the fractional exponent is applied to the units. 
For simscape.Unit objects, exponents must be rational numbers. When
        computing unit powers, simscape.Unit uses the same rational fraction
        approximation as the MATLAB
        rat function.
Operations with Affine Units
simscape.Value objects can have affine units. For more information, see
          About Affine Units.
The following operations are prohibited on values with affine unit:
- Forming compound units that include affine units. 
- Basic array operations that require unit conversion. 
- Implicit or explicit comparison to 0. 
Limitations
- Direct block parameterization is not supported, that is, you cannot use - simscape.Valueor- simscape.Unitobjects directly to specify block parameters. You can use these objects only during programmatic model construction.- For example, to programmatically set a block parameter based on a - simscape.Valueobject:- x = simscape.Value(V, U); set_param(block, 'x', mat2str(value(x))); set_param(block, 'x_unit', char(unit(x))); 
- You cannot use - simscape.Valueor- simscape.Unitobjects to specify values with units or perform unit computations in Symbolic Math Toolbox™.
- MATLAB Coder™ does not support - simscape.Valueand- simscape.Unitobjects.