Basically, I want to attend Bachelor’s Physics programme and am going to study a lot of mathematics as a part of it, in particular, the following areas:

• linear algebra and analytical geometry
• calculus and differential equations
• functional analysis
• differential geometry

I already passed SAT Subject examinations in Mathematics Levels I and II with high results (790 and 800 respectively) – the first exam covers basic algebra, logarithms, plane geometry, combinatorics, elements of statistics and probability, and the second one covers basic algebra, logarithms, solid geometry, trigonometry, calculus and sometimes vectors, matrixes and imaginary numbers. Each exam is taken on a paper with 50 tasks for 1 hour.
I liked the process – from both the points of view of solving tasks, even though I do not consider them to be a complete evaluation of one’s mathematical level, and being in a motivating environment, but I would like to train myself more – by studying books like Fihtengolc in calculus, trying to prove everything I see, and by solving complicated problems.

Besides, I have my own mathematical tool functioning like an advanced calculator, to help me in the latter sometimes (but I like symbolic calculations on paper more actually), and I am going to describe it below.
It is written in C and operating with it is a bit reminiscent to using scientific calculators (like Ti-86, frequently used in SAT).
slv (“mathematical solver”) supports the following:

• complicated expressions (with a support of parentheses and priority levels)
• variables storing intermediate values
• history of commands
• cached results of previous operations
• built-in differentiation and integration of the given functions
• different numeral systems
• (in general) parsing of user-defined functions and calculating them for the given values.
In particular, there are built-in integration and differentiation operations for the given functions.

The algorithm of the program is basically as follows:

• read another command (in infix form)
• translate it to the postfix form (in order to be able to perform stack calculations)
• perform typical stack calculations (if no user-defined functions are presented)
or
• perform eval stack calculations, based on C-function pointers to C-functions implementing elementary functions on which the user-defined functions are built (if there is a user-defined function)

Here are examples of calculating $\int_0^\pi (\sin(x) + \cos(x)) \mathrm{d}x$ and $(e^x - 2\sin(2x))'(\frac{\pi}{4})$:

and manipulations with variables:

As a conclusion, this calculator already allows for some complicated operations, although:

• I will add equation solving and big numbers support
• I consider its writing mostly as an exercise in programming and numerical methods which aim to replace symbolic calculations with more generic but less precise ones