Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

rewrite

別の関数による式の書き換え

説明

R = rewrite(expr,target) は、シンボリック式 exprtarget で指定された別の関数で書き換えます。書き換えられた式は、元の式と数学的に等価です。expr がベクトルまたは行列の場合、rewriteexpr の要素ごとに働きます。

すべて折りたたむ

ターゲット "exp" を指定して、三角関数を指数関数で書き換えます。

syms x
sin2exp = rewrite(sin(x),"exp")
sin2exp = 

e-xii2-exii2

tan2exp = rewrite(tan(x),"exp")
tan2exp = 

-e2xii-ie2xi+1

三角関数をターゲットに指定して、指数関数を任意の三角関数で書き換えます。ターゲット オプションの完全なリストについては、targetを参照してください。

syms x
exp2sin = rewrite(exp(x),"sin")
exp2sin = 

-2sin(xi2)2-sin(xi)i+1

exp2tan = rewrite(-(exp(x*2i)*1i - 1i)/(exp(x*2i) + 1),"tan")
exp2tan = 

-tan(x)-iitan(x)+i+itan(x)-itan(x)+i-1

simplify を使用して exp2tan を所定の形式に単純化します。

exp2tan = simplify(exp2tan)
exp2tan = tan(x)

ターゲットを指定して、三角関数を別の三角関数で書き換えます。ターゲット オプションの完全なリストについては、targetを参照してください。

ターゲット "sin" を指定して、tan(x) を正弦関数で書き換えます。

syms x
tan2sin = rewrite(tan(x),"sin")
tan2sin = 

-sin(x)2sin(x2)2-1

ターゲット "log" を指定して、逆三角関数を対数関数で書き換えます。ターゲット オプションの完全なリストについては、targetを参照してください。

acos(x)acot(x) を関数 log で書き換えます。

syms x
acos2log = rewrite(acos(x),"log")
acos2log = -log(x+1-x2i)i
acot2log = rewrite(acot(x),"log")
acot2log = 

log(1-ix)i2-log(1+ix)i2

同様に、逆三角関数をターゲットに指定して、対数関数を任意の逆三角関数で書き換えます。

行列で rewrite を呼び出して、行列の各要素を、書き換えます。

行列のすべての要素を関数 exp で書き換えます。

syms x
matrix = [sin(x) cos(x); sinh(x) cosh(x)];
R = rewrite(matrix,"exp")
R = 

(e-xii2-exii2e-xi2+exi2ex2-e-x2e-x2+ex2)

余弦関数を正弦関数に書き換えます。ここで、関数 rewrite は、任意の x に対して有効である恒等式 cos(x)=1-2 sin(x2)2 を使用して、余弦関数を書き換えます。

syms x
R = rewrite(cos(x),"sin")
R = 

1-2sin(x2)2

rewrite が、sin(x)-1-cos2(x) または 1-cos2(x) として書き換えることはありません。これは、それらの式がすべての x に対して有効とはならないためです。しかし、これらの式の 2 乗を使用して sin(x)^2 を表現するなら、すべての x に対して有効になります。したがって、rewritesin(x)^2 を書き換えることができます。

syms x
R1 = rewrite(sin(x),"cos")
R1 = sin(x)
R2 = rewrite(sin(x)^2,"cos")
R2 = 1-cos(x)2

R2023a 以降

rootを使用して多項式の根を求めます。結果は、多項式の k 乗根を関数 root で (k = 1234、または 5 として) 表した列ベクトルになります。

syms x
sols = root(x^5 - x^4 - 1,x)
sols = 

(root(x5-x4-1,x,1)root(x5-x4-1,x,2)root(x5-x4-1,x,3)root(x5-x4-1,x,4)root(x5-x4-1,x,5))

rewrite"expandroot" オプションとともに使用して、sols の関数 root を展開します。結果は、厳密なシンボリック数で演算を行う ^、*、/、+、および – などの算術演算で表されます。展開された結果には算術演算を行う多くの項が含まれる可能性があるため、この結果の数値近似は (丸め誤差の蓄積により) 不正確になる可能性があります。

R = rewrite(sols,"expandroot")
R = 

(12-3i212+3i213σ1+σ1-16σ1-σ12-313σ1-σ1i2-16σ1-σ12+313σ1-σ1i2)where  σ1=23108108+121/3

別の方法として、vpa を使用して可変精度のシンボリック数を返すことにより、sols を数値的に直接近似することができます。結果の数値は、既定で 32 桁の有効桁数をもち、より正確です。

solsVpa = vpa(sols)
solsVpa = 

