## Description

1. Project description

The integral

Z b

a

f(x) dx (1)

can be (crudely) estimated by approximating the area under the graph of f(x) by a trapezoid. In

other words, by approximating the integrand f via the affine function

g(x) = f(b) − f(a)

b − a

x +

f(a)b − f(b)a

b − a

whose graph passes through points (a, f(a)) and (b, f(b)). This procedure gives us the (crude)

approximation

Z b

a

f(x) dx ≈

Z b

a

g(x) dx = pf(a) + f(b)q

b − a

2

.

We now suppose that n > 1 is an integer, and let {x0, x1, x2, . . . , xn} be the sequence of (n + 1)

points defined by

xj = a +

b − a

n

· j.

If we decompose the integral (1) as

Z b

a

f(x) dx =

nX−1

j=0

Z xj+1

xj

f(x) dx (2)

and use the preceding approximation to estimate each of the integrals in (2), then we obtain the

estimate

Z b

a

f(x) dx =

nX−1

j=0

Z xj+1

xj

f(x) dx

≈

nX−1

j=0

pf(xj ) + f(xj+1)q

b − a

2n

= pf(x0) + 2f(x1) + 2f(x2) + · · · + 2f(xn−1) + f(xn)q ·

b − a

2n

.

(3)

We call (3) the (n+1)-point trapezoidal quadrature rule on the interval [a, b]. The points x0, x1, . . . , xn

are called the nodes of the (n+ 1)-point trapezoidal rule on [a, b], and the quantities w0, w1, . . . , wn

defined by

wj =

b − a

2n

λj ,

1

where

λj =

(

1 if j = 0, n

2 otherwise,

are called the weights of the (n + 1)-point trapezoidal rule. Note that using this notation, (3) can

be rewritten as

Z b

a

f(x) dx ≈

Xn

j=0

f(xj )wj . (4)

Project one consists of writing a function called “traprule” which calculates the (n + 1)-point

trapezoidal rule. More specifically, your routine will take as input an integer n > 0 and double

precision numbers a < b. It will return the nodes x0, x1, . . . , xn and weights w0, w1, . . . , wn of the
(n + 1)-point trapezoidal routine in user-supplied arrays. The file “traprule.c” gives the calling
syntax for the “traprule” function. Your task is to implement the function as described there.
2. Testing and grading
A public test code is given in the file “traptest1.c”. Another test code, called “traptest2.c”, will be
used to test your function as well. Half of the project grade will come from the first test file, and
the second half will come from the second.
The commands
gcc -o traptest1 traprule.c traptest1.c -lm
./traptest1
can be used to compiler and execute your program. The first command compiles your program and
creates an executable file named “traptest1”. The “-lm” option tells the compiler to include the
math library which implements cosine, sine and other basic functions. The second command runs
the traptest1 executable. There are five tests of your function in traptest1, and the program will
tell your score out of 5. We will also test your code by compiling against “traptest2.c”, which we
will not release until after the projects are due.
More explicitly, we will grade your project by running the sequence of command
gcc -o traptest1 traprule.c traptest1.c -lm
./traptest1
gcc -o traptest1 traprule.c traptest2.c -lm
./traptest2
You will get a 0 on your project if it does not compile and run. Please start work on your project
early and come see either myself or our TA, Karry Wong, if you are having difficulties getting it
to compile.
Submitting your project:
You will submit your project using canvas. You should submit only your “traprule.c” file. You
must submit your file by 11:59 PM on the due data. Late assignments will not be accepted.
2