Main Content

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

ライブ エディターにおけるシンボリック ワークフローの次のステップの提案

R2021b 以降、シンボリック出力を生成するコードをライブ エディターで実行すると、ライブ エディターはその出力に応じた次のステップを提案するコンテキスト メニューを提供します。提案メニューを開くには、シンボリック出力にマウスを合わせて 3 つのドットのアイコン kebab_icon.png をクリックするか、シンボリック出力を右クリックします。シンボリック ワークフローのライブ スクリプトを再び開くときは、コードを再度実行し、次のステップの提案を取得してください。

R2023b 以降では、コードを実行した後にキーボード ショートカットを使用して次のステップの提案に移動することもできます。ライブ エディターでコードと出力の間を移動するには、出力がインラインのときは "上下矢印" を使用し、出力が右にあるときは "Ctrl+Shift+O" を使用 (macOS システムでは代わりに "Option+Command+O" を使用) します。"Return" キーを押してシンボリック出力をアクティブにします。提案メニューを開くには、ショートカット "Shift+F10" を使用します。

これらの提案メニューを使って、関数呼び出しやライブ エディターのタスクをライブ スクリプトに挿入して実行できます。これらの提案メニューの標準的な使用法を以下に示します。

  • シンボリック式の評価、および数値への変換。

  • シンボリックな数学方程式の単純化、操作、求解。

  • シンボリック式のプロット。

  • 行列の逆行列や行列式の求解、ベクトルのヤコビアンや回転の求解といった、行列やベクトルの演算。

  • 微分、積分、変換、および微分方程式の求解といった、微積分関数の実行。

  • 測定単位の変換と単位の次元の検証。

たとえば、新しいライブ スクリプトで、シンボリック式を作成します。

expr = (pi + sym(2))^2
expr = π+22

[実行] をクリックすると、シンボリック出力で結果が表示されます。シンボリック出力を生成するコードを初めて実行したとき、ライブ エディターは次のステップの提案をポップアップで通知する 3 つのドットのアイコン kebab_icon.png を表示します。また、シンボリック出力をポイントすることでも、3 つのドットのアイコンが表示されます。以降のワークフローでポップアップによる通知を非表示にするには、[次回から表示しない] を選択してください。

出力の右にある 3 つのドットのアイコン kebab_icon.png をクリックすると、提案メニューが表示されます。メニュー項目をポイントすると、そのメニュー項目を選択した場合のプレビューがライブ エディターに表示されます。たとえば、[数値的に近似] をポイントすると、提案される新しいコードの行が表示されます。

[数値的に近似] を選択して、提案された新しいコードを追加します。ライブ エディターによって関数 vpa がコード領域に挿入された後、現在のセクションが自動的に実行され、式が数値的に評価されます。

var = vpa(expr)
var = 26.435975015448531572685064532994

別の例として、シンボリック式を作成します。ライブ スクリプトを実行して、シンボリック出力を生成します。次のステップのシンボリックの提案を使用して、方程式を数値的に解きます。

syms x a
eqn = (2*x^2 + a)/(x + 1) == 3
eqn = 

2x2+ax+1=3

提案メニューを開くために、シンボリック出力を右クリックすることもできます。[方程式の求解]、[方程式を数値的に求解] を選択します。

[方程式を数値的に求解] という提案をクリックすると、ライブ エディターによって関数 vpasolve がコード領域に挿入されます。その後、ライブ エディターによって自動的に現在のセクションが実行され、方程式が数値的に解かれます。

var2 = vpasolve(eqn,x)
var2 = 

(0.75-0.2533.0-8.0a0.2533.0-8.0a+0.75)

次の節では、シンボリック ワークフローで対話型の提案メニューを使用する方法を示す例をさらに紹介します。

単純化 (シンボリック式)

指数関数と虚数を含むシンボリック式を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms x
expr = 1i*(exp(-1i*x) - exp(1i*x))/(exp(-1i*x) + exp(1i*x))
expr = 

e-xii-exiie-xi+exi

式を単純化するには、シンボリック出力を右クリックして [式の書き換えと単純化]、[式の単純化] を選択します。

