このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
dsolve
微分方程式系の求解
文字ベクトルまたは string 入力に対するサポートは将来のリリースで削除される予定です。代わりに、syms
を使用して変数を宣言し、dsolve('Dy = -3*y')
などの入力をsyms y(t); dsolve(diff(y,t) == -3*y)
で置き換えます。
説明
は、1 つ以上のS
= dsolve(___,Name,Value
)Name,Value
引数のペアによって指定された追加オプションを使用します。
例
微分方程式の求解
1 階微分方程式 を解きます。
diff
を使用して 1 次導関数を指定し、== を使用して方程式を指定します。次に、dsolve
を使用して方程式を解きます。
symsy(t)aeqn = diff(y,t) == a*y; S = dsolve(eqn)
S =
解には定数が含まれます。定数を除去するには、条件付き微分方程式の求解を参照してください。ワークフロー全体については、偏微分方程式の求解を参照してください。
2 階微分方程式の求解
2 階微分方程式 を解きます。
diff(y,t,2)
を使用して 2 階微分方程式を指定し、==
を使用して方程式を指定します。次に、dsolve
を使用して方程式を解きます。
symsy(t)aeqn = diff(y,t,2) == a*y; ySol(t) = dsolve(eqn)
ySol(t) =
条件付き微分方程式の求解
初期条件 の 1 階微分方程式 を解きます。
==
演算子を使用し、初期条件をdsolve
の 2 番目の入力として指定します。条件を指定することで、C1
、C2
、...
などの任意定数が解から消去されます。
symsy(t)aeqn = diff(y,t) == a*y; cond = y(0) == 5; ySol(t) = dsolve(eqn,cond)
ySol(t) =
次に、 と の初期条件を使用して、2 階微分方程式 を解きます。
diff(y,t)
をDy
に代入した後、Dy(0) == 1
を使用して 2 番目の初期条件を作成します。
symsy(t)abeqn = diff(y,t,2) == a^2*y; Dy = diff(y,t); cond = [y(0)==b, Dy(0)==1]; ySol(t) = dsolve(eqn,cond)
ySol(t) =
この 2 階微分方程式には指定した条件が 2 つあるため、定数は解から消去されます。一般に、解から定数を消去するには、条件の数を方程式の階数と等しくしなければなりません。
微分方程式系の求解
微分方程式系の求解
方程式系をベクトルとして指定します。dsolve
は解を含む構造体を返します。
symsy(t)z(t)eqns = [diff(y,t) == z, diff(z,t) == -y]; S = dsolve(eqns)
S =struct with fields:z: [1x1 sym] y: [1x1 sym]
構造体の要素を指定して解にアクセスします。
ySol(t) = S.y
ySol(t) =
zSol(t) = S.z
zSol(t) =
関数または変数への出力の代入
複数の関数を解く場合、dsolve
は既定では構造体を返します。または、出力をベクトルとして明示的に指定し、関数または変数に解を直接代入することもできます。dsolve
はsymvar
を使用して出力をアルファベット順に並べ替えます。
微分方程式系を解き、出力を関数に代入します。
symsy(t)z(t)eqns = [diff(y,t)==z, diff(z,t)==-y]; [ySol(t),zSol(t)] = dsolve(eqns)
ySol(t) =
zSol(t) =
微分方程式の陽的解および陰的解の求解
微分方程式
の解を求めます。dsolve
は定数値をもつランベルトの W 関数で陽的な解を返します。
symsy(t)eqn = diff(y) == y+exp(-y)
eqn(t) =
sol = dsolve(eqn)
sol =
微分方程式の陰的な解を返すには、'Implicit'
オプションをtrue
に設定します。陰的な解は
の形式をとります。
索尔= dsolve (eqn,'Implicit',true)
sol =
陽的な解を求めることができない場合に陰的な解を求める
微分方程式の陽的な解を解析的に求めることができない場合、dsolve
は空のシンボリック配列を返します。数值
など、MATLAB® 数値ソルバーを使用して微分方程式を解くことができます。詳細については、2 階微分方程式の数値的な求解を参照してください。
symsy(x)eqn = diff(y) == (x-exp(-x))/(y(x)+exp(y(x))); S = dsolve(eqn)
Warning: Unable to find symbolic solution.
S = [ empty sym ]
'Implicit'
オプションをtrue
に指定して、微分方程式の陰的な解を調べることもできます。陰的な解は
の形式をとります。
S = dsolve(eqn,'Implicit',true)
S =
内部単純化を無効にして特殊なケースを含める
条件
を使用して微分方程式
を解きます。既定では、dsolve
は一般的に正確ではない単純化を適用しますが、より単純な解を生成します。詳細については、アルゴリズムを参照してください。
symsay(t)eqn = diff(y) == a/sqrt(y) + y; cond = y(a) == 1; ySimplified = dsolve(eqn, cond)
ySimplified =
パラメーター
の可能な値がすべて含まれる解を返すには、'IgnoreAnalyticConstraints'
をfalse
に設定して単純化を無効にします。
yNotSimplified = dsolve(eqn,cond,'IgnoreAnalyticConstraints',false)
yNotSimplified =
微分方程式の級数解の求解
2 階微分方程式
を解きます。dsolve
は未評価の積分の項を含む解を返します。
symsy(x)eqn = (x^2-1)^2*diff(y,2) + (x+1)*diff(y) - y == 0; S = dsolve(eqn)
S =
の場合の微分方程式の級数解を返すには、'ExpansionPoint'
を-1
に設定します。dsolve
はピュイズー級数で 2 つの線形独立解を返します。
S = dsolve(eqn,'ExpansionPoint',-1)
S =
'ExpansionPoint'
をInf
に設定して、展開点
の場合の他の級数解を求めます。
S = dsolve(eqn,'ExpansionPoint',Inf)
S =
級数展開の既定の打ち切り階数は 6 です。ピュイズー級数解の項をさらに取得するには、'Order'
を 8 に設定します。
S = dsolve(eqn,'ExpansionPoint',Inf,'Order',8)
S =
異なる一方向の極限をもつ関数の初期条件を指定
初期条件を指定せずに微分方程式 を解きます。
symsy(x)eqn = diff(y) == exp(-1/x)/x^2; ySol(x) = dsolve(eqn)
ySol(x) =
解から定数を消去するには、初期条件 を指定します。
cond = y(0) == 1; S = dsolve(eqn,cond)
S =
解ySol(x)
内の関数
には
で異なる一方向の極限があります。この関数には右側に極限
がありますが、左側に未定義の極限
があります。
x0
で異なる一方向の極限をもつ関数に条件y(x0)
を指定すると、dsolve
はこの条件を右側の
からの極限として扱います。
入力引数
eqn
—微分方程式または方程式系
シンボリック方程式|シンボリック方程式のベクトル
微分方程式または方程式系。シンボリック方程式またはシンボリック方程式のベクトルとして指定します。==
演算子を使用して、微分方程式を指定します。eqn
がシンボリック式 (右辺なし) の場合、ソルバーは右辺が 0 であると仮定し、方程式eqn == 0
の解を求めます。
方程式では,diff
を使用して、微分を表現します。たとえば、diff(y,x)
はシンボリック関数y(x)
をx
で微分します。syms
を使用してシンボリック関数y(x)
を作成し、dsolve
を使用して方程式d2y(x)/dx2* y = x (x)
を解きます。
symsy(x)S = dsolve(diff(y,x,2) == x*y)
信谊y (t) z (t);S = dsolve ([diff (y, t) == z, diff(z,t) == -y])
のように方程式のベクトルを使用して微分方程式系を指定します。ここで、y
とz
は、シンボリック変数 (この場合はt
) に依存するシンボリック関数でなければなりません。右辺は、t
、y
、およびz
に依存するシンボリック式でなければなりません。Symbolic Math Toolbox™ は現在、合成シンボリック関数、つまり別のシンボリック関数に依存するシンボリック関数をサポートしていないことに注意してください。
cond
—初期条件または境界条件
シンボリック方程式|シンボリック方程式のベクトル
初期条件または境界条件。シンボリック方程式またはシンボリック方程式のベクトルとして指定します。
条件に導関数が含まれる場合、diff
で導関数を表します。diff
呼び出しを変数に代入し、その変数を使用して条件を指定します。例については、条件付き微分方程式の求解を参照してください。
複数の条件を指定するには、方程式のベクトルを使用します。条件の数が従属変数の数より少ない場合、解には任意定数C1
、C2
、...
が含まれます。
名前と値のペアの引数
引数Name,Value
のオプションのコンマ区切りペアを指定します。Name
は引数名、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を任意の順番で指定できます。
'IgnoreAnalyticConstraints',false
は内部単純化を適用しません。
ExpansionPoint
—ピュイズー級数の解の展開点
0
(既定値) |数値|シンボリック数|シンボリック変数|シンボリック関数|シンボリック式
ピュイズー級数の解の展開点。数値あるいはシンボリック数、変数、関数または式として指定します。このオプションを指定すると、ピュイズー級数で微分方程式の解が返されます (負および非整数の指数を許容するべき級数)。展開点は級数変数では変更できません。例については、微分方程式の級数解の求解を参照してください。
データ型:single
|double
|sym
複素数のサポート:あり
IgnoreAnalyticConstraints
—内部単純化を使用するオプション
true
(既定値) |false
内部単純化を使用するオプション。true
またはfalse
として指定します。
既定の設定では、ソルバーは微分方程式を解きながら単純化を適用します。これにより、一般に有効でない結果となる場合があります。つまり、このオプションは数学的恒等を適用します。便利ですが、変数が取り得るすべての値に対して結果が成り立つとは限りません。したがって、既定の設定では、ソルバーは結果の完全性を保証しません。'IgnoreAnalyticConstraints'
がtrue
の場合は、関数dsolve
で返される結果を必ず検証してください。詳細については、アルゴリズムを参照してください。
これらの単純化を使用せずに常微分方程式を解くには、'IgnoreAnalyticConstraints'
をfalse
に設定します。'IgnoreAnalyticConstraints'
をfalse
に設定して得られた結果は、引数のすべての値に対して正確です。特定の方程式の場合、'IgnoreAnalyticConstraints'
をfalse
に設定すると、dsolve
は陽的な解を返さない可能性があります。
Implicit
—陰的な解を返すオプション
false
(既定値) |true
陰的な解を返すオプション。false
またはtrue
として指定します。変数xおよびy(x)をもつ微分方程式に対して、陰的な解はF(y(x)) = g(x)の形式をとります。
既定では、微分方程式の解を求めるときにソルバーは陽的な解y(x) = f(x)を解析的に求めようとします。dsolve
が陽的な解を見つけられなかった場合、'Implicit'
オプションをtrue
に指定して、陰的な形式で解を調べることができます。
MaxDegree
—ソルバーが陽的な式を使用する多項方程式の最大次数
2(既定値) |5 より小さい正の整数
ソルバーが陽的な式を使用する多項方程式の最大次数。5 より小さい正の整数として指定します。dsolve
は、'MaxDegree'
より高次の多項方程式の解を求める場合は、陽的な式を使用しません。
Order
—ピュイズー級数解の打ち切り階数
0
(既定値) |正の整数|シンボリックな正の整数
ピュイズー級数解の打ち切り階数。正の整数またはシンボリックな正の整数として指定します。このオプションを指定すると、ピュイズー級数で微分方程式の解が返されます (負および非整数の指数を許容するべき級数)。打ち切り階数nは、O項 ( または ) の指数です。
出力引数
S
— 微分方程式の解
シンボリック式 | シンボリック式のベクトル
微分方程式の解。シンボリック式またはシンボリック式のベクトルとして返されます。S
のサイズは解の数です。
y1,...,yN
— 微分方程式の解を格納する変数
シンボリック変数のベクトル
微分方程式の解を格納する変数。シンボリック変数のベクトルとして返されます。出力変数の数は方程式系の従属変数の数と等しくなければなりません。dsolve
は従属変数をアルファベット順に並べ替えてから、変数の解を出力変数またはシンボリック配列に代入します。
ヒント
dsolve
で陽的な解または陰的な解を求めることができない場合は、警告を表示し、空のsym
を返します。この場合、MATLAB®関数ode23
や数值
を使用して数値解を求めてください。出力は同等の低階微分方程式、または積分になる場合があります。'IgnoreAnalyticConstraints'
がfalse
の場合であっても、dsolve
が完全な解を返すとは限りません。dsolve
がx0
で異なる一方向の極限をもつ関数を返し、条件y(x0)
を指定する場合、dsolve
はこの条件を右側の からの極限として扱います。
アルゴリズム
'IgnoreAnalyticConstraints'
をfalse
に設定しない場合、dsolve
は、方程式を解く際に以下のルールを適用します。
任意の a および b について、log(a) + log(b) = log(a·b)が成り立つ。特に、次の等式は任意の a、b、c の値に当てはまる。
(a·b)c= ac·bc.
任意の a および b について、log(ab) = b·log(a)が成り立つ。特に、次の等式は任意の a、b、c の値に当てはまる。
(ab)c= ab·c.
f および g が標準的な数学関数、かつ任意の微小な正数についてf(g(x)) = xである場合、すべての複素数 x に対してf(g(x)) = xが有効であるものとする。以下に例を示します。
log(ex) = x
asin(sin(x)) = x,acos(cos(x)) = x,atan(tan(x)) = x
asinh(sinh(x)) = x,acosh(cosh(x)) = x,atanh(tanh(x)) = x
ランベルトのW関数のすべての分岐指標 k に対して、Wk(x·ex) = x
ソルバーは、
0
を除く任意の式で方程式の両辺を乗算できる。多項方程式の解は完全でなければならない。
互換性についての考慮事項
dsolve
での文字ベクトルまたは string 入力のサポート終了
R2019b 以降は警告
将来のリリースで、dsolve
は方程式を string または文字ベクトルとして受け入れなくなります。代わりに、シンボリック式またはsym
オブジェクトを使用して微分方程式を定義します。たとえば、dsolve('Dy = exp(y)')
などの入力をsyms y(t); dsolve(diff(y,t) == exp(y))
で置き換えます。
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)