# 代写EEEN10036作业、代做C/C++编程设计作业、代写C++课程作业、Programming作业代写 调试Matlab程序|帮做Java程序

EEEN10036
2019-20
C Programming Mini Assignment
Please read carefully - this assignment is assessed and is worth up to 10% of
the overall course unit mark. You may choose between two versions which are
worth different percentages of the available marks: a simplified version ("A1",
worth 40%, see Appendix 1) and a full version ("A2", worth 80%, see Appendix
2). A 'skeleton' program of each version is provided on Blackboard to help you
get started. In addition there are some unseen questions based on the
assignment which must be answered at the time of the assessment. These
questions are worth 20%, thus the maximum mark available for A1 is 60%, and
the maximum available for A2 is 100%. The mark schemes are at the end of
this document.
Introduction
Kirchhoff’s current and voltage laws produce a set of linear equations for the currents
and voltages in resistor circuits. When the circuits are small, they can be solved by
hand, however for larger circuits it is more convenient to use a program. The set of
linear equations which result from Kirchhoff’s current and voltage laws can be
represented mathematically in matrix – vector1
form and there are a number of
different methods for solving them. In this assignment, you’ll investigate how to
represent a circuit as a set of linear equations in matrix–vector form and solve them
using a technique known as Jacobi iteration.
Problem Description2
A 'track' circuit (Figure 1) feeds current to a relay, and consists of ten sections. It has
a 10V supply, in which the wires to/from the supply have a resistance of 5 ohms. The
resistance of the feed wires to each section is 0.03 ohms, and the resistance across
each section is 40 ohms. The relay and its feed wires have a total resistance of 10
ohms. The problem is to determine the currents i0,i1,…i10 in the circuit.
Figure 1. 'Track' circuit.

