Main Content

simscape.Value オブジェクトおよび simscape.Unit オブジェクトの操作

物理モデリングにおいて、ブロック パラメーター、変数および物理量信号は、単位が関連付けられた値として表されます。Simscape™ 単位マネージャーは物理ネットワークを解決するときに、必要な単位変換処理を自動的に実行します。simscape.Value オブジェクトと simscape.Unit オブジェクトは基本的に、単位マネージャーの機能を複製する MATLAB® インターフェイスを Simscape の外部に実装します。

  • simscape.Value は算術値の配列を単位に結合し、数学演算全体でそれらの単位を伝播します。配列のすべてのメンバーは同じ単位をもつ必要があります。

  • simscape.Unit は、値が関連付けられていない測定単位を表すため、単位の伝播動作をエミュレートする MATLAB 関数を作成できます。

simscape.Valuesimscape.Unit の使用目的は次のとおりです。

  • MATLAB で、単位をもつシミュレーション データの前処理または後処理を行う (流体の総質量の計算、車両運動のプロットなど)。

  • MATLAB で単位付きの値オブジェクトを作成し、プログラムでのモデル作成時にそれらのオブジェクトを操作する。

  • 単位付きの値を演算の対象とする MATLAB 関数を作成する。

たとえば、次の関数は、単位を伝播しながらページ単位の行列乗算を行います。

function out = mypagemtimes(a, b)
  out = simscape.Value(pagemtimes(value(a),value(b)),unit(a)*unit(b));
end

この関数は以下を行います。

  • 2 つの simscape.Value オブジェクト a および b を引数として受け入れる。

  • ab から値を抽出する。

  • 抽出したそれらの値に対して MATLAB 関数 pagemtimes を使用する。

  • simscape.Unit オブジェクトを使用して派生単位を計算する。

  • 計算後の値の配列に新しい単位を再び付加して、結果の simscape.Value オブジェクトを返す。

simscape.Value 配列をサポートする主要な MATLAB 関数

simscape.Value 配列を操作するときには、MATLAB の主要な配列関数を使用できます。以下の表は、simscape.Value の引数の使用に関する追加の制限を一覧表示しています。

simscape.Value の数学関数

名前説明
abs絶対値
acos逆余弦
asin逆正弦
atan逆正接
atan24 象限逆正接
cos余弦
cosh双曲線余弦
crossクロス積
diff差分
dotドット積
exp指数
log自然対数
log10常用対数 (基底 10)
max配列の最大要素
min配列の最小要素
mod除算後の剰余
prod要素の積
sign符号関数
sin正弦
sinh双曲線正弦
sqrt平方根
sum要素の和
tan正接
tanh双曲線正接
erf誤差関数
erfc相補誤差関数

simscape.Value の演算

名前説明
+ (plus), - (minus)単項と二項の加算および減算
* (mtimes), .* (times)乗算
/ (mrdivide), \ (mldivide), ./ (rdivide), .\ (ldivide)除算
== (eq), ~= (ne), < (lt), <= (le), > (gt), >= (ge)関係
^ (mpower), .^ (power)べき乗

simscape.Value の検査

名前説明
isequal2 つの simscape.Value オブジェクトを比較します。両方の配列が同じサイズで同じ値を含み、かつ同じ単位をもつ場合は 1 を返し、それ以外の場合は 0 を返します。
isequalnNaN 要素は相互に等しいとものとして扱い、2 つの simscape.Value オブジェクトを比較します。両方の配列が同じサイズで同じ値を含み、かつ同じ単位をもつ場合は true を返し、それ以外の場合は 0 を返します。
isfinite配列要素が有限の場合は 1 を返し、それ以外の場合は 0 を返します。
isinf配列要素が無限の場合は 1 を返し、それ以外の場合は 0 を返します。
isnan配列要素が NaN の場合は 1 を返し、それ以外の場合は 0 を返します。

simscape.Value の型変換

名前説明
double

引数が無次元の場合にのみ、配列要素を倍精度に変換します。無次元数量は暗黙的に単位なしに変換されてから、double に変換されます。次に例を示します。

double(simscape.Value(1,'m')/simscape.Value(2,'cm'))
ans =

    50
logical

数値を logical に変換します。アフィン以外の単位をもつ simscape.Value オブジェクトでサポートされています。線形単位かどうかにかかわらず、ゼロ値は false として扱われ、非ゼロ値は true として扱われます。

