  # Résolution de problèmes algorithmiques

## Get Started

python3 -m venv venv
. venv/bin/activate  # Load a virtualenv (optional)


But if you don’t need a virtualenv, you can directly do:

pip install sympy
python
>>> from sympy import Symbol, log, exp, pprint
>>> u = sympy.Symbol('u')
>>> v = sympy.Symbol('v')
>>> x = sympy.Symbol('x')
>>> f = x * v * u - log(1 + exp(v * u))
>>> f.diff(u)  # df/du
v*x - v*exp(u*v)/(exp(u*v) + 1)
>>> pprint(f.diff(u))
u⋅v
v⋅ℯ
v⋅x - ────────
u⋅v
ℯ    + 1
>>> pprint(f.diff(u).diff(u))  # d2f/du2
2  u⋅v      2  2⋅u⋅v
v ⋅ℯ        v ⋅ℯ
- ──────── + ───────────
u⋅v                 2
ℯ    + 1   ⎛ u⋅v    ⎞
⎝ℯ    + 1⎠


So if $f = xv^T u - \log(1 + \exp(v^T u))$,

(Yes. We cheated.)

## Symbolic computation Differences between SymPy and SageMath on sympy’s wiki

## SymPy

Try SymPy in your browser (live shell on every page, wow!).

pip install sympy


### SymPy vs. SageMath

SymPy can do better symbolic differentiation than SageMath (ex. derivatives by array). It has symbolic matrices, unlike SageMath. But SageMath has many more libraries, and may be better at factoring expressions, I guess.

### The Matrix Cookbook

What none of these libraries cannot do though, is symbolic matrix differentiation. But it is an ongoing issue on their GitHub.

It made me learn the existence of The Matrix Cookbook, which is a great reference!!

## SageMath

Try it on CoCalc (formerly SageMathCloud).