ライブ エディターによって [単純化 (シンボリック式)] ライブ タスクが挿入および適用され、対話形式でシンボリック式の単純化や再配置を行います。より単純な結果を得るには、計算エフォートを [中] に変更します。

fig5.png

係数の代入と 2 次方程式の求解

係数 abc を持つ 2 次方程式を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms a b c x
eqn = a*x^2 + b*x + c == 0
eqn = ax2+bx+c=0

式の中の係数に代入するには、出力を右クリックして [変数の置換] を選択します。

ライブ エディターによって、式の中の係数や変数に代入する関数 subs が挿入されます。関数 subs について、ライブ エディターが自動的に関数を実行することはありません。a=3b=2c=0 に置換するには、関数 subs の 2 番目および 3 番目の引数を [a,b,c] および [3,2,0] に変更します。その後、ライブ エディターのセクションを実行して、関数 subs を適用します。

var3 = subs(eqn,[a,b,c],[3,2,0])
var3 = 3x2+2x=0

この 2 次方程式を解くには、出力を右クリックして [方程式を解析的に求解] を選択します。

ライブ エディターによって、[求解 (シンボリック式)] ライブ タスクが挿入および適用され、対話形式でシンボリック方程式の解析解を求めます。

fig8.png

陽関数および陰関数のプロット

3 つのシンボリック変数 xyz と 1 つの正弦波関数を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms x y z
f = sin(2*x)
f = sin(2x)

正弦波の関数をプロットするには、出力を右クリックして [関数をプロット]、[関数のプロット] を選択します。

ライブ エディターによって、fplot を使用して正弦波関数がプロットされます。

fplot(f)

Figure contains an axes object. The axes object contains an object of type functionline.

次に、双曲線を表す方程式を作成します。以下のコードを実行して、シンボリック出力を生成します。

eqn = x^2 - y^2 == 1
eqn = x2-y2=1

正弦波関数をプロットするには、出力を右クリックして、[関数をプロット]、[陰的な方程式を 2-D でプロット] を選択します。

ライブ エディターによって、fimplicit を使用して双曲線がプロットされます。

fimplicit(eqn)

Figure contains an axes object. The axes object contains an object of type implicitfunctionline.

次に、トーラスを表すシンボリック関数を作成します。以下のコードを実行して、シンボリック出力を生成します。

f(x,y,z) = (x^2 + y^2 + z^2 + 3^2 - 2^2)^2 - 4*3^2*(x^2+y^2)
f(x, y, z) = x2+y2+z2+52-36x2-36y2

トーラスをプロットするには、出力を右クリックして [陰的な方程式を 3-D でプロット] を選択します。

ライブ エディターによって、fimplicit3 を使用してトーラスがプロットされます。

fimplicit3(f)

Figure contains an axes object. The axes object contains an object of type implicitfunctionsurface.

行列関数の適用

3 つのシンボリック変数 xyz と 1 つのシンボリック行列を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms x y z
M1 = sym([x^2 + a, x; y + 2, 3*y^2])
M1 = 

(x2+axy+23y2)

行列の逆行列を求めるには、出力を右クリックして [行列関数を適用]、[逆行列を計算] を選択します。[行列関数を適用]、[逆行列を計算] という提案は、シンボリック出力がシンボリック行列の場合にのみ利用可能です。

ライブ エディターによって関数 inv が挿入および適用され、行列の逆行列が得られます。

var4 = inv(M1)
var4 = 

(-3y2σ1xσ1y+2σ1-x2+aσ1)where  σ1=-3x2y2+xy+2x-3ay2

次に、1 行 3 列のシンボリック ベクトルを作成します。以下のコードを実行して、シンボリック出力を生成します。

M2 = sym([x*y*z, y^2, x + z])
M2 = (xyzy2x+z)

ベクトルのヤコビアンを計算するには、出力を右クリックして [行列関数を適用]、[ベクトルのヤコビ行列の計算] を選択します。[行列関数を適用]、[ベクトルのヤコビ行列の計算] という提案は、シンボリック出力がシンボリック ベクトルである場合にのみ利用可能です。

ライブ エディターによって関数 jacobian が挿入および適用され、ベクトルのヤコビアンが計算されます。

