Homework 01 - Solving univariate polynomial equation

Task

Solve the problems in hw01.pdf:

  1. Solve tasks 1, 2 and 3.a in hand.
  2. Implement the general root finding function for a univariate polynomial via companion matrices.
  3. Solve tasks 3.b and 4 using the function implemented in 2. In task 4 find the roots of the polynomial specified for you in Brute. The given polynomials have integer roots and we want you to upload them as integers, including multiplicities.
Allowed libraries: numpy

Forbidden methods/classes: numpy.roots, numpy.polynomial, numpy.poly1d

You are not allowed to use other libraries than the ones indicated in the list Allowed libraries.

Create a general function roots(coeffs) which takes the coefficients of a univariate polynomial and returns its (complex) roots.

Input/Output specifications for roots(coeffs: numpy.ndarray) → numpy.ndarray:

  1. coeffs : 1-dimensional numpy.ndarray that defines the polynomial coefficients starting from the highest degree term.
  2. Return value : 1-dimensional numpy.ndarray containing the roots of the given polynomial.

Implement the solution in a single file hw01.py. The file must contain the roots function, such that it can be imported (by the automatic evaluation) as

import hw01
import numpy as np
coeffs = np.array([1, 2, 3])
res = hw01.roots(coeffs)

Upload

Upload a zip archive hw01.zip (via the course ware) containing:

  1. hw01.json - json file containing the answers to tasks 1, 2, 3.b and 4 (see below for the description of how to create it)
  2. hw01.py - python script containing the implemented function roots
  3. hw01.pdf - pdf file containing the solution to tasks 1, 2, 3.a together with the companion matrices for tasks 3.b and 4 (LaTex, photos, scans, …).
All the files must be contained in the root of hw01.zip.

Creating hw01.json:

Create an empty dictionary in Python:

solution = {}

The keys for this dictionary are “task1”, “task2”, “task3” (for task 3.b) and “task4”.

The value for the key “task1” is a list of coefficients of the product polynomial starting from the term of the highest degree, i.e. for the product polynomial 2*x^4 + 5*x^3 + 3*x^2 + 1 do

solution["task1"] = [2, 5, 3, 0, 1]

The value for the key “task2” is a list of lists of coefficients of the quotient polynomial and the remainder, respectively, starting from the term of the highest degree, i.e. for the quotient polynomial 2*x^3 + 1 and the remainder x + 2 do

solution["task2"] = [[2, 0, 0, 1], [1, 2]]

The value for the key “task3” is a list of roots to the polynomial from task 3.b (including multiplicities), i.e. for the sequence of integer roots 1, 1, 2, 3 do

solution["task3"] = [1, 1, 2, 3]

The value for the key “task4” is created in the same way as for the key “task3”.

Finally, save solution to hw01.json:

import json
with open("hw01.json", "w") as outfile:
    json.dump(solution, outfile)

courses/pkr/labs/hw01.txt · Last modified: 2024/10/07 14:40 by zorinkat