Main Content

測定単位のチュートリアル

測定単位を Symbolic Math Toolbox™ で使用します。このページでは単位の定義、方程式 (微分方程式を含む) の中での単位の使用、および式の次元の検証方法について示します。

単位の定義と変換

symunit を使用して単位を読み込みます。

u = symunit;

u.unit を使用して単位を指定します。たとえば、5 メートルの距離、50 キログラムの重さ、時速 10 キロメートルの速度を指定します。

d = 5*u.m
d = 5m"meter - a physical unit of length."
w = 50*u.kg
w = 50kg"kilogram - a physical unit of mass."
s = 10*u.km/u.hr
s = 

10km"kilometer - a physical unit of length."h"hour - a physical unit of time."

タブの拡張を使用して単位の名前を探すことができます。u. と入力し、"Tab" キーを押して、入力を続けてください。

単位は他のシンボリック式と同じように動作し、あらゆる標準的な演算や関数で使用できます。単位は自動では単純化されず、これにより柔軟性が生まれます。単位の一般的な別名がサポートされています。複数形はサポートされていません。

500 メートルと 2 キロメートルを加えます。結果の距離は、自動では単純化されません。

d = 500*u.m + 2*u.km
d = 2km"kilometer - a physical unit of length."+500m"meter - a physical unit of length."

simplify を使用して d を単純化します。関数 simplify は返す単位を選択します。

d = simplify(d)
d = 2500m"meter - a physical unit of length."

unitConvert を使用して d を特定の単位に変換します。d をキロメートルに変換します。

d = unitConvert(d,u.km)
d = 

52km"kilometer - a physical unit of length."

単位変換と単位系のオプションの詳細については、単位変換と単位系を参照してください。

距離 d50 秒で移動する場合の速度を求めます。結果は正しい単位をもちます。

t = 50*u.s;
s = d/t
s = 

120km"kilometer - a physical unit of length."s"second - a physical unit of time."

温度単位を絶対形式と差分形式とで使用する

既定では、温度は絶対測定ではなく差分で表されることを仮定しています。たとえば、5*u.Celsius は摂氏 5 度の差分温度を表すことを仮定しています。この仮定により温度の値の算術演算が可能になります。

絶対温度を表すにはケルビンを使用し、これにより絶対温度と温度の差分を区別する必要がなくなります。

摂氏 23 度をケルビンに変換して、最初は温度の差分として扱っていた温度を絶対温度として扱います。

u = symunit;
T = 23*u.Celsius;
diffK = unitConvert(T,u.K)
diffK = 23K"kelvin - a physical unit of temperature."
absK = unitConvert(T,u.K,'Temperature','absolute')
absK = 

592320K"kelvin - a physical unit of temperature."

symunit を使用すると、シンボリック単位の 0 倍の値が無次元 0 として返されるため、cell 配列を使用して 0 度を表すことができます。

たとえば、摂氏 0 度を華氏に変換します。

TC = {0,u.Celsius};
TF = unitConvert(TC,u.Fahrenheit,'Temperature','Absolute')
TF = 32°F"degree Fahrenheit - a physical unit of temperature."

次元を検証する

長い式では、単位を視覚的に確認するのは困難です。式の次元は、方程式の次元を検証することで自動的に確認できます。

はじめに運動方程式 v2=v02+2as を定義します。ここで、v は速度を、a は加速度を、s は距離を表します。s がキロメートルで、他のすべての単位は SI 基本単位であると仮定します。次元の確認を実際に行うために、a の単位を意図的に間違えて設定しています。

syms v v0 a s
u = symunit;
eqn = (v*u.m/u.s)^2 == (v0*u.m/u.s)^2 + 2*a*u.m/u.s*s*u.km
eqn = 

v2m"meter - a physical unit of length."2s"second - a physical unit of time."2=v02m"meter - a physical unit of length."2s"second - a physical unit of time."2+2askm"kilometer - a physical unit of length."m"meter - a physical unit of length."s"second - a physical unit of time."

eqn に出現する単位を findUnits で観察します。返された単位から、キロメートルとメートルの両方が距離を表現するのに使われていることがわかります。

findUnits(eqn)
ans = (km"kilometer - a physical unit of length."m"meter - a physical unit of length."s"second - a physical unit of time.")

単位が長さや時間のような同じ次元をもっているかを、checkUnits に入力 'Compatible' を与えて確認します。MATLAB® では、シンボリック変数が無次元であると仮定されます。checkUnits は logical 0 (false) を返します。つまり、これらの単位には互換性がなく、物理的に等しい次元ではないことを意味します。

checkUnits(eqn,'Compatible')
ans = logical
   0

eqn を見ると、加速度 a の単位が誤っています。単位を修正して互換性を再確認します。eqn は今度は互換性のある単位をもちます。