var5 = jacobian(M2)
var5 = 

(yzxzxy02y0101)

次に、1 行 3 列の別のシンボリック ベクトルを作成します。以下のコードを実行して、シンボリック出力を生成します。

M3 = sym([x^2*y, 2*x, z])
M3 = (x2y2xz)

ベクトルの回転を計算するには、出力を右クリックして [行列関数を適用]、[ベクトル場の回転を計算] を選択します。

ライブ エディターによって関数 curl が挿入および適用され、ベクトルの回転が計算されます。

var6 = curl(M3)
var6 = 

(002-x2)

微分方程式の求解、積分変換の計算、極の求解

2 階微分方程式を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms f(x) s
eqn = diff(f,x,x) == -9*f
eqn(x) = 

2x2 f(x)=-9f(x)

この微分方程式を解くには、出力を右クリックして [微分方程式を解く] を選択します。[微分方程式を解く] という提案は、シンボリック出力が微分方程式である場合にのみ利用可能です。

ライブ エディターによって関数 dsolve が挿入および適用され、微分方程式が解かれます。

var7 = dsolve(eqn)
var7 = C1cos(3x)-C2sin(3x)

次に、解のラプラス変換を求めます。dsolve の出力を右クリックし、[積分変換を計算]、[ラプラス変換を計算] を選択します。

ライブ エディターによって関数 laplace が挿入および適用され、ラプラス変換が計算されます。

var8 = laplace(var7)
var8 = 

C1ss2+9-3C2s2+9

最後に、ラプラス変換の極を求めます。ラプラス変換の出力を右クリックし、[微積分関数を適用]、[関数の極の計算] を選択します。

ライブ エディターによって関数 poles が挿入および適用され、極が計算されます。

var9 = poles(var8,s)
var9 = 

(-3i3i)

単位の変換および単位の整合性のチェック

単位が異なる 2 つの長さの比を作成します。以下のコードを実行して、シンボリック出力を生成します。

u = symunit;
ratio = (7*u.mi)/(420*u.ft)
ratio = 

160mi"mile - a physical unit of length."ft"foot - a physical unit of length."

単位をメートル、グラム、秒の単位系に変換します。出力を右クリックし、[物理単位関数を適用]、[単位を変換] を選択します。[物理単位関数を適用] という提案は、シンボリック出力にシンボリック単位が含まれている場合にのみ利用可能です。

ライブ エディターによって関数 unitConvert が挿入および適用され、単位がメートル、グラム、秒の単位系に変換されます。

var10 = unitConvert(ratio,[symunit('m'),symunit('g'),symunit('s')])
var10 = 88

次に、移動発射体の x 座標と y 座標を表す 2 つのシンボリック式 xy を作成します。xy の単位と長さの単位 m および ft を比較するシンボリック式 r を作成します。以下のコードを実行して、シンボリック出力を生成します。

syms theta ts x y r
g = 9.81*u.m/u.s^2;
v = 10*u.m/u.s;
t = ts*u.s;
x = v*cos(theta)*t;
y = v*sin(theta)*t + (-g*t^2)/2;
r = [x == u.m y == u.ft]
r = 

(10tscos(θ)m"meter - a physical unit of length."=m"meter - a physical unit of length."10tssin(θ)m"meter - a physical unit of length."-981ts2200m"meter - a physical unit of length."=ft"foot - a physical unit of length.")

r の単位の整合性をチェックします。出力を右クリックし、[物理単位関数を適用]、[単位の整合性をチェック] を選択します。

ライブ エディターによって関数 checkUnits が挿入および適用され、r の単位の一貫性と互換性がチェックされます。

関数 checkUnits は、フィールド Consistent とフィールド Compatible を含む構造体を返します。Consistent フィールドは、r のすべての項が同じ次元、同じ単位で、換算係数が 1 の場合、logical 1(true) を返します。Compatible フィールドは、すべての項が同じ次元を持っている場合、logical 1(true) を返しますが、同じ単位である必要はありません。

var11 = checkUnits(r)
var11 = struct with fields:
    Consistent: [1 0]
    Compatible: [1 1]