Main Content

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

mapSymType

特定のタイプのシンボリック サブオブジェクトへの関数の適用

説明

X = mapSymType(symObj,type,func) は、関数 func をシンボリック オブジェクト symObj のタイプ type のシンボリック サブオブジェクトに適用します。入力の type は、大文字と小文字を区別する string スカラーまたは文字ベクトルでなければならず、論理式を含めることができます。

  • func は、タイプ 'symfun' の関数ハンドルまたはシンボリック関数でなければなりません。

  • func は、関数 sym または関数 str2sym を使用してシンボリック オブジェクトに変換できるスカラーを返さなければなりません。

symObj にタイプ type の複数の部分式が含まれている場合、mapSymType は関数 func を最も大きい部分式に適用します。

X = mapSymType(symObj,funType,vars,func) は、シンボリック オブジェクト symObj の変数 vars に依存する未割り当てのシンボリック関数に関数 func を適用します。

関数タイプ funType は、'symfunOf' または 'symfunDependingOn' に設定できます。たとえば、syms f(x); mapSymType(f,'symfunOf',x,@(u)cos(u))cos(f(x)) を返します。

すべて折りたたむ

sym を使用して、シンボリック数を含むシンボリック式を作成します。

expr = sym('2') + 1i*pi
expr = 2+πi2 + sym(pi)*sym(1i)

ある数の二乗を計算する関数ハンドルを作成します。

sq = @(y) y^2;

関数 sq を式 expr のタイプ 'integer' のシンボリック サブオブジェクトに適用します。

X = mapSymType(expr,'integer',sq)
X = 4+πi4 + sym(pi)*sym(1i)

exp などの既存の MATLAB® 関数を適用することもできます。関数 exp を式 expr のタイプ 'complex' のシンボリック サブオブジェクトに適用します。

X = mapSymType(expr,'complex',@exp)
X = πei+2sym(pi)*exp(sym(1i)) + 2

シンボリック方程式の特定のサブオブジェクトにシンボリック関数を適用します。

シンボリック方程式を作成します。

syms x t
eq = 0.5*x + sin(x) == t/4
eq = 

x2+sin(x)=t4x/2 + sin(x) == t/4

入力に 2 を乗算するシンボリック関数を作成します。

syms f(u)
f(u) = 2*u;

シンボリック関数 f を方程式 eq のタイプ 'variable' のシンボリック サブオブジェクトに適用します。

X = mapSymType(eq,'variable',f)
X = 

x+sin(2x)=t2x + sin(2*x) == t/2

方程式のシンボリック変数 x および t に 2 が乗算されます。

symfun を使用して作成された同じシンボリック関数を適用することもできます。

X = mapSymType(eq,'variable',symfun(2*u,u))
X = 

x+sin(2x)=t2x + sin(2*x) == t/2

ここで、未割り当てのシンボリック関数を作成します。未割り当ての関数を方程式 eq のタイプ 'sin' のシンボリック サブオブジェクトに適用します。

syms g(u)
X = mapSymType(eq,'sin',g)
X = 

x2+g(sin(x))=t4x/2 + g(sin(x)) == t/4

式の中の特定のタイプの最も大きいシンボリック部分式を変換します。

シンボリック式を作成します。

syms f(x) y
expr = sin(x) + f(x) - 2*y
expr = f(x)-2y+sin(x)f(x) - 2*y + sin(x)

関数 log を式 expr のタイプ 'expression' のシンボリック サブオブジェクトに適用します。

X = mapSymType(expr,'expression',@log)
X = log(f(x)-2y+sin(x))log(f(x) - 2*y + sin(x))

タイプ 'expression' の複数の部分式がある場合、mapSymType は関数 log を最も大きい部分式に適用します。

式で特定の変数の依存関係を持つ未割り当てのシンボリック関数を変換します。

シンボリック式を作成します。

syms f(x) g(t) h(x,t) 
expr = f(x) + 2*g(t) + h(x,t)*sin(x)
expr = 2g(t)+f(x)+sin(x)h(x,t)2*g(t) + f(x) + sin(x)*h(x, t)

入力を 'z' の名前を持つシンボリック変数に変換する関数ハンドルを作成します。

func = @(obj) sym('z');

変換関数 func を式 expr の未割り当てのシンボリック関数に適用します。

'symfunOf' を使用して、変数 [x t] の厳密な順序に依存する関数を変換します。

X = mapSymType(expr,'symfunOf',[x t],func)
X = 2g(t)+f(x)+zsin(x)2*g(t) + f(x) + z*sin(x)

'symfunDependingOn' を使用して、変数 t への依存関係を持つ関数を変換します。

X = mapSymType(expr,'symfunDependingOn',x,func)
X = z+2g(t)+zsin(x)z + 2*g(t) + z*sin(x)

シンボリック配列内の未割り当てのシンボリック関数の変数依存関係を削除します。

複数の方程式から成るシンボリック配列を作成します。

syms f1(t) f2(t) g1(t) g2(t)
eq = [f1(t) + f2(t) == 0, f1(t) == 2*g1(t), g1(t) == diff(g2(t))]
eq = 

(f1(t)+f2(t)=0f1(t)=2g1(t)g1(t)=t g2(t))[f1(t) + f2(t) == 0, f1(t) == 2*g1(t), g1(t) == diff(g2(t), t)]

