- 0:0.1:5 is a vector already. [ ] is Matlab's operator for a concatenation. In [0:0.1:5] you concate the vector 0:0.1:5 with nothing, so this is a (tiny) waste of time.
- Providing the function to be integrated as CHAR vector is outdated for over 20 years now. Use "modern" function handles instead.
How to create a loop to run my ODE for two sets of data and then store each data set in two cell arrays.
1 回表示 (過去 30 日間)
古いコメントを表示
function [dAsdt]=rates(tspan, y)
% Rate constants
K1 = 0.4526;
K2 = 0.3958
K3 = 0.3523
%ODE for each spicies in reactor
dA1dt = -K1*y(1)*y(2) -K2*y(1)*y(4) -K3*y(1)*y(5);
dA2dt = -K1*y(1)*y(2);
dA3dt = K1*y(1)*y(2) +K2*y(1)*y(4) +K3*y(1)*y(5);
dA4dt = K1*y(1)*y(2) -K2*y(1)*y(4);
dA5dt = K2*y(1)*y(4) -K3*y(1)*y(5);
dA6dt = K3*y(1)*y(5);
%combine all ODEs into one matrix
dAsdt = [dA1dt; dA2dt; dA3dt; dA4dt; dA5dt; dA6dt]
the initial script with the ODEs called rates.
Y0 = [3 1 0 0 0]
Y1 = [4 2 0 0 0]
tspan = [0:0.1:5];
[tout,yout]=ode45('rates',tspan,y0);
I want to Run this part for both Y0 and then Y1 and store each set of values but don't know how.
0 件のコメント
採用された回答
Jan
2023 年 3 月 14 日
I do not see the problem:
Y0 = [3 1 0 0 0]
Y1 = [4 2 0 0 0]
tspan = 0:0.1:5;
[tout{1}, yout{1}] = ode45(@rates, tspan, Y0);
[tout{2}, yout{2}] = ode45(@rates, tspan, Y1);
Notes:
2 件のコメント
Jan
2023 年 3 月 15 日
ode45('rates',tspan,y0)
% ^^^^^^^ function is provided as CHAR, outdated sind R6.5 (2002)
ode45(@rates, tspan, Y0)
% ^^^^^^ function is provided as function handle
Where did you got the example with using a CHAR vector from? Prefer to learn Matlab from modern sources.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Symbolic Math Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!