AUTHOR: Timothy Clemans, [email protected]

Support for elementary mathematics in SAGE is currently very limited. I have done little bit of work on supporting equations for Python. I want to create a pure Python library of classes around expressions and equations. This way it could be included in SAGE, [http://code.google.com/p/sympy/ Sympy], and a standalone web server package just for elementary mathematics education.

The lead implementer of basic symbolic computation in SAGE is Bobby Moretti. He will be giving a short [http://sage.math.washington.edu/home/moretti/days3/talks/calculus.pdf talk] on work in this area at SAGE Days 3. Neither SAGE nor Sympy support equations.

I started trying to support equations in SAGE using strings. That is a very bad idea and string input should be parsed at the interface level. Personally I think a Python Elementary Algebra package should be composed of several hundred classes. Examples of these classes could be variable, independent variable, dependent variable, coefficient, term, expression, equation, linear equation, equation_of_line, equation_of_line_in_slope_intercept_form, or quadratic equation class.

For example lets say you have the following system of linear equations that you want to solve using elimination:

• (equation1) 2*x + 3*y = 1
• (equation2) -x + y = -3

```class line_equation_in_general_form(object):
def __init__(self,A,B,C):
self.A = A
self.B = B
self.C = C

def __str__(self):
return '%dx + %dy == %d' % (self.A,self.B,self.C)

__repr__ = __str__

return self.__class__(self.A+other.A,self.B+other.B,self.C+other.C)

def __mul__(self,n):
return self.__class__(self.A*n,self.B*n,self.C*n)```

```equation1 = line_equation_in_general_form(2,3,1)
equation2 = line_equation_in_general_form(-1,1,-3)
equation1 + equation2*2```

0x + 5y == -5

Another example is about building terms, which could lead to expressions and in turn equations.

```class Term(object):
def __init__(self,coefficient,variable_degree_dictionary):
self.coefficient = coefficient
self.vdd_input = variable_degree_dictionary
self.variable_degree_pairs = []
for each_variable_key in sorted(self.vdd_input):
if self.vdd_input[each_variable_key] != 0:
self.variable_degree_pairs.append((each_variable_key,self.vdd_input[each_variable_key]))

def __str__(self):
string = str(self.coefficient)
for i in range(len(self.variable_degree_pairs)):
if self.variable_degree_pairs[i][1] == 1:
string += '*%s' % (str(self.variable_degree_pairs[i][0]))
else:
string += '*%s**%s' % (str(self.variable_degree_pairs[i][0]),str(self.variable_degree_pairs[i][1]))
return string

__repr__ = __str__

if self.variable_degree_pairs == other.variable_degree_pairs:
if type(self.coefficient) == int or type(self.coefficient) == float:
if type(other.coefficient) == int or type(other.coefficient) == float:
return Term(self.coefficient + other.coefficient,self.vdd_input)```

`term1 = Term(3,{'y':3,'x':1}); term1`

3*x*y**3

`term2 = Term(7,{'x':1,'y':3}); term2`

7*x*y**3

`term1 + term2`

10*x*y**3

So I'm trying to build a Python elementary mathematics package not a SAGE package. I will probably look at supporting classification of numbers by natural, integer, rational, real, and complex in a subset setup allowing the teacher to restrict her students by grade level.