Main Content

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

double

シンボリック値を MATLAB の倍精度に変換

説明

d = double(s) は、シンボリック値 s を倍精度に変換します。シンボリック値の倍精度への変換は、MATLAB® 関数でシンボリック値を受け取らない場合に役立ちます。シンボリック数と倍精度数の違いについては、数値演算またはシンボリック演算の選択を参照してください。

すべて折りたたむ

double を使用してシンボリック数を倍精度に変換します。シンボリック数は厳密ですが、倍精度数には丸め誤差があります。

π13 をシンボリック型から倍精度に変換します。

symN = sym([pi 1/3])
symN = 

(π13)

doubleN = double(symN)
doubleN = 1×2

    3.1416    0.3333

丸め誤差については、丸め誤差の認識と回避を参照してください。

vpaで作成される可変精度の数値はシンボリック値です。MATLAB 関数でシンボリック値を受け取らない場合、double を使用して可変精度を倍精度に変換します。

π13 を可変精度から倍精度に変換します。

vpaN = vpa([pi 1/3])
vpaN = (3.14159265358979323846264338327950.33333333333333333333333333333333)
doubleN = double(vpaN)
doubleN = 1×2

    3.1416    0.3333

行列 symM のシンボリック数を、double を使用して倍精度数に変換します。

a = sym(sqrt(2));
b = sym(2/3);
symM = [a b; a*b b/a]
symM = 

(22322323)

doubleM = double(symM)
doubleM = 2×2

    1.4142    0.6667
    0.9428    0.4714

内部桁落ちや丸め誤差の影響を受けるシンボリック式を変換する場合、数値変換の前に、digitsを使用して作業精度を引き上げます。

数値的に不安定な式 Ydouble を使用して変換します。次に、digits を使用して精度を 100 桁に引き上げ、再度 Y を変換します。低い精度の変換が正確ではないのに対し、こうした高い精度の変換は正確です。

Y = ((exp(sym(200)) + 1)/(exp(sym(200)) - 1)) - 1;
lowPrecisionY = double(Y)
lowPrecisionY = 0
digitsOld = digits(100);
highPrecisionY = double(Y) 
highPrecisionY = 2.7678e-87

digits を使用して古い精度に戻し、計算を続けます。

digits(digitsOld)

solve を使用して三角関数方程式 sin(2x)+cos(x)=0 を解きます。完全解、解で使用されているパラメーター、およびそれらのパラメーターの条件を返すように、ReturnConditions オプションを true に設定します。

syms x
eqn = sin(2*x) + cos(x) == 0;
[solx,params,conds] = solve(eqn,x,ReturnConditions=true)
solx = 

(π2+πk2πk-π67π6+2πk)

params = k
conds = 

(kZkZkZ)

ソルバーは、このパラメーターの変数 k を MATLAB® ワークスペースに作成しません。この変数を作成します。subs を使用して k=2 の解を求めます。

syms k
sols_k2 = subs(solx,k,2)
sols_k2 = 

(5π223π631π6)

正確なシンボリック数が解として得られます。これらの数値を倍精度の数値に変換します。

doublesols_k2 = double(sols_k2)
doublesols_k2 = 3×1

    7.8540
   12.0428
   16.2316

A2-2A+I2 を表すシンボリック式 S を作成します。ここで、A は 2 行 2 列のシンボリック行列変数です。

syms A 2 matrix
S = A*A - 2*A + eye(2)
S = I2-2A+A2

A にシンボリック数 [cos( π5)sin(π4)-10] を代入します。

Aval = [cos(sym(pi)/5) sin(pi/4); -1 0];
symS = subs(S,A,Aval)
symS = 

-2Σ1+Σ12+I2where  Σ1=(54+1422-10)

結果を倍精度の行列に変換します。

doubleS = double(symS)
doubleS = 2×2

   -0.6706   -0.8422
    1.1910    0.2929

入力引数

すべて折りたたむ

シンボリック入力。シンボリック数、シンボリック数の配列、または数値のシンボリック行列変数として指定します。入力に数値のみが含まれる場合 (シンボリック数が含まれない場合)、MATLAB 関数 double が呼び出されます。

データ型: sym | symmatrix

バージョン履歴

R2006a より前に導入

すべて展開する