変数の値がワークスペースでは正しい値が表示されるが,実行すると0になってしまう.
8 ビュー (過去 30 日間)
古いコメントを表示
t = 0:0.01:1.7;
A = func_RK(t,2.072)
このときのAの値がワークスペースでは2.071,2.0735...となるのですが,実行した結果は0,0,...となってしまいます.
ライブ関数1
関数 func_RK
1階の微分方程式に対して Runge-Kutta の計算を行うための下請け関数
引数: 時間ベクトル t, および x の初期値 x0
戻り値: ベクトル x
function x = func_RK(t, x0)
% 刻み時間Δtの設定
del_t = t(2) - t(1);
% ベクトル t をコピーして, 漸化式で計算する x を作成
x = t;
% 初期値
x(1) = x0;
% 漸化式
for i = 1:(length(t)-1)
% 式(10.16)
dx0 = func(x(i))*del_t;
% 式(10.17)
dx1 = func(x(i)+dx0/2)*del_t;
% 式(10.18)
dx2 = func(x(i)+dx1/2)*del_t;
% 式(10.19)
dx3 = func(x(i)+dx2)*del_t;
% 式(10.20)
x(i+1) = x(i) + (dx0 + 2*dx1 + 2*dx2 + dx3)/6;
end
end
ライブ関数2
Runge-Kuttaの計算で傾きを与える関数
引数: x
戻り値: x(t) の傾き, つまり f(x) = dx/dt
function f = func(x)
A = 2; B = 1;
% f(x) = dx/dt
f = -A*x + B*x^2;
end
2 件のコメント
Kojiro Saito
2023 年 6 月 24 日
実行した結果が0,0,.になるというのが再現できません。
下記の通り問題なく実行できているのでコードは正しくできているようです。
t = 0:0.01:1.7;
A = func_RK(t,2.072)
%% ローカル関数
function x = func_RK(t, x0)
% 刻み時間Δtの設定
del_t = t(2) - t(1);
% ベクトル t をコピーして, 漸化式で計算する x を作成
x = t;
% 初期値
x(1) = x0;
% 漸化式
for i = 1:(length(t)-1)
% 式(10.16)
dx0 = func(x(i))*del_t;
% 式(10.17)
dx1 = func(x(i)+dx0/2)*del_t;
% 式(10.18)
dx2 = func(x(i)+dx1/2)*del_t;
% 式(10.19)
dx3 = func(x(i)+dx2)*del_t;
% 式(10.20)
x(i+1) = x(i) + (dx0 + 2*dx1 + 2*dx2 + dx3)/6;
end
end
function f = func(x)
A = 2; B = 1;
% f(x) = dx/dt
f = -A*x + B*x^2;
end
回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!