Solving a first-order ODE given an input vector
15 次查看(过去 30 天)
显示 更早的评论
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 个评论
Pavitra Vaishali
2023-3-29
编辑:Pavitra Vaishali
2023-3-29
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.
采纳的回答
Ameer Hamza
2020-3-26
编辑:Ameer Hamza
2020-3-26
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.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Ordinary Differential Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!