**General instructions for writing programs**

** **As part of your assignments in this course you will often be
required to write computer programs to solve a class of particular
problems. Here are some general instructions on what I expect for
these parts of the assignments.

Such programs must be written in either C or FORTRAN since we will be using IMSL routines in one of these languages (see IMSL sheet).

When you hand in the assignment, it must contain:

- a copy of each computer program used;

- a copy of the output(s) of each of the programs;

- additional written comments as necessary to interpret the output or explain the program.

The **algorithm to solve the given problem** must be written as a
separate subprogram which is called from a main program. All **input
**and **output** should be done in the main program or in a
separate subprogram designed for this purpose. If several different
cases are calculated for the same program, the output should be
**formatted** for easy comparison of the various results. Codes
should be written in a general form, i.e. for N dimensions rather
than 2 or 3 dimensions.

All calculations using real numbers must be done in double
precision. In FORTRAN this means using REAL*8 numbers; you may use
an IMPLICIT to make this the default. For most C compilers this is
the default for real numbers. All constants such as ? must also be
given to this accuracy. For example, an easy way to get ? to the
required number of digits is to calculate 4 tan^{-1}(1) using
the correct type of arithmetic. Make sure that all your input is
accurate as well. Thus if you are required to divide an interval (a,
b) into N subintervals of length H do not input H itself but rather N
and calculate

H = (b - a)/N. In programs which implement an iterative procedure always put an upper limit on the number of possible iterations to prevent the program from running indefinitely. Also do not store the iterates. Keep only the last one or two at each step.

**All programs must be thoroughly documented by adding comment
lines in the program itself.** Explain what each step of the
program is designed to do, define all variables used and refer to the
particular algorithm which is the basis for the program if it is not
obvious. If you are simply coding a given algorithm (from Burden and
Faires, for example) you do not have to define the variables in the
subprogram provided the same notation is used as in the algorithm.
However, all variables in the main program must be defined in comment
statements.

BR>

In general, I expect some **analysis** of the output. For
example, if the algorithm has one or more parameters which are to be
chosen (e.g. step size, degree of polynomial, number of terms,
starting values) then the problem should be solved for several sets
of these parameters. This means you have to choose values which will
highlight the dependence of the algorithm on the parameters and
demonstrate the behaviour of the error. Having obtained the results
you must add (written) comments analyzing the error by comparing to
known solutions or using the known dependence of the parameters.
Finally you should draw some general conclusions about the algorithms
(what are their strengths and weakness, how does the error behave,
etc.) and point out any unexpected behaviour.