質問: odeset('refine',10); %t=double(t) sol=ode45(@(t,y) myfun(t,y),[0 100],[0 0]);%%ここでエラー発生 %[t,y]=ode45(@(t,y) myfun(t,y),[0 10],[0 0],opts) %plot(sol.x, sol.y(1,:)) plot(sol.x, sol.y(1,:)) ; xlabel('t'); ylabel('振れ角θ'); title('時間,s'); このコードを走らせたとき、 以下のようなエラーが発生します エラー: odearguments (line 113) 入力は float、つまり single か double でなければなりません。 エラー: ode45 (line 115) odearguments(fcnhandlesused, solver_name, ode, tspan, y0, options, varargin); エラー: standform2_ode (line 81) sol=ode45(@(t,y) myfun(t,y),[0 100],[0 0]); おそらく指定した値であるf(t)が悪さをしているのだろうと予想できるのですが、 t≦0の時にf(0)=0, t>0の時にf(t)=10^-9となるように条件指定が必要なので,率直にf=10^-9とすることもできない事を前提としているので、どうしたらいいのか分からずにいます。
回答: ひとまず、いまコメントアウトされている行 %myfun = @(t,y) double(m(t,y,i,l,om,ze,f)); を使用すればエラーは回避できるようですが、いかがでしょう?