Main Content

checkUnits

次元の互換性と単位の整合性をチェック

説明

C = checkUnits(expr) は次元の互換性と単位の一貫性について expr を確認し、フィールド Consistent および Compatible を含む構造体を返します。フィールドには logical 0 (false) または logical 1 (true) が、チェックの結果に応じて格納されています。

すべての項が、長さや時間といった同一の次元である場合、expr の次元には互換性があります。同一次元のすべての単位が換算係数 1 で相互に変換可能な場合、expr の単位には整合性があります。

C = checkUnits(expr,'Compatible') は互換性のある次元についてのみ expr をチェックします。

C = checkUnits(expr,'Consistent') は整合性のある単位についてのみ expr をチェックします。

すべて折りたたむ

方程式または式の次元をチェックします。次元をチェックして方程式または式が有効であることを確認します。

次元の検証を次の方程式

Ams=Bkgs

について checkUnits をオプション 'Compatible' で使用します。MATLAB® はシンボリック変数が無次元であると仮定します。方程式の次元に互換性がないため、関数 checkUnits は logical 0 (false) を返します。

u = symunit;
syms A B
eqn = A*u.m/u.s == B*u.kg/u.s;
checkUnits(eqn,'Compatible')
ans = logical
   0

subs を使用して u.kgu.m に置き換え、チェックを繰り返します。今度は次元に互換性があるため、関数 checkUnits は logical 1 (true) を返します。

eqn = subs(eqn,u.kg,u.m);
checkUnits(eqn,'Compatible')
ans = logical
   1

単位の整合性のチェックは、互換性よりも厳密なチェックです。次元が同じすべての単位が換算係数 1 で互いに変換可能な場合、単位に整合性があります。たとえば、1 ニュートンは 1 kg m/s² との間に整合性がありますが、1 kg cm/s² との間には整合性がありません。

1 ニュートンが 1 kg m/s² との間に整合性があることを expr1 をチェックすることで示し、1 kg cm/s² との間には整合性がないことを expr2 をチェックすることで示します。

u = symunit;
expr1 = 1*u.N + 1*u.kg*u.m/u.s^2;
expr2 = 1*u.N + 1*u.kg*u.cm/u.s^2;
checkUnits(expr1,'Consistent')
ans = logical
   1

checkUnits(expr2,'Consistent')
ans = logical
   0

expr2 が次元には互換性があるものの単位には整合性がないことを示すことで、互換性と整合性の違いを示します。

checkUnits(expr2,'Compatible')
ans = logical
   1

複数の方程式または式を、配列に格納してチェックします。checkUnits は各要素が入力の要素に対応した配列を返します。

複数の方程式について次元の互換性をチェックします。checkUnits[1 0] を返します。これは、1 番目の等式は次元に互換性があるのに対し、2 番目の等式は互換性がないことを意味します。

u = symunit;
syms x y z
eqn1 = x*u.m == y*u.m^2/(z*u.m);
eqn2 = x*u.m + y*u.s == z*u.m;
eqns = [eqn1 eqn2];
compatible = checkUnits(eqns,'Compatible')
compatible = 1x2 logical array

   1   0

checkUnits を使用して、方程式または式について、次元の互換性と単位の一貫性の両方をチェックします。

移動発射体の x および y の変位について方程式を定義します。単位の互換性と整合性をチェックします。

u = symunit;
syms theta x y ts
g = 9.81*u.cm/u.s^2;
v = 10*u.m/u.s;
t = ts*u.s;
x = v*cos(theta)*t;
y = v*sin(theta)*t + (-g*t^2)/2;
S = checkUnits([x y])
S = struct with fields:
    Consistent: [1 0]
    Compatible: [1 1]

2 番目の方程式は次元に互換性がありますが、単位に整合性がありません。整合性がないのは g が誤って m ではなく cm を使用しているためです。g を再定義して方程式を再度チェックします。これで 2 番目の方程式の単位に整合性が生まれました。

g = 9.81*u.m/u.s^2;
y = v*sin(theta)*t + (-g*t^2)/2;
S = checkUnits([x y])
S = struct with fields:
    Consistent: [1 1]
    Compatible: [1 1]

入力引数

すべて折りたたむ

入力式。シンボリック式、方程式、関数、ベクトル、行列または多次元配列として指定します。

バージョン履歴

R2017a で導入