私は、解きたい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()
微分方程式を解くための入力として機能します。