主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

数値演算またはシンボリック演算の選択

符号数学工具箱™では,数値演算またはシンボリック演算を使用して数字を操作します。数値演算では,倍精度または可変精度による浮動小数点形式で数値を表現します。シンボリック演算では,厳密な形式で数値を表現します。このトピックでは倍精度の演算,可変精度の演算,シンボリック演算を比較します。

倍精度の演算

MATLAB®の数値計算は,既定で倍精度演算を使用します。たとえば式10001/1001,π 2 を評価します。結果は倍精度値に変換されます。

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 / 22 ^ (1/2)πなどの厳密な形式で数値と変数を含む計算を実行できます。以下の3つの例では,シンボリック演算でのさまざまな計算方法を示します。

無理数の表現

信谊を使用してシンボリック数を作成します。無理数πおよび 2 をシンボリック形式で表現します。

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桁の精度がある あり。桁数は使用した精度に左右される なし。結果は厳密
速度 高速 高速。使用した精度に左右される 最も低速
メモリ使用的量 最小 可変。使用した精度に左右される 最大

関連するトピック