Submission deadline: 15:00 Friday 20 December 2024
This coursework contributes 10% towards your mark for this module.
Rules
It is not permitted to use generative artificial intelligence (AI) software for this coursework. Ensure that
you have read and have understood the Policy on academic misconduct. One of the things stated in
this policy is that “The submission of work that is generated and/or improved by software that is not
permitted for that assessment, for the purpose of gaining marks will be regarded as false authorship
and seen as an attempt to gain an unpermitted academic advantage”.
This coursework should be your own individual work, with the exceptions that:
1. You may ask for and receive help from the lecturer Richard Rankin although not all questions will be
answered and those that are will be answered to all students that attend the class.
2. You may copy from material provided on the Moodle pages:
• Introduction to Scientific Computation (MATH2033 UNNC) (FCH1 24-25)
• Analytical and Computational Foundations (MATH1028 UNNC) (FCH1 23-24)
• Calculus (MATH1027 UNNC) (FCH1 23-24)
• Linear Mathematics (MATH1030 UNNC) (FCH1 23-24)
Coding Environment
You should write and submit a py file. You are strongly encouraged to use the Spyder IDE (integrated
development environment). You should not write or submit an ipynb file and so you should not use
Jupyter Notebook.
It will be assumed that numpy is imported as np, and that matplotlib.pyplot is imported as plt.
Submission Procedure:
To submit, upload your linear systems.py file through the Coursework 2 assignment activity in the
Coursework 2 section of the Moodle page Introduction to Scientific Computation (MATH2033 UNNC)
(FCH1 24-25).
Marking
Your linear systems.py file will be mainly marked by running your functions with certain inputs and comparing
the output with the correct output.
Department of Mathematical Sciences Page 1 of 51. The linear systems.py file contains an unfinished function with the following first line:
def smax (w ,s , i ) :
Assume that:
• The type of the input w is numpy.ndarray.
• The type of the input s is numpy.ndarray.
• The type of the input i is int.
• There exists an int n such that the shape of w is (n,) and the shape of s is (n,).
• The input i is a nonnegative integer that is less than n.
Complete the function smax so that it returns an int p which is the smallest integer for which
i ≤ p < n
and
|w[p]|
s[p]
= max
j∈{i,i+1,...,n−1}
|w[j]|
s[j]
.
A test that you can perform on your function smax is to run the Question 1 cell of the tests.py file
and check that what is printed is:
1
[20 marks]
Coursework 2 Page 2 of 52. Suppose that A ∈ R
n×n, that det(A) 6= 0 and that b ∈ R
n.
The linear systems.py file contains an unfinished function with the following first line:
def spp (A ,b , c ) :
Assume that:
• The type of the input A is numpy.ndarray.
• The type of the input b is numpy.ndarray.
• The type of the input c is int.
• There exists an int n such that n > 1, the shape of A is (n,n) and the shape of b is (n,1).
• The input A represents A.
• The input b represents b.
• The input c is a positive integer that is less than n.
Complete the function spp so that it returns a tuple (U, v) where:
• U is a numpy.ndarray with shape (n,n) that represents the matrix comprised of the first n
columns of the matrix arrived at by performing forward elimination with scaled partial pivoting
on the matrix
A b
until all of the entries below the main diagonal in the first c columns are
0.
• v is a numpy.ndarray with shape (n,1) that represents the last column of the matrix arrived at
by performing forward elimination with scaled partial pivoting on the matrix
A b
until all of
the entries below the main diagonal in the first c columns are 0.
A test that you can perform on your function spp is to run the Question 2 cell of the tests.py file
and check that what is printed is:
[[ 10. 0. 20.]
[ 0. -5. -1.]
[ 0. 10. -11.]]
[[ 70.]
[ -13.]
[ -13.]]
[30 marks]
Coursework 2 Page 3 of 53. Suppose that A ∈ R
n×n, that det(A) 6= 0, that all of the entries on the main diagonal of A are
nonzero and that b ∈ R
n. Let x ∈ R
n be the solution to Ax = b. Let x
(k) be the approximation
to x obtained after performing k iterations of the Gauss–Seidel method starting with the initial
approximation x
(0)
.
The linear systems.py file contains an unfinished function with the following first line:
def GS (A ,b ,g ,t , N ) :
Assume that:
• The type of the input A is numpy.ndarray.
• The type of the input b is numpy.ndarray.
• The type of the input g is numpy.ndarray.
• The type of the input t is numpy.float64, float or int.
• The type of the input N is int.
• There exists an int n such that the shape of A is (n,n), the shape of b is (n,1) and the shape
of g is (n,1).
• The input A represents A.
• The input b represents b.
• The input g represents x
(0)
.
• The input t is a real number.
• The input N is a nonnegative integer.
Complete the function GS so that it returns a tuple (y, r) where:
• y is a numpy.ndarray with shape (n, M + 1) which is such that, for j = 0, 1, . . . , n − 1,
y[j, k] =x
(k)
j+1 for k = 0, 1, . . . , M where M is the smallest nonnegative integer less than N for
which
is less than t if such an integer M exists and M = N otherwise.
• r is a bool which is such that r = True if
is less than t and r = False otherwise.
A test that you can perform on your function GS is to run the Question 3 cell of the tests.py file and
check that what is printed is:
[[ 0. 12. 12.75 ]
[ 0. 3. 3.9375 ]
[ 0. 6.75 6.984375]]
False
[25 marks]
Coursework 2 Page 4 of 54. Suppose that A ∈ R
n×n, that det(A) 6= 0, that all of the entries on the main diagonal of A are
nonzero and that b ∈ R
n. Let x ∈ R
n be the solution to Ax = b. Let x
(k) be the approximation
to x obtained after performing k iterations of the Gauss–Seidel method starting with the initial
approximation x
(0)
.
The linear systems.py file contains an unfinished function with the following first line:
def GS_plot (A ,b ,g ,x , N ) :
Assume that:
• The type of the input A is numpy.ndarray.
• The type of the input b is numpy.ndarray.
• The type of the input g is numpy.ndarray.
• The type of the input x is numpy.ndarray.
• The type of the input N is int.
• There exists an int n such that the shape of A is (n,n), the shape of b is (n,1), the shape of g
is (n,1) and the shape of x is (n,1).
• The input A represents A.
• The input b represents b.
• The input g represents x
(0)
.
• The input x represents x.
• The input N is a nonnegative integer.
Complete the function GS plot so that it returns a matplotlib.figure.Figure, with an appropriate
legend and a single pair of appropriately labelled axes, on which there is a semilogy plot
of:
A test that you can perform on your function GS plot is to run the Question 4 cell of the tests.py
file.
[25 marks]
Coursework 2 Page 5 of 5