Assignment#
Access to the software and download of the assignment#
For this week, the assignment will be essentially empty. Using the git repository will mainly be a convenient way for you to save and transfer your work, and for us to review it.
Instructions#
All non-trivial code must be in the moncode.py file. If it becomes too long, you can create other files, mentioning them in the mentioning them in the report.
Any function must:
be documented
the documentation must include examples and a quick estimate of the algorithmic complexity of the function;be tested
see the example provided for how to write the tests as doctests;use wherever possible annotations of type.
You should have checked your code with static analysers such as
pyflakes
or mypy
.
In addition, you must keep a concise report up to date along the way.
Getting started#
See the files moncode.py and the report skeleton in the README.md.
Import the objects defined in moncode.py
and reload them
automatically when changes are made:
%load_ext autoreload
%autoreload 2
from moncode import *
Use:
response("As-tu faim")
Consultation of the documentation:
response?
Static checks:
!pyflakes moncode.py
!mypy moncode.py
Launching the tests:
!sage -t moncode.py
Indications#
To use Sage objects in moncode.py
, e.g. for type annotations, you
need to import them:
from sage.all import matrix, GF # type:ignore
Gauß elimination#
Implement Gauß’s algorithm for computing the row echelon form of a matrix with coefficients in a field:
def reduced_echelon_form(m: matrix) -> matrix:
"""
Returns the matrix `m` put in step form
“""
What is the complexity of your implementation?
Note
Here and in latter complexity analyses, state explicitly your computation model: how do you measure the size of the input? What are the elementary operations? Justify your analysis.
Membership testing for a vector subspace#
Let V=(v_i)_i
be a list of vectors. We wish to determine whether a
vector w
is in the vector subspace generated by (v_i)_i
.
Implement a function:
def subspace_membership(V, w):
"""
Test whether `w` is generated by the vectors in `V`.
"""
You will use the reduced_echelon_form
function.
Would it be enough to have a matrix in echelon form?
What is the complexity of your implementation?
Computation of a base of the sum of two vector subspaces#
Let \(U\) and \(V\) be two subspaces of some finite dimensional vector space \(W\), each given by a basis expressed in the canonical basis of \(W\). Implement an algorithm that computes a basis of the sum \(U+V\) of these two subspaces.
What is the complexity of your implementation?