Solving a first-order ODE given an input vector

3 views (last 30 days)
I am trying to solve the following ODE:
The purpose of this is to generate a timeseries y(t) given an input timeseries z(t) that I have already created. y(t) should be a vector of the same dimensions as z(t). However, I am not sure how to go about this using Matlab. I have tried using ode45 with the vector z(t) and the scalar k added as inputs:
odefun= @(t, y, z, h) z-h*y;
[~, y_sim]=ode45(@(t, y) odefun(t, y, z_sim, k), 1:20000, 0); %Set first value of y to zero
However, this returns the following error:
Error using odearguments (line 93)
@(T,Y)ODEFUN(T,Y, Z_SIM, K) must return a column vector.
How might I go about doing this?
  1 Comment
Pavitra Vaishali
Pavitra Vaishali on 29 Mar 2023
Edited: Pavitra Vaishali on 29 Mar 2023
Hey were you able to find the solution. If so, please help me too I am facing similar problem. Only change is I have a matrix instead of single value at time.
Meaning for each time stamp I will get a matrix.

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 26 Mar 2020
Edited: Ameer Hamza on 26 Mar 2020
This is actually equivalent to solving an ODE with time-varying term. See the example here: https://www.mathworks.com/help/matlab/ref/ode45.html#bu3l43b which deals exactly the same problem. You first need to define the value of z inside odefun as a function of t.

More Answers (0)

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!