(-0.66235897862237301298045442723905-0.56227951206230124389918214490937i-0.66235897862237301298045442723905+0.56227951206230124389918214490937i0.5-0.86602540378443864676372317075294i0.5+0.86602540378443864676372317075294i1.3247179572447460259609088544781)

Symbolic Math Toolbox™ なしで sols を使用するには、コードを生成し、matlabFunction を使用して sols を MATLAB® 関数に変換します。生成されたファイルは、数値 double データ型で演算を行う関数rootsを使用します。

matlabFunction(sols,"File","myfile");
type myfile
function sols = myfile
%MYFILE
%    SOLS = MYFILE

%    This function was generated by the Symbolic Math Toolbox version 23.2.
%    26-Sep-2023 22:09:56

t0 = roots([1.0,-1.0,0.0,0.0,0.0,-1.0]);
t2 = t0(1);
t0 = roots([1.0,-1.0,0.0,0.0,0.0,-1.0]);
t3 = t0(2);
t0 = roots([1.0,-1.0,0.0,0.0,0.0,-1.0]);
t4 = t0(3);
t0 = roots([1.0,-1.0,0.0,0.0,0.0,-1.0]);
t5 = t0(4);
t0 = roots([1.0,-1.0,0.0,0.0,0.0,-1.0]);
t6 = t0(5);
sols = [t2;t3;t4;t5;t6];
end

R2023a 以降

多項式の分数の不定積分を求めます。結果は、 および root の記号で表現されるものとして、関数 symsum および関数 root で表されます。

syms x
F = int(1/(x^3 + x - 1),x)
F = 

k=13log(root(z3-3z31-131,z,k)3x+root(z3-3z31-131,z,k)6x-9)root(z3-3z31-131,z,k)

結果を算術演算で書き換えます。シンボリックな総和は最も外側の演算であるため、最初に "expandsum" オプションを指定して関数 rewrite を適用し、symsum を展開します。次に、"expandroot" オプションを使用して再度 rewrite を適用し、関数 root を書き換えます。結果のシンボリック式は、^、*、/、+、および – などの算術演算で表されます。

R = rewrite(rewrite(F,"expandsum"),"expandroot")
R = 

log(3x+6x-9σ3σ3)σ3-log(-3x-6x-9σ2σ2)σ2-log(-3x-6x-9σ1σ1)σ1where  σ1=162σ4+σ42-3131σ4-σ4i2  σ2=162σ4+σ42+3131σ4-σ4i2  σ3=131σ4+σ4  σ4=27119164119164+1621/3

入力引数

すべて折りたたむ

書き換えまたは置き換え対象の入力。シンボリック数、シンボリック変数、シンボリック式、シンボリック関数、シンボリック ベクトル、シンボリック行列、またはシンボリック多次元配列として指定します。

ターゲット関数または展開する関数。string スカラーまたは文字ベクトルとして指定します。次の表は、target オプションで許可されているすべての書き換え規則をまとめたものです。

ターゲット書き換えまたは置き換え対象の関数基準とする関数
"exp"すべての三角関数と双曲線関数 (逆関数を含む)exp, log
"log"すべての逆三角関数と逆双曲線関数log
"sincos"tan, cot, exp, sinh, cosh, tanh, cothsin, cos
"sin""cos""tan"、または "cot"sincosexptancotsinhcoshtanhcoth (ターゲットを除く)ターゲットの三角関数
"sinhcosh"tan, cot, exp, sin, cos, tanh, cothsinh, cosh
"sinh", "cosh", "tanh", "coth"tancotexpsincossinhcoshtanhcoth (ターゲットを除く)ターゲットの双曲線関数
"asin", "acos", "atan", "acot"log およびすべての逆三角関数と逆双曲線関数ターゲットの逆三角関数
"asinh", "acosh", "atanh", "acoth"log およびすべての逆三角関数と逆双曲線関数ターゲットの逆双曲線関数
"sqrt"abs(x + 1i*y)sqrt(x^2 + y^2)
"heaviside"sign, triangularPulse, rectangularPulseheaviside
"piecewise"abs, heaviside, sign, triangularPulse, rectangularPulsepiecewise
"expandroot"root^、*、/、+、および – などの算術演算
"expandsum"symsum+ や – などの算術演算

ヒント

  • rewrite は、置換が数学的に有効な場合にのみ、expr 内のシンボリック関数呼び出しを target で指定された別の関数に置き換えます。それ以外の場合、元の関数呼び出しを保持します。例については、正弦関数と余弦関数の間の書き換えを参照してください。

バージョン履歴

R2012a で導入

すべて展開する