1
A simple guide to the matrix mathematics needed for this assignment ("A2" version) is provided in Appendix 3.
2
This problem has been adapted from "detecting a train on a track":
https://learn.lboro.ac.uk/archive/olmp/olmp_resources/pages/workbooks_1_50_jan2008/Workbook30/30_5_
itrtv_mthds_systms_eqns.pdf -see p.62 for track circuit diagram.
2
Set of Linear Equations Description
Kirchhoff’s laws can be used in several ways to solve this problem, but one that
gives a simple set of linear equations is now described. Let 𝑖0, 𝑖1, … , 𝑖9
, be the current
in the successive sections and 𝑖10 the current to the relay. The current between the
first and second sections is 𝑖0 − 𝑖1 so that the voltage drop across the sections is
40(𝑖0 − 𝑖1) volts. The first equation below uses this and the voltage drop in the feed
wires. The remaining nine equations compare the voltage drop across successive
sections with the drop in the two feed wires, and the last equation compares the
voltage drop across the last section with that in the relay.
40(𝑖0 − 𝑖1) + 5.06𝑖0 = 10
40(𝑖0 − 𝑖1) = 0.06𝑖1 + 40(𝑖1 − 𝑖2)
40(𝑖1 − 𝑖2) = 0.06𝑖2 + 40(𝑖2 − 𝑖3)⋮
40(𝑖8 − 𝑖9) = 0.06𝑖9 + 40(𝑖9 − 𝑖10)
40(𝑖9 − 𝑖10) = 10𝑖10
It is convenient to rearrange and write these 11 equations as follows:
45.06𝑖0 − 40𝑖1 = 10
40𝑖0 − 80.06𝑖1 + 40𝑖2 = 0
40𝑖1 − 80.06𝑖2 + 40𝑖3 = 0⋮
40𝑖8 − 80.06𝑖9 + 40𝑖10 = 0
40𝑖9 − 50𝑖10 = 0
The coefficients can then be represented mathematically by an 11-row x 11-column
matrix A and an 11x1 column vector v:
45.06 -40 0 … … … … 0
40 -80.06 40 … … … … 0
0 40 -80.06 40 … … … 0
A = : : : : … … … … :
: : : : … … … … :
: : : : … … 40 -80.06 40
0 0 … … … … 0 40 -50
In the above, 𝑨 is the (11x11) matrix of resistance values and 𝒗 is the (11x1) column
vector where the first entry is 10 (the supply voltage) and the other entries are zero.
Each row of 𝑨 represents a section and will have, at most, 3 non-zero values. These
represent the interactions with the immediate neighbouring sections.
Vector v is produced by multiplying 𝑨 with a second column vector 𝒙 as follows:
where 𝒙 contains the unknown currents with entries 𝑖0, 𝑖1, … 𝑖10. The elements of v
are produced by multiplying each element of A with x as described in Appendix 3
(matrix-vector multiplication). Computationally, A can be represented by a 2-D array,
and v and x by 1-D arrays, where row and column numbers always start at 0.
Jacobi Method Description
The Jacobi method is a relatively simple iterative technique for solving a set of linear
equations represented in the matrix–vector form: 𝑨𝒙 = 𝒗.
With the Jacobi method we start with an initial estimate of the current vector 𝒙, and
then iteratively try and improve upon it. For the 𝑘
𝑡ℎ
iteration of the Jacobi method,
the estimates (vector 𝒙𝑘) are updated as
𝑥𝑖𝑘 =(𝑣𝑖 − ∑𝑎𝑖𝑗𝑥𝑗𝑘−1𝑛𝑗=1,𝑗≠𝑖 )/𝑎𝑖𝑖
where 𝑎𝑖𝑗 is the 𝑖,𝑗
𝑡ℎ element of the matrix 𝑨, 𝑣𝑖
is the 𝑖
𝑡ℎ element of the
vector 𝒗 and 𝑥𝑖𝑘
is the current (𝑘𝑡ℎ) estimate of the value of 𝑥𝑖. Generally, Jacobi's
method begins with a zero vector (𝑥
0 = 0) and iterates until the estimated value of
the unknown parameter vector, 𝑥𝑘, doesn't change significantly on successive
iterations. One way to measure how much the vector changes is with the following
expression:
which measures the "distance" between successive Jacobi estimates. With the
Jacobi iteration convergence can be slow, requiring several hundred steps. For this
assignment, convergence is achieved when the differences between steps is less
than or equal to a value defined as the "tolerance".
Several other explanations of the Jacobi method can be found online, for example:
https://en.wikipedia.org/wiki/Jacobi_method
Assignment Details
In this assignment you will write a C program which calculates the currents in the
circuit using the Jacobi method. There are two versions: A1 and A2 which are
detailed in Appendix 1 and 2, respectively.
For both A1 and A2, a 'skeleton' of the final program is provided to help you get
started. In each case you must follow the instructions in the comments to:
 Construct the arrays and vectors which represent the set of linear equations.
 Use the Jacobi method to determine the unknown current vector. continued..
4
 Monitor the convergence of the iterative scheme. The test for convergence
must use the expression for 𝑑
𝑘 given above in the previous section 'Jacobi
Method Description'.
 Print out the matrix A and the final values of the current vector, including the
