AM3611: C++ for Scientific Computing
Project
Outline: Due 26 October
Mini-project: Due 23 November
Presentations: 28 Nov to 7 Dec
Full Project: Due 7 Dec, late penalties may be light until 14 Dec.
Outline
Your Outline document (one outline per group) should contain:
1. Group members’ names: 1-3 people from this class.
2. to 1 page description of your proposed project
3. to page description of your proposed mini-project
When deciding on your group, keep in mind that a larger group will be expected to accomplish
more. For example, the written description (not including figures, code, or sample I/O) of the
project might be expected to be about 5-8 pages (Arial 12 point single-spaced) for a group of 2,
but about 9-12 pages for a group of 3. In addition, all members must be involved in the coding,
the write-up, and the presentation (you can divide each of these tasks up, but each member must
have some significant contribution to each aspect of the project). Groups of two are probably
ideal.
Your project description should include something like what is included in the samples below
along with some indication that you have thought about how to implement the project (such as
some classes you might need to create (you are expected to use object-oriented programming for
this project so there must be multiple classes involved), including some functions that might be
needed, etc). Note that the project you do for this class must be distinct from any project done in
any other class at Western or elsewhere: It is considered academic misconduct to attempt to get
credit for the same work multiple times.
Sample Project Ideas:
1. Solar System Model: The St?rmer–Verlet/Velocity Verlet Algorithm is an algorithm for
integrating Newton’s equations of motion that be used to model the solar system. The
force in this case would be gravitational. You would need to do background research
into different types of trajectories (eg. elliptical/parabolic/hyperbolic trajectories) and
properties of the solar system. As this involves integrating a system of equations forward
in time, you could start with code from the assignments. The project would be an attempt
to model as many of the constituents of the solar system as possible from the present day
forward in time and see what happens. A reasonable mini-project would be to investigate
in 2D, and demonstrate using results from your code, the conditions to achieve elliptical,
parabolic, and/or hyperbolic trajectories for objects approaching the earth (so these would
involve 2 objects, the earth and the approaching/orbiting object) under some sensible
criteria (e.g. they need to be above the atmosphere, approach closer than the moon-earth
distance). Possible extensions include having objects merge or bounce-off each other
based on different conditions.
2. Solid-Liquid-Gas Simulation: The St?rmer–Verlet/Velocity Verlet Algorithm can also be
used to model molecular dynamics. In this case you should use Lennard-Jones
interactions. An old, but good, text on these sort of problems is Frenkel and Smit’s,
Understanding Molecular Simulation. As with sample project 1, this involves integrating
a system of equations forward in time, you could start with code from assignments. The
project would be to investigate the conditions necessary for the system of molecules to be
solid-liquid-or gas (i.e. map out a phase diagram). For a mini-project you could attempt
to do one of the Exercise 10.3-10.9 in Chapter 4 of Frenkel & Smit using code you have
written, rather than the ancient fortran code that is on the books website. Possible
extensions would include implementing Verlet-lists, a class of bonded potentials (such as
a harmonic bond), a wider variety of non-bonded potentials.
3. Geometric Brownian Motion and Stock Prices: Geometric Brownian motion (GBM) can
be simulated using a numerical solution to a stochastic differential equation, using
schemes such as the Euler-Maruyama Method that are similar to the Euler method we
used to solve an ODE in the assignments but have an additional random noise term (note
that the std library contains implementations of almost any random number distribution
you might wish, for example std::normal_distribution would be helpful for this project).
GBM is used to model stock-prices in the Black-Sholes model. In this project you would
investigate using simulations of many realizations of a GBM in order to model stock and
option pricing. For a mini-project you could implement a generic GBM for a stock and
work out the expectation values for the price of the stock at some later time, along with
its standard deviation (related to the risk or volatility). For the main project you would
add some option pricing, and potentially some other functions related to the Black-Sholes
model. Extensions would include constructing a local volatility model (perhaps based on
some historical data such as index prices you could download from somewhere) or a
stochastic volatility model.
4. Database Correlation Finder: Find some online sources of time series data (Stats Canada,
Bank of Canada, currency exchange rates, there are also lots of sports data, Health
Canada also has data on the incidence of diseases, vaccination rates, etc). Write a
program that will read in this data, potentially from sources with different formats and
with different time ranges and granularity, and store it in a database structure (a class).
Individual data sets in this database should have the data itself, a field for where the data
is from, the time range, granularity, etc. You should then come up with some operations
you can do on the data. The simplest operations would be descriptive statistics like
mean, variance, etc similar to what was done in Assignment 3. You should also be able
to look at correlations between different data sets, including time-lagged correlations.
Then you could add something like a search for these correlations that would be relevant
to the data set you are looking at (e.g. if you were to have a database of the value of a
large number of currencies over time you could ask the program to search for the 10
currencies that are most strongly correlated in time and investigate whether there is a time
lag between two currencies movements). You could also look for correlations between
data from different sources (e.g. is the prevalence of certain diseases correlated with GDP
over time). The program should be somewhat interactive and allow for several different
searches on demand from the user and new data sets to be added interactively.
5. Sudoku generator/solver: Write a code that generates a valid Sudoku puzzle and then
solves it. You should implement more than one algorithm that solves the puzzle, not just
the backtracking algorithm. You could add variants of the Sudoku puzzle (e.g. different
sizes, added constraints, etc).
6. Cellular Automata: There are lots of interesting cellular automata models that can
produce cool patterns or solve useful problems. Write a code that evolves a cellular
automata forward in time, allows different variants (parameters, rules, etc), different sizes
(bigger is often better), different boundary conditions (periodic versus reflecting versus
absorbing) and investigate what happens.
7. Fractal landscape generation: Realistic looking rugged landscapes, trees, ferns, and other
objects can be generated using fractals. Write a code that generates a fractal landscape
“picture” and then writes it out in a format that can be visualized by some other program
(povray and blender are good for this sort of visualization but have a bit of a learning
curve, you could also plot using a more standard mathematical package such as
Mathematica but it will not look as nice). Try to generate a landscape like, for example, a
valley with trees and ferns of appropriate sizes.
There are lots of other ideas, just try to be realistic in what you can accomplish in the time you
have available. Make sure you can break out a small sure-fire achievable mini-project to ensure
you have something completed and working before you have to give a presentation. How
realistic a project is may depend on your background (e.g. sample projects 1 and 2 would
probably be easier if you have taken 2nd year Physics, 3 and 4 if you already know the
background statistics, 5 is you like solving puzzles, 7 if you have ever done something using
blender, Maya, or similar software). If you are not sure whether your project is reasonable,
please come to see me and we can discuss it.
Mini-Project
The mini-project is essentially a first draft of your main project. It should involve a discrete
deliverable that will be needed for the main project and the write-up (requirments are below in
the description of the Full Project) should be similar to, but a bit shorter, than that for the main
project with the difference that for the mini-project I will accept:
Bullet point outline of the actual write up (each argument should be outlined in specific form, not
something like: “the problem will be described here“. You cannot skip things altogether);
References in the mini-project can be from Wikipedia or other online source (you should look up
the original published references for the main project);
Presentations
We will have presentations in the last 4 lectures plus potentially another 1-2 hours outside of
regular class-time in the last week. There will be a doodle poll for people to sign up to a specific
time-slot closer to the date, perhaps with some bonus mark incentive for people who sign up to
do their presentation early.
Presentations will be 12-20 minutes each (I will make this more precise once we know how
many presentations we need to fit in) and you should use a power-point like program (MS
PowerPoint is free to install for all UWO students, Keynote is common for Macs, Beamer and
Prezi offer some interesting alternative formats, there are many others). Suggestions for
formatting your presentation include:
I recommend using no more than 1 slide per minute of presentation.
Your slides should not contain large amounts of text.
You should certainly not read directly from your slides.
You should include one high-impact graphic (e.g. a plot) on your title slide to entice the
listener.
You should probably not include an outline slide as this is a short talk.
You should view the presentation similar to an advertisement for a product (the paper
version of your final project). As such, you do not need to provide all the backup
information in your presentation, just the main points and results.
If you feel rushed, you probably have put too much stuff in your presentation. Step back
and cut out some of the details.
There are lots of online resources for giving scientific presentations (google “tips for giving
scientific presentations”). Keep in mind that some are for longer presentations so take the length
of your talk into consideration when reading these.
Full Project
Your final project write-up should contain the following sections:
A. Introduction
1. State basic objectives and explain why the topic is important
2. Literature review: You should summarize what has been done on this topic before and
where you found out about it (wikipedia can be used as one of your references for the
mini-project, but you should look up the original sources for the full project).
3. Grab the reader‘s attention by presenting some of the interesting questions you will
address with your project:, eg. paradoxical results that are known, topical examples, or
challenges to common wisdom.
4. Give a short summary of results in the introduction.
B. Conceptual Framework of the problem
1. Background information about the specific problem you are addressing
2. General approach to answering the question posed
e.g. The theory suggesting a framework for analysis; Intuitive discussion of the result you
might expect
3. Mathematical formulation of the problem
C. Numerical model/computational algorithm to be used to solve the problem
1. Specify the numerical model you will use to solve the problem described in part B. This
should include:
a) Where the algorithm came from, including references
b) A description of why it solves the problem outlined in B. (A derivation if it can be
done in about half a page, otherwise a summary of how one could derive it). This
should also include any assumptions that need to be made for the method to work.
c) A discussion of any errors associated with the method. e.g. do you expect the result
to be a numerically exact solution to the problem or just an approximate solution to
the problem. How do you plan on getting an estimate of how big these potential
errors might be?
d) A description of how you implemented the numerical model including the overall
design of the code (e.g. The code was broken down in 3 main parts, a part to input
data/instructions, a part to implement the actual algorithm, a part to
output/plot/analyze results); any data structures or classes used; any special
implementations of things you are especially proud off, etc.
e) A description of any libraries you used and how you interfaced your code to use
them.
2. Data: If you need external data for your project, then you should describe the data used
and the source of any such data.
E. Results
1. Test results that demonstrate your program works as advertised. This might include
comparison to extreme or idealized cases that can be solved exactly, some demonstration of the
I/O the program used, etc.
2. The main results should be present in a prose-like format (i.e. tell a story). For example,
you can explain a measurement/simulation you did, then present a plot of the outcome of the
simulation, then comment on the plot using words describing the result (increasing x causes y to
increase linearly/nonlinearly/as expected/not as expected, etc).
3. A discussion of estimate of any errors discused in Part D.1.c. Does your numerical
solution of the model perform as expected?
F. Conclusion
1. Summarize main results and conclusions from them
2. Discuss caveats to the conclusions drawn
3. Suggest directions for further research
G. Additional Style Requirements
1. Choose a title reflecting the paper‘s topic
2. Papers should be typed
3. Number equations, figures(plots), and tables
4. Plots should have labeled axes, including clear units, a figure caption describing what
is plotted, a legend or description in the caption of all lines/symbols so it is clear what is
plotted.
5. If you wish to compare two things they should be compared quantitatively, not some
vague statement about similarity.
6. Attach bibliography of cited articles, and cite them specifically in the text either by
number in your reference list, eg. [5], or by author and date, e.g. White (1980) (in which
case the reference list should be ordered alphabetically 1st and by year 2nd.
版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。