微分方程式は次のとおりです。
k*r=sqrt( (r`)^2 + r^2 )
kの値は2です。どのように関数を実現し、ode45でそれを解くことができますか?
微分方程式は次のとおりです。
k*r=sqrt( (r`)^2 + r^2 )
kの値は2です。どのように関数を実現し、ode45でそれを解くことができますか?
これは非常に簡単です。いくつかの重要なこと:
微分方程式は、ODE45が期待する形式で表現する必要がありますdy/dt = f(t,y)
。つまり、関数ではなく、k*r=sqrt( (drdt)^2 + r^2 )
これを次のように考慮する必要がありますdrdt = sqrt( (k*r)^2 - r^2 )
(代数を正しく実行したと仮定します)。
関数はベクトル化可能である必要があります。この問題の場合、これは、の代わりに^
、を使用.^
し、の代わりにを使用することを意味し*
ます.*
。
次に、基本的な無名関数の構文を使用して、解決する関数を設定できます。
k = 2;
fn_drdt = @(t,r) sqrt( (k.*r).^2 - (r.^2) );
ODE45を使用して解決します
tStart = 0;
tEnd = 10;
r_init = -5;
[t, r] = ode45(fn_drdt, [tStart tEnd], r_init);
そして、基本的なプロットを作成します
plot(t,r,'.');
そして、タイトルを追加します
title(sprintf('Solution to %s with k=%d ,r_0=%d', func2str(fn_drdt), k, r_init), 'fontname','courier')