このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
符号数学工具箱™では,数値演算またはシンボリック演算を使用して数字を操作します。数値演算では,倍精度または可変精度による浮動小数点形式で数値を表現します。シンボリック演算では,厳密な形式で数値を表現します。このトピックでは倍精度の演算,可変精度の演算,シンボリック演算を比較します。
MATLAB®の数値計算は,既定で倍精度演算を使用します。たとえば式10001/1001,πと を評価します。結果は倍精度値に変換されます。
X = 1000 /1001 y = z =根号2
X = 9.9910 y = 3.1416 z = 1.4142
倍精度演算の詳細については,浮動小数点数を参照してください。この演算は符号数学工具箱を所有していない場合,またはシンボリック入力を受け取らない関数を使用する場合に推奨されます。それ以外の場合は,厳密にシンボリック演算および可変精度の演算が推奨されます。シンボリック値を倍精度値に変換するには,関数双
を使用します。
vpa
を使用した可変精度の演算は,符号数学工具箱で数値計算を行う場合に推奨される方法です。可変精度の演算で計算を実行する場合,有効桁数を指定できます。
たとえば,vpa
を使用して分数10001/1001を評価します。既定では,vpa
は有効桁数32桁までの入力を評価します。有効桁数が少なくとも32桁になるように分数10001/1001を近似します。
vpa (10001/1001)
ans = 9.991008991008991008991008991009
有効桁数が少なくとも8桁になるように分数を近似します。関数数字
を使用して有効桁数を変更します。
数字(8);vpa (10001/1001)
ans = 9.991009
可変精度の演算では,有効桁数を増やして精度を向上させることができます。計算を高速化し,メモリ使用量を減らすために有効桁数を減らすことも有効です。
符号数学工具箱では,関数信谊
および信谊
を使用して厳密なシンボリック計算を実行できます。シンボリック演算では、x / 2
、2 ^ (1/2)
、π
などの厳密な形式で数値と変数を含む計算を実行できます。以下の3つの例では,シンボリック演算でのさまざまな計算方法を示します。
信谊
を使用してシンボリック数を作成します。無理数πおよび
をシンボリック形式で表現します。
X = sym() y =√(sym(2))
X = y = 2^(1/2)
数値を宣言する場合,MATLABでは数値を倍精度に自動で変換します。たとえば,信谊
の入力引数として整数80435758145817515
を定義します。この数値は,倍精度の最大連続整数flintmax
(つまり2 ^ 53
)より大きいため,精度が低下します。
zincorrect = sym(80435758145817515)
Z = 8.0436e+16 zaccurate = 80435758145817520
信谊
の入力引数として使用します。
Zaccurate =符号(' 80435758145817515 ')
Zaccurate = 80435758145817515
シンボリック演算を使用すれば,大きな整数の計算を正確に実行できます。たとえば3つの大きな整数をそれぞれ3乗した和を評価します。
Z1 = sym('80435758145817515') Z2 = sym('12602123297335631') Z3 = sym('-80538738812075974') Zsum = Z1^3 + Z2^3 + Z3^3
Z2 = 12602123297335631 Z3 = -80538738812075974 Zsum = 42
シンボリック演算を使用して、数学の方程式を解くことができます。たとえば2次方程式斧头2+ bx + c = 0を解きます。信谊
を使用して2次方程式の変数xと係数a, b, cを宣言します。
a*x^2 + b*x + c == 0;
解决
を使用して解を求め,シンボリック式としてそれを返します。
溶胶=解决(eqn, x)
溶胶= - (b + b ^ 2 - 4 * * c) ^ (1/2)) / (2 *) - (b - b (^ 2 - 4 * * c) ^ (1/2)) / (2 *)
潜艇
を使用して係数にシンボリック値を代入します。A = 1, b = 2,およびc = 3とします。2次方程式の解をシンボリック数として返します。
sols = subs(sols,[a b c],[1 2 3])
(8^(1/2)*1i)/2 - 1 (8^(1/2)*1i)/2 - 1
その後,シンボリック解を倍精度または可変精度の浮動小数点形式に変換できます。
数字(32);solsDouble = double(solsSym) solsVpa = vpa(solsSym)
solsDouble = -1.0000 - 1.4142i -1.0000 + 1.4142i solsVpa = -1.0 - 1.4142135623730950488016887242097i -1.0 + 1.4142135623730950488016887242097i
以下の表は倍精度の演算,可変精度の演算,シンボリック演算の比較です。
倍精度 | 可変精度 | シンボリック | |
---|---|---|---|
例 1:sin(π)の評価 |
A = sin() A = 3.1416 ans = 1.2246e-16 |
B = vpa sin(B) B = 3.1415926535897932384626433832795 ans = -3.2101083013100396069547145883568e-40 |
C = sym(pi) sin(C) C = ans = 0 |
例 2:1 - 3*(4/3 - 1)の評価 |
A = 4/3 1 - 3*(A - 1) A = 1.3333 ans = 2.2204e-16 |
数字(16);B = vpa(4/3) 1 - 3*(B - 1) B = 3.308722450212111e-24 |
C = sym(4)/3 1 - 3*(C - 1) C = 4/3 ans = 0 |
使用した関数 | 双 |
vpa 数字 |
信谊 |
データ型 | 双 |
信谊 |
信谊 |
丸め誤差 | あり。解は16桁の精度がある | あり。桁数は使用した精度に左右される | なし。結果は厳密 |
速度 | 高速 | 高速。使用した精度に左右される | 最も低速 |
メモリ使用的量 | 最小 | 可変。使用した精度に左右される | 最大 |