eqn = (v*u.m/u.s)^2 == (v0*u.m/u.s)^2 + 2*a*u.m/u.s^2*s*u.km;
checkUnits(eqn,'Compatible')
ans = logical
   1

今度は、各次元が同じ単位で矛盾なく表現されているかどうかを確認するために、checkUnits に入力 'Consistent' を与えます。eqn では距離を表現するのにメートルとキロメートルの両方が使用されているため、checkUnits は logical 0 (false) を返します。

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

eqn を SI 基本単位に変換して単位を整合させます。checkUnits を再実行します。eqn は互換性と整合性のある単位をもちます。

eqn = unitConvert(eqn,'SI')
eqn = 

v2m"meter - a physical unit of length."2s"second - a physical unit of time."2=v02m"meter - a physical unit of length."2s"second - a physical unit of time."2+2000asm"meter - a physical unit of length."2s"second - a physical unit of time."2

checkUnits(eqn)
ans = struct with fields:
    Consistent: 1
    Compatible: 1

単位に関連する作業が終了し、無次元の方程式または式だけが必要になったら、separateUnits を使用して単位と方程式を分離します。

eqn = separateUnits(eqn)
eqn = v2=v02+2000as

式から数値を計算するには、subs を使用してシンボリック変数への代入を行い、double または vpa を使用して数値に変換します。

eqnv について解きます。次に v の値を求めます。ここで v0=5a=2.5s=10 です。結果を double 型に変換します。

v = solve(eqn,v);
v = v(2);		% choose the positive solution
vSol = subs(v,[v0 a s],[5 2.5 10]);
vSol = double(vSol)
vSol = 223.6627

微分方程式で単位を使用

標準的な式と同じように微分方程式で単位を使用します。このセクションでは、微分方程式での単位の使い方を、加速度の定義 v2=v02+2as から始まり、速度関係 v=v0+at および a=dvdt を導出することで示します。

加速度の定義を SI 単位を用いてシンボリックに表現します。速度 V には単位があるため、V は、単に t ではなく正しい単位である T = t*u.s について微分しなければなりません。

syms V(t) a
u = symunit;
T = t*u.s;		   % time in seconds
A = a*u.m/u.s^2;   % acceleration in meters per second
eqn1 = A == diff(V,T)
eqn1(t) = 

am"meter - a physical unit of length."s"second - a physical unit of time."2=t V(t)1s"second - a physical unit of time."

速度 V は不明で単位もないので、eqn1 の単位には互換性も整合性もありません。

checkUnits(eqn1)
ans = struct with fields:
    Consistent: 0
    Compatible: 0

初速度が v0 であるという条件で、eqn1V について解きます。結果は方程式 v(t)=v0+at です。

syms v_0
cond = V(0) == v_0*u.m/u.s;
eqn2 = V == dsolve(eqn1,cond)
eqn2(t) = 

V(t)=v0m"meter - a physical unit of length."+atm"meter - a physical unit of length."1s"second - a physical unit of time."

結果の次元が正しいことを、rhs(eqn2)eqn1 に代入し、checkUnits を使用して確認します。

checkUnits(subs(eqn1,V,rhs(eqn2)))
ans = struct with fields:
    Consistent: 1
    Compatible: 1

今度は、v2=v02+2as を導出します。速度は距離の変化率なので、V に距離の微分 S を代入します。この場合も、S には単位があるため、S は、単に t ではなく正しい単位である T = t*u.s について微分しなければなりません。

syms S(t)
eqn2 = subs(eqn2,V,diff(S,T))
eqn2(t) = 

t S(t)1s"second - a physical unit of time."=v0m"meter - a physical unit of length."+atm"meter - a physical unit of length."1s"second - a physical unit of time."

初期地点が 0 という条件で、eqn2 を解きます。expand を使用して S を所定の形式で取得します。

cond2 = S(0) == 0;
eqn3 = S == dsolve(eqn2,cond2);
eqn3 = expand(eqn3)
eqn3(t) = 

S(t)=at22m"meter - a physical unit of length."+v0tm"meter - a physical unit of length."

この単位付きの方程式はシンボリックなワークフローで使用できます。または、rhs を使って右辺を返してから separateUnits を使って単位を分離し、その結果得られる単位のない式を使用することで、単位を取り除くことができます。

[S units] = separateUnits(rhs(eqn3))
S(t) = 

t2v0+at2

units(t) = m"meter - a physical unit of length."

式から数値を計算する必要があるときは、subs を使用してシンボリック変数への代入を行い、double または vpa を使用して数値に変換します。

8 秒間での移動距離を求めます。ここで、v_0 = 20a = 1.3 です。結果を double 型に変換します。

S = subs(S,[v_0 a],[20 1.3]);
dist = S(8);
dist = double(dist)
dist = 201.6000

参考

| | | | | | |

関連するトピック

外部の Web サイト