- Inline functions
- Direction fields
- Numerical solution of initial value problems
- Plotting
the solution

Combining direction field and solution curves

Finding numerical values at given t values - Symbolic solution of ODEs
- Finding
the general solution

Solving initial value problems

Plotting the solution

Finding numerical values at given t values

If you want to use a function several times it is convenient to define it as
a so-called *inline function*:

`f1 =`

inline('sin(x)*x','x')

defines the function `f1(x)=sin(x)*x`

. Note that the arguments of
`inline`

must be *strings* (not symbolic expressions). You can
then use the function `f1`

in expressions you type in.

You can also define inline functions of several variables:

`g1 = inline('x*y+sin(x)','x','y')`

defines the function `g1(x,y)=x*y+sin(x)`

of two variables.

**First download the file **

and put it in the same directory as your other m-files for the homework.**dirfield.m**

**Define an inline function **

of
two variables **g**`t`

, `y`

corresponding to the right hand
side of the differential equation* y*'(*t*) =
*g*(*t*,*y*(*t*)). E.g., for the differential
equation *y*'(*t*) = *t** y*^{2} define

`g = inline('t*y^2','t','y')`

You have to use
`inline(...,`

, even if
**'t'**,**'y'**)`t`

or `y`

does not occur in your formula.

**To plot the direction field** for t going from t0 to t1 with a
spacing of dt and y going from y0 to y1 with a spacing of dy use

. E.g., for
**dirfield(g,t0:dt:t1,y0:dy:y1)**`t`

and `y`

between -2 and 2 with a spacing of 0.2
type

dirfield(g,-2:0.2:2,-2:0.2:2)

**First define the inline function
****g**** **corresponding to the
right hand side of the differential equation* y*'(*t*) =
*g*(*t*,*y*(*t*)). E.g., for the differential
equation *y*'(*t*) = *t** y*^{2} define

`g = inline('t*y^2','t','y')`

**To plot the numerical solution of an initial value
problem:** For the initial condition y(t0)=y0 you can plot the
solution for t going from t0 to t1 using

.**ode45(g,[t0,t1],y0)**

*Example: *To plot the solution of the initial value problem
*y*'(*t*) = *t** y*^{2}, *y*(-2)=1 in
the interval [-2,2] use

ode45(g,[-2,2],1)

The circles mark the values which were actually computed (the points are
chosen by Matlab to optimize accuracy and efficiency). You can obtain vectors
`ts`

and `ys`

with the coordinates of these points using

. You can then plot
the solution using **[ts,ys] = ode45(g,[t0,t1],y0)**

(this is a way to
obtain a plot without the circles).**plot(ts,ys)**

**To combine plots of the direction field and several
solution curves** use the commands

and **hold
on**

: After obtaining
the first plot type **hold off**`hold on`

, then all subsequent commands plot in
the same window. After the last plot command type `hold off`

.

*Example:* Plot the direction field and the 13 solution curves with
the initial conditions *y*(-2) = -0.4, -0.2, ..., 1.8, 2:

dirfield(g,-2:0.2:2,-2:0.2:2) hold on for y0=-0.4:0.2:2 [ts,ys] = ode45(g,[-2,2],y0); plot(ts,ys) end hold off

**To obtain numerical values of the solution at certain t
values**: You can specify a vector `tv`

of t values and
use

. The first element of
the vector **[ts,ys] = ode45(g,tv,y0)**`tv`

is the initial t value; the vector `tv`

must have at least 3 elements. E.g., to obtain the solution with the initial
condition *y*(-2)=1 at t = -2, -1.5, ..., 1.5, 2 and display the results
as a table with two columns, use

`[ts,ys]=ode45(g,-2:0.5:2,1);`

[ts,ys]

`sol =`

dsolve('Dy=t*y^2','t')

The last argument `'t'`

is the name of the independent variable.
Do not type `y(t)`

instead of `y`

.

If Matlab can't find a solution it will return an empty symbol. If Matlab finds several solutions it returns a vector of solutions.

Sometimes Matlab can't find an explicit solution, but returns the

solution in. E.g.,implicit form`dsolve('Dy=1/(y-exp(y))','t')`

returns

`t-1/2*y^2+exp(y)+C1=0`

Unfortunately Matlab cannot handle initial conditions in this case. You can use

`to plot several solution curves for t in [-4,4], y in [-3,3]. You can use`

ezcontour('t-1/2*y^2+exp(y)',[-4 4 -3 3])`to plot only the curve where t-1/2*y^2+exp(y)=1.`

ezplot('t-1/2*y^2+exp(y)-1',[-4 4 -3 3])

The solution will contain a constant `C1`

. You can substitute
values for the constant using

. E.g., to set **subs(sol,'C1',value)**`C1`

to 5 and plot this solution for t=-2 to 2 use

`ezplot( subs(sol,'C1',5) , [-2 2] )`

**To solve an initial value problem**
additionally specify an initial condition:

`sol = dsolve('Dy=t*y^2','y(-2)=1','t')`

**To plot the solution** use

. Here is an example for
plotting the 13 solution curves with the initial conditions **ezplot(sol,[t0,t1])***y*(-2) =
-0.4, -0.2, ..., 1.8, 2:

sol = dsolve('Dy=t*y^2','y(-2)=y0','t') for y0=-0.4:0.2:2 ezplot( subs(sol,'y0',y0) , [-2 2]) hold on end hold off axis tight

**To obtain numerical values** at one or more t
values use

and
**subs(sol,'t',tval)**

(or **double**

for
more digits):**vpa**

`sol = dsolve('Dy=t*y^2','y(-2)=1','t')`

This gives a numerical value of the solution at t=0.5:

`double( subs(sol,'t',0.5) )`

This computes numerical values of the solution at t=-2, -1.5, ..., 2 and displays the result as a table with two columns:

`tval = (-2:0.5:2)'; % column vector with t-values`

yval = double( subs(sol,'t',tval) )% column vector with y-values

[tval,yval] % display 2 columns together

(continued in Using Matlab for Higher Order ODEs and Systems of ODEs)

Tobias von Petersdorff