関数symFunTypeを適用して、未割り当てのシンボリック関数を同じ名前の変数で置き換えます。

'symfunOf' を使用して変数 t への依存関係を持つすべての関数を求めて、symFunType を使用してそれらを変換します。

X = mapSymType(eq,'symfunOf',t,@symFunType)
X = (f1+f2=0f1=2g1g1=0)[f1 + f2 == 0, f1 == 2*g1, g1 == 0]

シンボリック式を作成します。その逆ラプラス変換を求めます。

syms s;
G = (s+10)/(s^2+2*s+4)/(s^2-4*s+1);
expr = ilaplace(G)
expr = 

19e-tcos(3t)+3sin(3t)1939-19e2tcosh(3t)-183sinh(3t)1939(19*exp((-t))*(cos(sqrt(sym(3))*t) + (sqrt(sym(3))*sin(sqrt(sym(3))*t))/19))/39 - (19*exp((2*t))*(cosh(sqrt(sym(3))*t) - (18*sqrt(sym(3))*sinh(sqrt(sym(3))*t))/19))/39

結果は、関数 expsincossinh、および cosh で返されます。

結果の sinhcoshexp として書き換えます。mapSymType を使用して、sinh または cosh を含む部分式に関数 rewrite を適用します。

expr = mapSymType(expr,"sinh|cosh",@(subexpr) rewrite(subexpr,"exp"))
expr = 

19e-tcos(3t)+3sin(3t)1939-19e2te3t2+e-3t2-183e3t2-e-3t21939(19*exp((-t))*(cos(sqrt(sym(3))*t) + (sqrt(sym(3))*sin(sqrt(sym(3))*t))/19))/39 - (19*exp((2*t))*(exp(sqrt(sym(3))*t)/2 + exp((-sqrt(sym(3))*t))/2 - (18*sqrt(sym(3))*(exp(sqrt(sym(3))*t)/2 - exp((-sqrt(sym(3))*t))/2))/19))/39

入力引数

すべて折りたたむ

シンボリック オブジェクト。シンボリック式、シンボリック関数、シンボリック変数、シンボリック数、またはシンボリック単位として指定します。

シンボリック型。大文字と小文字を区別するスカラー string または文字ベクトルとして指定します。入力 type には論理式を含めることができます。値のオプションは以下のとおりです。

シンボリック型カテゴリstring 値
数値
  • 'integer' — 整数

  • 'rational' — 有理数

  • 'vpareal' — 可変精度の浮動小数点実数値

  • 'complex' — 複素数

  • 'real' — 実数 ('integer''rational'、および 'vpareal' を含む)

  • 'number' — 数値 ('integer''rational''vpareal''complex'、および 'real' を含む)

定数'constant' — シンボリック数学定数 ('number' を含む)
シンボリック数学関数'vpa''sin''exp'、その他 — シンボリック式のシンボリック数学関数
未割り当てのシンボリック関数
  • 'F''g'、その他 — 未割り当てのシンボリック関数の関数名

  • 'symfun' — 未割り当てのシンボリック関数

算術演算子
  • 'plus' — 加算演算子 + および減算演算子 -

  • 'times' — 乗算演算子 * および除算演算子 /

  • 'power' — べき乗または指数演算子 ^ および平方根演算子 sqrt

変数'variable' — シンボリック変数
単位'units' — シンボリック単位
'expression' — シンボリック式 (前述のすべてのシンボリック型を含む)
論理式
  • 'or' — 論理 OR 演算子 |

  • 'and' — 論理 AND 演算子 &

  • 'not' — 論理 NOT 演算子 ~

  • 'xor' — 排他的論理和演算子 xor

  • 'logicalconstant' — シンボリック論理定数 symtrue および symfalse

  • 'logicalexpression' — 論理式 ('or''and''not''xor'symtrue、および symfalse を含む)

方程式および不等式
  • 'eq' — 等号演算子 ==

  • 'ne' — 不等演算子 ~=

  • 'lt' — 左不等演算子 < または右不等演算子 >

  • 'le' — 小なりイコール演算子 <= または大なりイコール演算子 >=

  • 'equation' — シンボリック等式および不等式 ('eq''ne''lt'、および 'le' を含む)

サポートされていないシンボリック型

'unsupported' — サポートされていないシンボリック型

入力関数。関数ハンドルまたはシンボリック関数として指定します。関数ハンドルとシンボリック関数の詳細については、それぞれ関数ハンドルの作成およびsymfunを参照してください。

symObj にタイプ type の複数の部分式が含まれている場合、mapSymType は関数 func を最も大きい部分式 (ツリー データ構造で最上位の一致するノード) に適用します。

関数タイプ。'symfunOf' または 'symfunDependingOn' として指定します。

  • 'symfunOf'func を、配列 vars で指定される変数の厳密な順序に依存する未割り当てのシンボリック関数に適用します。たとえば、syms f(x,y); mapSymType(f,'symfunOf',[x y],@(g)g^2)f(x,y)^2 を返します。

  • 'symfunDependingOn'func を、配列 vars で指定される変数への依存関係を持つ未割り当てのシンボリック関数に適用します。たとえば、syms f(x,y); mapSymType(f,'symfunDependingOn',x,@(g)g/2)f(x,y)/2 を返します。

入力変数。シンボリック変数またはシンボリック配列として指定します。

R2019a で導入