联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2018-10-27 11:47

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
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp