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*zstr2sym の出力はワークスペースの値とは独立です。これは、出力に再現性があることを意味します。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
詳細については、数値のシンボリックへの変換を参照してください。すべてのワークフローについては、高精度な演算によりほとんど整数を求める および素因数分解を参照してください。
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
入力引数
シンボリック式を表現する文字列。文字ベクトル、string または文字ベクトルの cell 配列として指定します。
ヒント
str2symでは、=演算子が均衡状態を表し、代入を表さないことを想定しています。str2symは入力に含まれる変数を生成しません。str2sym('inf')は、無限大 (Inf) を返します。str2sym('i')は、虚数1iを返します。
バージョン履歴
R2017b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)