number of iterations needed to converge upon the solution for a given
tolerance. Examples of the expected output are provided in the Appendices.
In version A2 the circuit data is read from a file called "input.txt" which has the
following format:
𝑣0, 𝑣1, … , … , … , … , … , … , … , 𝑣(𝑁−2)
, 𝑣(𝑁−1)
𝑎00, 𝑎01, … , … , … , … , … , … , 𝑎1(𝑁−2)
, 𝑎0(𝑁−1)
𝑎10, 𝑎11, … , … , … , … , … , … , 𝑎1(𝑁−2)
, 𝑎1(𝑁−1)
… , … , … , … , … , … , … , … , … , … , … , … , … , …
… , … , … , … , … , … , … , … , … , … , … , … , … , …
𝑎(𝑁−2)0, 𝑎(𝑁−2)1, … , 𝑎(𝑁−2)(𝑁−2)
, 𝑎(𝑁−2)(𝑁−1)
𝑎(𝑁−1)0, 𝑎(𝑁−1)1, … , 𝑎(𝑁−1)(𝑁−2)
, 𝑎(𝑁−1)(𝑁−1)
where each line is a comma-separated list of N values (with no spaces anywhere on
the line) such that the first line contains the voltage vector v data, and the remaining
lines are the matrix A coefficients. A function read_data_from_file() is provided in the
skeleton for reading the data. In the assignment N=11, however you will be asked to
show that your program works with different sized data.
a) The assessment will take place at the start of your 2-hour lab session in week
10 (i.e. w/c Monday 20th April 2020), and at no other time.
b) The assignment is individual and will be conducted under exam conditions.
Plagiarism or collusion will result in zero marks and the matter will be reported
c) The assessment will consist of demonstrating your solution to an examiner.
answer one or more previously unseen questions based on the assignment.
d) Important: you are expected to have completed the assignment before you
arrive. You must be able demonstrate your program when asked. You are not
permitted to use the lab time to work on the assignment.
e) This is a closed-book assessment, taken under examination conditions.
f) You must implement the program as described. If not, marks may be
deducted. See the marking scheme below.
g) The examination will take place during your usual lab session, which will have
tasks that you should aim to complete (there might also be an assessed quiz
to complete on the day).
h) There may be some waiting on the day due to the limited number of
examiners and your patience is appreciated.
5
Marking Schemes
"A1"
"A1" Version Mark
Does the program correctly calculate and print out the data
as expected? 2
Fully able to explain how the program works? 1
The program correctly implements and uses the
magnitudeVectorDiff function.
1
Total 6
"A2"
Item Mark
Does the program correctly calculate and print out the data
as expected? 3
Fully able to explain how the program works? 1
The program correctly implements and uses the
magnitudeVectorDiff function.
1
The program correctly implements and uses the
JacobiMethod function.
2
Does the program work with an alternative data set? 1
Total 10
Marks will be deducted for both "A1" and "A2" versions as follows:
Item Mark
One or more compiler warnings. 1
The appearance of the program is poor, for
example is poorly structured, or is not
indented, or has very few comments.
1
The program uses one or more global
variables other than those provided in the
'skeleton'.
1
6
Appendix 1: Version "A1"
Starting with the given set of linear equations
45.06𝑖0 − 40𝑖1 = 10
40𝑖0 − 80.06𝑖1 + 40𝑖2 = 0
40𝑖1 − 80.06𝑖2 + 40𝑖3 = 0

