- #1

- 15

- 0

Hello all,

I am new to the ODE solvers in Matlab and am trying to learn:

First, I am solving a 2nd order ODE to determine x(t), x'(t), and x''(t). No problem. Then, I am using these solutions to calculate two coefficients (that are functions of time) that are used in a second, second order ODE. The output solution is a vector of NaN's.

To explain... the first ODE script:

and first ODE function (where c1 and c2 are arbitrary, constant coefficients):

So now I have solutions for x(t), x'(t), x"(t) (that I name x, xp, xp2 respectively).

Ok, so no problem until I get to the second ODE. Following the same approach:

Script:

ODE function:

Using the above ODE function, I will get an indicie mismatch error. If I try to apply indices to K1 and K2 [(floor(t/dt)+1)], the output will all be NaN's.

It seems like there should be a simple answer as to how to solve a second order ODE that has coefficients (that are functions of time) that I have already solved for. Thanks in advance. (Hopefully my explanation is clear).

I am new to the ODE solvers in Matlab and am trying to learn:

First, I am solving a 2nd order ODE to determine x(t), x'(t), and x''(t). No problem. Then, I am using these solutions to calculate two coefficients (that are functions of time) that are used in a second, second order ODE. The output solution is a vector of NaN's.

To explain... the first ODE script:

Code:

```
% Initial Conditions:
x10 = x0; %x0 is some initial value
x20 = 0;
tspan = linspace(0,tmax+dt, tmax/dt+1);
% Solve ODE
[t,x] = ode23('ode', tspan, [x10,x20]);
```

Code:

```
function xp = ode(t,x)
xp = zeros(2,1);
xp(1) = x(2);
xp(2) = c2*x(1)-c1*x(2)
```

Ok, so no problem until I get to the second ODE. Following the same approach:

Script:

Code:

```
% Initial Conditions:
a10 = a0; %a0 is some initial value
a20 = 0;
tspan = linspace(0,tmax+dt, tmax/dt+1);
% Solve ODE
[t,a] = ode23('ode2', tspan, [a10,a20]);
```

Code:

```
function ap = ode2(t,a)
K1 = xp2./x;
K2 = xp1./x; % the length of K1 and K2 is the length of x from solution above
ap = zeros(2,1);
ap(1) = a(2);
ap(2) = K2*a(1)+ K1*a(2)
```

It seems like there should be a simple answer as to how to solve a second order ODE that has coefficients (that are functions of time) that I have already solved for. Thanks in advance. (Hopefully my explanation is clear).

Last edited: