HOW DO I DO THAT IN MATLAB SERIES?

In this series, I am answering questions that students have asked me about MATLAB. Most of the questions relate to a mathematical procedure.

Contents

TOPIC

How do I solve an initial value ordinary differential equation?

SUMMARY

% Language : Matlab 2008a;
% Authors : Autar Kaw;
% Mfile available at
% http://numericalmethods.eng.usf.edu/blog/ode_initial.m;
% Last Revised : May 14, 2009;
% Abstract: This program shows you how to solve an
%           initial value ordinary differential equation.
clc
clear all

INTRODUCTION

disp('ABSTRACT')
disp('   This program shows you how to solve')
disp('   an initial value ordinary differential equation')
disp(' ')
disp('AUTHOR')
disp('   Autar K Kaw of http://autarkaw.wordpress.com')
disp(' ')
disp('MFILE SOURCE')
disp('   http://numericalmethods.eng.usf.edu/blog/ode_initial.m')
disp(' ')
disp('LAST REVISED')
disp('   May 14, 2009')
disp(' ')
ABSTRACT
   This program shows you how to solve
   an initial value ordinary differential equation
 
AUTHOR
   Autar K Kaw of http://autarkaw.wordpress.com
 
MFILE SOURCE
   http://numericalmethods.eng.usf.edu/blog/ode_initial.m
 
LAST REVISED
   May 14, 2009
 

INPUTS

Solve the ordinary differential equation 3y"+5y'+7y=11exp(-x) Define x as a symbol

syms x
%The ODE
ode_eqn='3*D2y+5*Dy+7*y=11*exp(-13*x)';
% The initial conditions
iv_1='Dy(0)=17';
iv_2='y(0)=19';
% The value at which y is sought at
xval=23.0;

DISPLAYING INPUTS

disp('INPUTS')
func=['  The ODE to be solved is ' ode_eqn];
disp(func)
iv_explain=['  The initial conditions are ' iv_1 '    ' iv_2];
disp(iv_explain)
fprintf('  The value of y is sought at x=%g',xval)
disp('  ')
INPUTS
  The ODE to be solved is 3*D2y+5*Dy+7*y=11*exp(-13*x)
  The initial conditions are Dy(0)=17    y(0)=19
  The value of y is sought at x=23  

THE CODE

% Finding the solution of the ordinary differential equation
soln=dsolve(ode_eqn,iv_1,iv_2,'x');
% vpa below uses variable-precision arithmetic (VPA) to compute each
% element of soln to 5 decimal digits of accuracy
soln=vpa(soln,5);

DISPLAYING OUTPUTS

disp('  ')
disp('OUTPUTS')
output=['  The solution to the ODE is ' char(soln)];
disp(output)
value=subs(soln,x,xval);
fprintf('  The value of y at x=%g is %g',xval,value)
disp('  ')
  
OUTPUTS
  The solution to the ODE is 25.880*exp(-.83333*x)*sin(1.2802*x)+18.976*exp(-.83333*x)*cos(1.2802*x)+.24499e-1*exp(-13.*x)
  The value of y at x=23 is -1.48128e-007