2

初めての MATLAB ユーザーです。MATLAB に t と f の 2 次元配列があります。この 2 次元配列は、f(t) などの関数に対応します。私は一連の微分方程式を解くために ode45 を使用しており、f(t) は係数の 1 つです。つまり、形式 x'(t)=f(t)x(t) またはそのバリエーションの一連の方程式があります。続行するにはどうすればよいですか?

t と f の配列を ode45 メソッドで使用できる関数に変換する方法が必要です。おそらく、変換により線形補間が行われ、最適な曲線の方程式が得られます。

または、別のアプローチがある場合は、私はすべての耳です!

ありがとうございました!

4

1 に答える 1

1

これは、関数をパラメータとして ODE の右側に渡す単純な例です。同じディレクトリにファイルを作成し、main を実行します

main.m

t = 0:0.2:10; f = sin(t);
fun = @(xc) interp1(t, f, xc);

x0=0.5
% solve diff(x, t)=sin(t)  
% pass function as parameter                           
[tsol, xsol] = ode45(@(t, x) diff_rhs(t, x, fun),[0.0 8.0], 0.5);

% we solve equation dx/dt = sin(x), x(0)=x0
% exact solution is x(t) = - cos(t) + x(0) + 1
plot(tsol, xsol, 'x');
hold on
plot(tsol, -cos(tsol) + x0 + 1, '-');
legend('numerical', 'exact');

diff_rhs.m

function dx = diff_rhs(t, x, fun)
  dx = fun(t);
end

ドキュメント内の参照: interp1およびanonymous Functions

于 2012-12-29T18:01:16.597 に答える