微分方程为:
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')