simscape.Value
オブジェクトおよび simscape.Unit
オブジェクトの操作
物理モデリングにおいて、ブロック パラメーター、変数および物理量信号は、単位が関連付けられた値として表されます。Simscape™ 単位マネージャーは物理ネットワークを解決するときに、必要な単位変換処理を自動的に実行します。simscape.Value
オブジェクトと simscape.Unit
オブジェクトは基本的に、単位マネージャーの機能を複製する MATLAB® インターフェイスを Simscape の外部に実装します。
simscape.Value
は算術値の配列を単位に結合し、数学演算全体でそれらの単位を伝播します。配列のすべてのメンバーは同じ単位をもつ必要があります。simscape.Unit
は、値が関連付けられていない測定単位を表すため、単位の伝播動作をエミュレートする MATLAB 関数を作成できます。
simscape.Value
と simscape.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
を引数として受け入れる。a
とb
から値を抽出する。抽出したそれらの値に対して MATLAB 関数
pagemtimes
を使用する。simscape.Unit
オブジェクトを使用して派生単位を計算する。計算後の値の配列に新しい単位を再び付加して、結果の
simscape.Value
オブジェクトを返す。
simscape.Value
配列をサポートする主要な MATLAB 関数
simscape.Value
配列を操作するときには、MATLAB の主要な配列関数を使用できます。以下の表は、simscape.Value
の引数の使用に関する追加の制限を一覧表示しています。
simscape.Value
の数学関数
simscape.Value
の演算
simscape.Value
の検査
名前 | 説明 |
---|---|
isequal | 2 つの simscape.Value オブジェクトを比較します。両方の配列が同じサイズで同じ値を含み、かつ同じ単位をもつ場合は 1 を返し、それ以外の場合は 0 を返します。 |
isequaln | NaN 要素は相互に等しいとものとして扱い、2 つの simscape.Value オブジェクトを比較します。両方の配列が同じサイズで同じ値を含み、かつ同じ単位をもつ場合は true を返し、それ以外の場合は 0 を返します。 |
isfinite | 配列要素が有限の場合は 1 を返し、それ以外の場合は 0 を返します。 |
isinf | 配列要素が無限の場合は 1 を返し、それ以外の場合は 0 を返します。 |
isnan | 配列要素が NaN の場合は 1 を返し、それ以外の場合は 0 を返します。 |
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
の型変換
たとえば、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
への変換係数より大きいため、cm
と mm
の加算で返される単位は 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
オブジェクトをサポートしません。