Is there more information available on solving Ordinary Differential Equations in MATLAB?

2 次查看(过去 30 天)
For example, how do I reduce the order of a differential equation? Are there more examples of how to solve differential equations in MATLAB? What options can I specify when using the ODE solvers?

采纳的回答

MathWorks Support Team
There is a Technical Note on our web site answering these questions and more.
Specifically, Section 4 of the attached Tech Note 1510 describes how to reduce the order of a Differential Equation in detail.
Another example is shown below.
ODE Reduction Example
***************************
Ths is an example of how to reduce a second-order differential equation into two first-order equations.
This is acheived through:
1. Introducing a new variable that is equal to the first derivative of the free variable in the second-order equation. In the case below, (z = y'). This introduces a new differential equation (y' = z).
2. To finish the reduction, notice that taking the derivatives of both sides of ( y' = z ) gives ( y'' = z' ).
3. Next, substitute z' for y'' in your second-order equation, and now you have a first-order equation.
As an example, start with the differential equations
x' = -y * exp(-t/5) + y' * exp(-t/5) + 1
and
y'' = -2*sin(t)
To reduce the order of the second equation, let z = y'. This implies that z' = y'', and that y' = z. Making this substitution for y'' in the second equation gives
x' = -y * exp(-t/5) + y' * exp(-t/5) + 1
and
z' = -2*sin(t)
Combine this with y' = z, and you have three first-order differential equations.
x' = -y * exp(-t/5) + y' * exp(-t/5) + 1
y' = z
and
z' = -2*sin(t)
MATLAB wants all the derivatives to be on the left hand side of the equations. For this example, this can be done by substituting z for y' in the first equation. This gives
x' = -y * exp(-t/5) + z * exp(-t/5) + 1
y' = z
and
z' = -2*sin(t)
MATLAB uses one vector as the variable list. Let x(1) = x, x(2) = y and x(3) = z. MATLAB also wants a function that has one return argument that is the derivative of the second input, i.e.,
xprime = fun( x, t )
The MATLAB code for this function would be
function xprime = fun(t, x)
xprime = [ -x(2) * exp(-t/5) + x(3) * exp(-t/5) + 1;
x(3);
-2*sin(t)];
To run this in MATLAB, save the above code in a file called odetest.m. Then, refer to this function as the first input argument to the ODE23 function using the command:
[t,x] = ode23(@odetest,[t0 tf],x0);
The variable "t0" is the start time, "tf" is the stop time (solve the diff_eq from "t0" to "tf"), "x0" is the initial condition of the state vector "x" at time "t0".
x0(1) = x at t0, x0(2) = y at t0 and x0(3) = z at t0
To run this, use the MATLAB commands:
x0 = [1 -1 3];
t0 = 5;
tf = 20;
[t, x] = ode23(@odetest, [t0 tf], x0);
To look at the data use
plot(t, x)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by