An example problem from the textbook Physics for Scientists and Engineers by Serway and Jewett:
Let's solve this using Symbolism, a C# library for computer algebra and symbolic computation.
We'll call A the initial location. C is the final location. B is the location after half the time has elapsed.
sAC is the distance between A and C.
var sAC = new Symbol("sAC");Let's also define sAB:
var sAB = new Symbol("sAB");vA is the velocity at A.
var vA = new Symbol("vA");Let's also define vB and vC:
var vB = new Symbol("vB");
var vC = new Symbol("vC");a is acceleration:
var a = new Symbol("a");Time between A and C:
var tAC = new Symbol("tAC");And tAB:
var tAB = new Symbol("tAB");Two basic equations for kinematics are:
v == u + a * t
s == (u + v) * t / 2Where
s is displacement
u is initial velocity
v is final velocity
a is acceleration
t is time elapsedLet's define a function Kinematic to return those equations populated with particular symbols:
static List<Equation> Kinematic(Symbol s, Symbol u, Symbol v, Symbol a, Symbol t)
{
return new List<Equation>()
{
v == u + a * t,
s == (u + v) * t / 2
};
}Our set of equations for this problem includes the kinematic equations for the time between A and C as well as the equations for the time between A and B. We'll also add one to relate tAB and tAC. Let's build up this list of equations in an And expression. This is a way of saying "all these equations are true".
var eqs = new And(tAB == tAC / 2);
eqs.args.AddRange(Kinematic(sAC, vA, vC, a, tAC));
eqs.args.AddRange(Kinematic(sAB, vA, vB, a, tAB));The known variables are the initial velocity, final velocity, and time elapsed between A and C:
var vals = new List<Equation>() { vA == 10, vC == 30, tAC == 10 };Part a of the problem asks for the acceleration. We'd like the answer in terms of quantities that we know (vals) so let's eliminate the unknown quantities, isolate a and display the result:
eqs
.EliminateVariables(tAB, sAC, vB, sAB)
.IsolateVariable(a)
.Disp()The result as shown on the console:
Let's take that symbolic result and substitute the known numeric values:
eqs
.EliminateVariables(tAB, sAC, vB, sAB)
.IsolateVariable(a)
.SubstituteEqLs(vals)
.Disp();Console output:
Now we want to know sAB, so let's not eliminate that symbol. We successfully solved for a so we can eliminate that:
eqs
.EliminateVariables(vB, a, tAB, sAC)
.Disp()Console output:
The numeric solution:
eqs
.EliminateVariables(vB, a, tAB, sAC)
.SubstituteEqLs(vals)
.Disp();Console output:
This example is used in one of the unit tests for Symbolism.