simscape.Unit 配列をサポートする主要な MATLAB 関数

simscape.Unit に対する基本的な乗算、除算、べき乗、および関係の演算が定義されています。以下の表は、simscape.Unit の引数の使用に関する追加の制限を一覧表示しています。

simscape.Unit の算術演算と関係演算

名前説明
times要素ごとの単位の積
mtimes行列の単位の積
rdivide, ldivide要素ごとの単位の商
mrdivide, mldivide行列の単位の商。サポートされていますが、分母はスカラーの simscape.Unit オブジェクトである必要があります。
power要素ごとのべき乗。基数は simscape.Unit オブジェクトである必要があります。指数は整合するサイズの数値配列である必要があります。分数指数と有理指数も参照してください。
mpower行列のべき乗。サポートされていますが、基数と指数はスカラーである必要があります。
eq, ne等しいか、または等しくないかを判定します。正準形で単位を比較します。
isequal配列が等しいかを判定します。単位配列が同じサイズで、かつすべての単位が等価の場合は true です。

simscape.Unit の型変換

名前説明
string

単位配列の各要素を string に変換します。string 配列を返します。

cellstr

単位配列を文字ベクトルの cell 配列に変換します。

char単位配列を文字配列に変換します。

たとえば、2 行 3 列の単位配列を作成します。

u1 = simscape.Unit(["kg", "g", "lb"; "km", "m", "mm"])
u1 = 

    2×3 unit array

    kg    g    lb
    km    m    mm

単位配列を string 配列に変換します。

string(u1)
ans = 

  2×3 string array

    "kg"    "g"    "lb"
    "km"    "m"    "mm"

同じ単位配列を文字ベクトルの cell 配列に変換します。

cellstr(u1)
ans =

  2×3 cell array

    {'kg'}    {'g'}    {'lb'}
    {'km'}    {'m'}    {'mm'}

同じ単位配列を文字配列に変換します。

char(u1)
ans =

  6×2 char array

    'kg'
    'km'
    'g '
    'm '
    'lb'
    'mm'

計算単位

加算のような数学演算に計算単位が必要な場合、返される単位は、基本単位に対する変換係数が最大となるオペランドの単位です。次に例を示します。

simscape.Value(2.2,'cm') + simscape.Value(2,'mm')
ans =

    2.4000 : cm

長さの基本単位は m です。cm から m への変換係数は mm から m への変換係数より大きいため、cmmm の加算で返される単位は cm になります。

乗算と除算に計算単位は不要です。これらの演算は、値の乗算 (除算) と単位の乗算 (除算) により実行されます。次に例を示します。

simscape.Value(2.2,'N') * simscape.Value(2,'m')
ans =

    4.4000 : N*m

分数指数と有理指数

分数指数は simscape.Value オブジェクトでサポートされています。数値は関数によって指定された double 値でべき乗され、分数指数の有理近似が単位に適用されます。

simscape.Unit オブジェクトの場合、指数は有理数である必要があります。単位のべき乗を計算するときに、simscape.Unit は MATLAB 関数 rat と同じ有理分数近似を使用します。

アフィン単位の演算

simscape.Value オブジェクトはアフィン単位をもつことができます。詳細については、アフィン単位についてを参照してください。

アフィン単位をもつ値に対する以下の演算は禁止されています。

  • アフィン単位を含む複合単位の作成。

  • 単位変換を必要とする基本的な配列演算。

  • 暗黙的または明示的な 0 との比較。

制限

  • ブロックを直接パラメーター化することはサポートされていません。つまり、simscape.Value オブジェクトまたは simscape.Unit オブジェクトを直接使用してブロック パラメーターを指定することはできません。これらのオブジェクトは、プログラムによるモデル作成時にのみ使用できます。

    たとえば、simscape.Value オブジェクトに基づくブロック パラメーターをプログラムで設定するには、次を行います。

    x = simscape.Value(V, U);
    set_param(block, 'x', mat2str(value(x)));
    set_param(block, 'x_unit', char(unit(x)));
    
  • simscape.Value オブジェクトまたは simscape.Unit オブジェクトを使用して単位付き値を指定したり、Symbolic Math Toolbox™ で単位の計算を実行することはできません。

  • MATLABCoder™simscape.Value オブジェクトと simscape.Unit オブジェクトをサポートしません。