40𝑖8 − 80.06𝑖9 + 40𝑖10 = 0
40𝑖9 − 50𝑖10 = 0
re-write them as:
𝑖0 =1
45.06(10 + 40𝑖1), 𝑖1 =4080.06 (𝑖0 + 𝑖2)⋮
𝑖2 =40
80.06(𝑖1 + 𝑖3), 𝑖3 =40
80.06 (𝑖2 + 𝑖4)⋮ ⋮
𝑖10 =40
80.06(𝑖9 + 𝑖11), 𝑖11 =45𝑖10.
Then make an initial guess of the solution: x
(0) = (x0
(0),x1
(0),x2
(0) ,…xn
(0)). Substitute
these values into the right hand side the of the rewritten equations to obtain the first
approximation:
This accomplishes one iteration.
Similarly, the second approximation
substituting the first approximation’s values into the right hand side. By repeated
iterations, we form a sequence of approximations
k=0,1,2,..n. Two 1-D arrays can be used to store the data values of x
(k+1)
and x(k)
.
Example
Consider a simpler example with a set of 3 equations:
4x0 + 2x1 + 3x2 = 8
3x0 - 5x1 + 2x2 = -14
- 2x0 + 3x1 + 8x2 = 27
Expressing this in a form suitable for iteration, we have:
x0 = (8 – 2x1 – 3x2) / 4
x1 = (-14 – 3x0 – 2x2) / (-5)
x2 = (27 + 2x0 – 3x1) / 8
Beginning with x0 = x1 = x2 = 0 the first iteration gives
x0 = (8 – 2x0 - 3x0) / 4 = 2.0
x1 = (-14 – 3x0 - 2x0) / (-5) = 2.8
x2 = (27 + 2x0 - 3x0) / 8 = 3.375
The second iteration gives
x0 = (8 – 2x2.8 - 3x3.375) / 4 = -1.931
x1 = (-14 – 3x2.0 - 2x3.375) / (-5) = 5.350
x2 = (27 + 2x2.0 - 3x2.8) / 8 = 2.825
etc. After around 45 iterations the values settle down to x0=-1.000, x1=3.000 and
x2=2.000 (to 3 decimal places), which can be verified by substitution.
7
Finally, for the data used in the assignment, the expected output is shown below:
Appendix 2: Version "A2"
In this version everything is expressed in matrix-vector form. Recall that a set of
linear equations can be represented in matrix–vector form as 𝐀𝐱 = 𝐯. Recall that A
is an NxN matrix and x and v are Nx1 column vectors. The approach in this method
requires that A be split into a diagonal matrix D and two triangular matrices L and U.
As an example, consider the following 3x3 matrix A, where the elements arowcol are
subscripted according to their row-column position. A is split into a diagonal matrix
D, and two further matrices L ("lower") and U ("upper"):
a00 a01 A02 a00 0 0 0 0 0 0 a01 a02
A = a10 a11 a12 = 0 a11 0 + a10 0 0 + 0 0 a12
a20 a21 a22 0 0 a22 a20 a21 0 0 0 0
i.e. A = D + L + U
Next rewrite Ax = v as (D + L + U)x = v and re-arrange to give
Dxn+1 = v − (L + U)xn
-thus new values of xn+1 are generated from values xn obtained in the previous step.
By taking the inverse D
-1
of D we can write
xn+1 = −D−1
(L + U)xn + D−1
v
where D
-1
is simply the diagonal matrix of the inverse of the diagonal elements of A.
Using as an example a 3x3 matrix, this last expression is represented as follows:
x0(n+1) = 1/a00 0 0 0 a01 a02 x0(n) 1/a00 0 0 v0
x1(n+1) = – 0 1/a11 0 . a10 0 a12 . x1(n) + 0 1/a11 0 . v1
x2(n+1) = 0 0 1/a22 a20 a21 0 x2(n) 0 0 1/a22 v2
xn+1 -D
−1
(L + U) x D
−1
v
By noting that −D
−1
(L + U) and D
−1
v are constant, we can write
xn+1 = Txn + c
where T = −D
−1
(L + U) and c = D
−1
v. This is now in a convenient form for Jacobi
iteration.
8
Example: Starting with
4 2 3 x0 8
3 -5 2 . x1 = -14
-2 3 8 x2 27
i.e. A . x = v
Splitting A into D, L and U and taking the inverse of D:
x0(n+1) = 1/4 0 0 0 2 3 x0(n) 1/4 0 0 8
x1(n+1) = – 0 -1/5 0 . 3 0 2 . x1(n) + 0 -1/5 0 . -14
x2(n+1) = 0 0 1/8 -2 3 0 x2(n) 0 0 1/8 27
xn+1 = -D
−1
(L + U) x + D
−1
v
After obtaining T and c and ~80 iterations, we find that x = -1.000
3.000
Finally, for the data used in the assignment, 2.000
the expected output is shown below:
9
Appendix 3 A simple guide to matrix maths.
The mathematical operations involving matrices are straightforward, and examples
of matrix-vector and matrix-matrix multiplication are shown below. If you prefer a
video explanation, there are plenty of examples online, for example Khan Academy.
In a matrix, data is organised into n rows by m columns (in this assignment n=m). It
is natural to represent a matrix in a program by a 2-D array, and process the data
with a pair of nested for-loops.
(i) Matrix-vector multiplication: this is accomplished by multiplying each
element of each row of a matrix A with the corresponding element in a
column vector x; this produces a new vector:
produce a new matrix. Consider the addition of two matrices A and B:
𝒂𝟎𝟎 𝒂𝟎𝟏 𝒂𝟎𝟐
𝒂𝟏𝟎 𝒂𝟏𝟏 𝒂𝟏𝟐
𝒂𝟐𝟎 𝒂𝟐𝟏 𝒂𝟐𝟐
+
𝒃𝟎𝟎 𝒃𝟎𝟏 𝒃𝟎𝟐
𝒃𝟏𝟎 𝒃𝟏𝟏 𝒃𝟏𝟐
𝒃𝟐𝟎 𝒃𝟐𝟏 𝒃𝟐𝟐
=
𝒂𝟎𝟎 + 𝒃𝟎𝟎 𝒂𝟎𝟏 + 𝒃𝟎𝟏 𝒂𝟎𝟐 + 𝒃𝟎𝟐
𝒂𝟏𝟎 + 𝒃𝟏𝟎 𝒂𝟏𝟏 + 𝒃𝟏𝟏 𝒂𝟏𝟐 + 𝒃𝟏𝟐
𝒂𝟐𝟎 + 𝒃𝟐𝟎 𝒂𝟐𝟏 + 𝒃𝟐𝟏 𝒂𝟐𝟐 + 𝒃𝟐𝟐
Example:
(iii) Matrix-matrix multiplication: this operation is similar to (i), if one views B
as a collection of column vectors. Consider multiplying A and B
-as shown below, this produces a new matrix:
𝒂𝟎𝟎 𝒂𝟎𝟏 𝒂𝟎𝟐
𝒂𝟏𝟎 𝒂𝟏𝟏 𝒂𝟏𝟐
𝒂𝟐𝟎 𝒂𝟐𝟏 𝒂𝟐𝟐
.
𝒃𝟎𝟎 𝒃𝟎𝟏 𝒃𝟎𝟐
𝒃𝟏𝟎 𝒃𝟏𝟏 𝒃𝟏𝟐
𝒃𝟐𝟎 𝒃𝟐𝟏 𝒃𝟐𝟐
=
𝒂𝟎𝟎𝒃𝟎𝟎 + 𝒂𝟎𝟏𝒃𝟏𝟎 + 𝒂𝟎𝟐𝒃𝟐𝟎 𝒂𝟎𝟎𝒃𝟎𝟏 + 𝒂𝟎𝟏𝒃𝟏𝟏 + 𝒂𝟎𝟐𝒃𝟐𝟏 𝒂𝟎𝟎𝒃𝟎𝟐 + 𝒂𝟎𝟏𝒃𝟏𝟐 + 𝒂𝟎𝟐𝒃𝟐𝟐
𝒂𝟏𝟎𝒃𝟎𝟎 + 𝒂𝟏𝟏𝒃𝟏𝟎 + 𝒂𝟏𝟐𝒃𝟐𝟎 𝒂𝟏𝟎𝒃𝟎𝟏 + 𝒂𝟏𝟏𝒃𝟏𝟏 + 𝒂𝟏𝟐𝒃𝟐𝟏 𝒂𝟏𝟎𝒃𝟎𝟐 + 𝒂𝟏𝟏𝒃𝟏𝟐 + 𝒂𝟏𝟐𝒃𝟐𝟐
𝒂𝟐𝟎𝒃𝟎𝟎 + 𝒂𝟐𝟏𝒃𝟏𝟎 + 𝒂𝟐𝟐𝒃𝟐𝟎 𝒂𝟐𝟎𝒃𝟎𝟏 + 𝒂𝟐𝟏𝒃𝟏𝟏 + 𝒂𝟐𝟐𝒃𝟐𝟏 𝒂𝟐𝟎𝒃𝟎𝟐 + 𝒂𝟐𝟏𝒃𝟏𝟐 + 𝒂𝟐𝟐𝒃𝟐𝟐
Example:
4 2 3 1 -3 3 17 4 8
3 -5 2 . 2 5 1 = -1 -30 0
-2 3 8 3 2 -2 28 37 -19
End