1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>FreeMat: ODE45 Numerical Solution of ODEs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">FreeMat
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('num_ode45.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">ODE45 Numerical Solution of ODEs </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Section: <a class="el" href="sec_num.html">Numerical Methods</a> </p>
<h1><a class="anchor" id="Usage"></a>
Usage</h1>
<p>function [t,y] = ode45(f,tspan,y0,options,varargin) function SOL = ode45(f,tspan,y0,options,varargin)</p>
<p>ode45 is a solver for ordinary differential equations and initial value problems. To solve the ODE </p>
<pre class="fragment"> y'(t) = f(t,y)
y(0) = y0
</pre><p> over the interval tspan=[t0 t1], you can use ode45. For example, to solve the ode </p>
<pre class="fragment"> y' = y
y(0) = 1
</pre><p>whose exact solution is y(t)=exp(t), over the interval t0=0, t1=3, do</p>
<pre class="fragment">--> [t,y]=ode45(@(t,y) y,[0 3],1)
t =
Columns 1 to 7
0 0.0030 0.0180 0.0930 0.3930 0.6930 0.9930
Columns 8 to 14
1.2930 1.5930 1.8930 2.1930 2.4930 2.7930 3.0000
y =
1.0000
1.0030
1.0182
1.0975
1.4814
1.9997
2.6993
3.6437
4.9185
6.6392
8.9620
12.0975
16.3299
20.0854
</pre><p>If you want a dense output (i.e., an output that also contains an interpolating spline), use instead</p>
<pre class="fragment">--> SOL=ode45(@(t,y) y,[0 3],1)
SOL =
x: 1x14 double array
y: 1x14 double array
xe:
ye:
ie:
solver: generic_ode_solver
interpolant: 1x1 functionpointer array
idata: 1x1 struct array
</pre><p>You can view the result using </p>
<pre class="fragment"> plot(0:0.01:3,deval(SOL,0:0.01:3))
</pre><p> You will notice that this function is available for "every" value of t, while </p>
<pre class="fragment"> plot(t,y,'o-')
</pre><p>is only available at a few points.</p>
<p>The optional argument 'options' is a structure. It may contain any of the following fields:</p>
<p>'AbsTol' - Absolute tolerance, default is 1e-6. 'RelTol' - Relative tolerance, default is 1e-3. 'MaxStep' - Maximum step size, default is (tspan(2)-tspan(1))/10 'InitialStep' - Initial step size, default is maxstep/100 'Stepper' - To override the default Fehlberg integrator 'Events' - To provide an event function 'Projection' - To provide a projection function</p>
<p>The varargin is ignored by this function, but is passed to all your callbacks, i.e., f, the event function and the projection function.</p>
<p>==Event Function==</p>
<p>The event function can be used to detect situations where the integrator should stop, possibly because the right-hand-side has changed, because of a collision, etc...</p>
<p>An event function should look like</p>
<p>function [val,isterminal,direction]=event(t,y,...)</p>
<p>The return values are:</p>
<p>val - the value of the event function. isterminal - whether or not this event should cause termination of the integrator. direction - 1=upcrossings only matter, -1=downcrossings only, 0=both.</p>
<p>== Projection function ==</p>
<p>For geometric integration, you can provide a projection function which will be called after each time step. The projection function has the following signature: </p>
<pre class="fragment">function yn=project(t,yn,...);
</pre><p>If the output yn is very different from the input yn, the quality of interpolation may decrease. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="index.html">FreeMat Documentation</a></li><li class="navelem"><a class="el" href="sec_num.html">Numerical Methods</a></li>
<li class="footer">Generated on Thu Jul 25 2013 17:17:45 for FreeMat by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.1.1 </li>
</ul>
</div>
</body>
</html>
|