/ MatlabのODEソルバーの 'odefun'で使用する式の操作 - matlab、微分方程式

MATLAB - MATLAB、微分方程式のODEソルバーの 'odefun'で使用する式の操作

私は、解きたい2階微分方程式系を持っています。それは変数y1、dy1などを使ってシンボリック形式で持っています。

dy1 = y1 + y2
dy2 = 2*y1 + y2^3

MatlabのODEソルバーを使用するには、一階微分方程式系を次のような形式で表す "odefun"が必要です。

function dydt = eqs(t,y)
dydt = [y(1)+y(2);   2*y(1)+y(2)^3]

さて、私の抱えている問題では、シンボリック方程式はあまりにも長すぎて、画面に正しく表示できないことさえあります。

dy1 = y1 + y2 + ... More than 25000 characters
dy2 = 2*y1 + y2^3 + ... More than 25000 characters

そのため、ODEソルバーで使用する対応する関数を書くためには、次のようなものをタイプする必要があります。

function dydt = eqs(t,y)
dydt = [y(1)+y(2)+...More than 25000 characters; 2*y(1)+y(2)^3+...More than 25000 characters]

明らかに、実現不可能です。 欲しいのは、 "y1"を "y(1)"に置き換えるために、方程式を記号形式で操作することです。しかし、変数は括弧を含む名前を持つことができないので、簡単には見えません。つまり、syms y(1)はエラーを返します。

もう一つのアプローチ: 元のシンボリック方程式が文字列を使用して構築されている場合、文字列 "y1"を "y(1)"に置き換えることが可能です。その後、関数dydtを定義しているMatlabスクリプトファイルに式をコピーできます。ただし、記号式であろうと文字列式であろうと、式は完全に表示するには長すぎます。

回答:

回答№1は0

このようにインライン関数(別名:関数ハンドル)を簡単に定義できます。

dydt=@(y) [ sum(y) ; 2y(1)+y(2)^3+...]

それから任意の値を入力することができます dydt(y).

あなたもそれを使用することができます ode45() 微分方程式を解くための入力として機能します。