Documentation

Solve Algebraic and Differential Equations

This example shows how to solve algebraic and differential equations using Symbolic Math Toolbox™.

Solving Algebraic Equations

The solve function can handle a wide variety of algebraic equations, including both single equations and systems of equations. By default, the solver always tries to return a complete set of solutions, including complex solutions, if there are only finitely many. For example, the following polynomial has two real and two complex solutions.

syms x
xsol = solve(x^4 + x^3 - x == 1, x)
 
xsol =
 
                     -1
                      1
 - (3^(1/2)*1i)/2 - 1/2
   (3^(1/2)*1i)/2 - 1/2
 

Use indexing to select only the real solutions.

xsol(xsol == real(xsol))
 
ans =
 
 -1
  1
 

Some equations, such as those that include trigonometric elements, have an infinite number of solutions. For such equations, the solver returns only one solution from the infinite set.

solve(sin(x) == 1, x)
 
ans =
 
pi/2
 

Solving Systems of Algebraic Equations

The solve function can also be used to solve systems of equations. Simply specify the system of equations and the variables to solve for.

syms x y
[x2, y2] = solve(y + x^2 == 1, x - y == 10)
 
x2 =
 
 - (3*5^(1/2))/2 - 1/2
   (3*5^(1/2))/2 - 1/2
 
 
y2 =
 
 - (3*5^(1/2))/2 - 21/2
   (3*5^(1/2))/2 - 21/2
 

As with an individual equation, if a system has an infinite number of solutions, the solver returns only one solution.

[x3, y3] = solve(exp(x + y) == 1, x - y == 1)
 
x3 =
 
1/2
 
 
y3 =
 
-1/2
 

In some cases, you can express the system of equations in a matrix form. For these cases, you can use the backslash operator of MATLAB® to solve the equations. Note that the result is a double precision number since the equations are solved numerically.

A = [1 2; 3 4];
b = [5 6]';
x = A\b
x =

   -4.0000
    4.5000

You can use the 'sym' command to solve the system exactly.

sym(A)\b
 
ans =
 
  -4
 9/2
 

Solving Ordinary Differential Equations (ODEs)

You can solve various types of ordinary differential equations using the dsolve function. For example, solve the following second order linear ODE.

syms y(t)
D2y = diff(y,2);
Dy = diff(y);
dsolve(D2y + Dy + y == 0)
 
ans =
 
C5*exp(-t/2)*cos((3^(1/2)*t)/2) + C6*exp(-t/2)*sin((3^(1/2)*t)/2)
 

You can specify initial conditions or boundary conditions along with an ODE.

ysol = dsolve(D2y == 2*t/Dy, y(0) == 0, Dy(0) == 1)
 
ysol =
 
(2^(1/2)*log(t + (t^2 + 1/2)^(1/2)))/4 - (2^(1/2)*log(2^(1/2)/2))/4 + (2^(1/2)*t*(t^2 + 1/2)^(1/2))/2
 

You can visualize the solution to your differential equation using the ezplot function.

ezplot(ysol)

Copyright 2009-2014 The MathWorks, Inc.

Was this topic helpful?