str2sym
シンボリック式を表す文字列を評価します。
説明
例
シンボリック式として文字列を評価
文字列 'sin(pi)'
を評価します。str2sym
は期待される結果を返します。
str2sym('sin(pi)')
ans = 0
str2sym
では、=
演算子が均衡状態を表し、代入を表さないことを想定しています。また、str2sym
は、文字列に含まれる変数をワークスペースに追加しません。
'x^2 = 4'
を評価してこの挙動を示します。関数 str2sym
は方程式 x^2 == 4
を返しますが、x
はワークスペースに表示されません。
eqn = str2sym('x^2 = 4')
eqn = x^2 == 4
symvar
を使用して eqn
の変数を求めます。変数 var
は今度は x
を参照します。
var = symvar(eqn)
var = x
eqn
を var
について解き、結果を代入することで、eqn
から値を代入します。
varVal = solve(eqn,var)
varVal = -2 2
ワークスペースの値を文字列入力に代入
str2sym
はワークスペースから値を入力の変数へ代入しません。したがって、str2sym
は再現性のある出力をもちます。代わりに、subs
を使用してワークスペースの値を str2sym
の出力に代入します。
y
を 2
に設定します。次に、subs
を使用、または使用せずに 'y^2'
を評価して、subs
が y
に値を代入する方法を示します。
y = 2; withoutSubs = str2sym('y^2')
withoutSubs = y^2
withSubs = subs(str2sym('y^2'))
withSubs = 4
ファイルの文字列をシンボリック式として評価
シンボリック式がファイルに文字列として記録されている場合、ファイルを読み込み str2sym
を使用して文字列を評価します。
ファイル mySym.txt
が次のテキストを含むと仮定します。
a = 2.431 y = a*exp(t) diff(z(t),t) = b*y*z
str2sym
を使用して mySym.txt
内の式を評価します。
filename = 'mySym.txt';
filetext = fileread(filename);
filetext = splitlines(filetext);
str2sym(filetext)
ans = a == 2.431 y == a*exp(t) diff(z(t), t) == b*y*z
str2sym
の出力はワークスペースの値とは独立です。これは、出力に再現性があることを意味します。b
に値を代入し、保存した式を再評価することで、この再現性を示します。
b = 5; str2sym(filetext)
ans = a == 2.431 y == a*exp(t) diff(z(t), t) == b*y*z
ワークスペースの値または入力方程式の値を使用するには、シンボリック式として文字列を評価 および ワークスペースの値を文字列入力に代入に記載されているとおり、subs
(まず solve
を使用して方程式を解きます) を使用します。
文字列入力内の関数の実行
関数がパス上にあるとき、str2sym
は入力の関数を実行します。そうでない場合、str2sym
は期待されるとおりシンボリック オブジェクトを返します。この挙動は、出力に再現性があることを意味します。
微分方程式と初期条件をファイルから読み込んで、この挙動を示します。条件における方程式を解きます。str2sym
は方程式の y(t)
を評価しないため、出力には再現性があります。
filename = 'mySym.txt';
filetext = fileread(filename);
filetext = splitlines(filetext);
eqn = str2sym(filetext(1))
eqn = diff(y(t), t) == -y(t)
cond = str2sym(filetext(2))
cond = y(0) == 2
ySol = dsolve(eqn,cond)
ySol = 2*exp(-t)
大きな数値と高精度な数値の厳密な表現
MATLAB® パーサーはすべての数値を倍精度に自動で変換するため、大きな数値と高精度の数値を文字列として入力することで、元の精度を維持します。str2sym
の代わりに、sym
を使用して整数を、vpa
を使用して不動小数点数を入力します。これは、sym
および vpa
はより高速であるためです。
大きな数値の比を直接入力した場合と厳密な文字列表現を入力した場合との誤差を示します。
num = sym(12230984290/38490293482)
num = 5724399718238385/18014398509481984
numExact = sym('12230984290/38490293482')
numExact = 6115492145/19245146741
error = num - numExact
error = -7827162395/346689742765832461975814144
高精度な数値を直接入力した場合と厳密な文字列表現を入力した場合との誤差を示します。
num = vpa(8.023098429038490293482)
num = 8.0230984290384910195825796108693
numExact = vpa('8.023098429038490293482')
numExact = 8.023098429038490293482
error = num - numExact
error = 0.00000000000000072610057961086928844451883343504
詳細は、数値のシンボリックへの変換を参照してください。すべてのワークフローについては、高精度な算術を使用したほとんど整数の検索 および素因数分解を参照してください。
16 進数の値およびバイナリ値のシンボリック 10 進数への変換
R2019b から、16 進数の値およびバイナリ値を文字ベクトルを使用して表すことができます。16 進数の値は 0x
または 0X
の接頭辞で始まり、バイナリ値は 0b
または 0B
の接頭辞で始まります。次に、str2sym
を使用して 16 進数の値およびバイナリ値をシンボリック 10 進数に変換できます。詳細については、16 進数値と 2 進数値を参照してください。
16 進数の値を表す文字ベクトルを作成します。値をシンボリック 10 進数に変換します。
H = '0x2A' D = str2sym(H)
D = 42
バイナリ値を表す文字ベクトルを作成します。値をシンボリック 10 進数に変換します。
B = '0b101010' D = str2sym(B)
D = 42
入力引数
symstr
— シンボリック式を表現する文字列
文字ベクトル | string | 文字ベクトルの cell 配列
シンボリック式を表現する文字列。文字ベクトル、string または文字ベクトルの cell 配列として指定します。
ヒント
str2sym
では、=
演算子が均衡状態を表し、代入を表さないことを想定しています。str2sym
は入力に含まれる変数を生成しません。str2sym('inf')
は、無限大 (Inf
) を返します。str2sym('i')
は、虚数1i
を返します。
バージョン履歴
R2017b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)