MATLAB Answers

Vector input for ODE45

67 views (last 30 days)
Sirs, I have something like the below formula:
T=(A+B+C)+(D*T) dt where A, B and C are vectors with let me say (1,6000) length How Can I integrate this formula using ODE45, please help, and thanks in advance

  0 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 22 Feb 2017
x0 = ... something same length as A;
[T, X] = ode45( @(t, x) f(t, X, A, B, C, D), tspan, x0);
function dy = f(t, y, A, B, C, D)
dy = (A + B + C) + (D*t);
... except of course if that were really your formula you would construct
x0 = ... something same length as A;
ApBpC = A + B + C;
[T, X] = ode45( @(t, x) f(t, X, ApBpC, D), tspan, x0);
function dy = f(t, y, ApBpC, D)
dy = ApBpC + (D*t);

  11 Comments

Show 8 older comments
Walter Roberson
Walter Roberson on 23 Feb 2017
In your "for i" loop, you overwrite all of Tdot. The effect is going to be the same as if you had only done the last of the iterations.
You should avoid using global: global are the slowest form of variables. https://www.mathworks.com/help/matlab/math/parameterizing-functions.html
Oday Shahadh
Oday Shahadh on 23 Feb 2017
how to develope the loop? to avoid overwriting a previues values?
Walter Roberson
Walter Roberson on 23 Feb 2017
i_vals = 1 : 10 : t;
num_i = length(i_vals);
Tdot = zeros(num_i, 1);
for i_idx = 1 : num_i
i = i_vals(i_idx);
Tdot(i_idx) = A(i) + B(i) + C(i) - T;
end
result = TDot;
Note that the resulting value changes length as t increases. If t represents the time parameter to the ode, then this would mean that you are trying to return a different number of derivatives as time goes on.

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!