COS 323 Fall 2009 Computing for the Physical and Social Sciences Ken Steiglitz Mechanics and course structure • See course web page: COS 323 home • Syllabus: lecture outlines, slides, some detailed notes, etc. • Master list of references in pdf, some on reserve in library Reading, background • Optional text: http://www.nr.com Numerical Recipes in C [PTVF92]. Really a reference available on web • Master reference list • COS 126 is entirely adequate, don't get too fancy --- We're after the algorithmic and numerical issues • MAT 104 is entirely adequate Goal of course: learn “scientific” computing through applications • 4 assignments: population genetics, finance, chaos, Pratt Truss bridge • Term paper • Reference all sources! Major Topic Outline • Simulation, using random numbers, experimenting • Integration, root-finding • Optimization, linear programming • Ordinary diff. eqs., partial diff. eqs. • DSP • Linear systems (Matlab) Assign. 1 Assign. 2 Assign. 3 Assign. 4 Major Topic Outline • Simulation, using random numbers, experimenting • Integration, root-finding • Optimization, linear programming • Ordinary diff. eqs., partial diff. eqs. • DSP • Linear systems (Matlab) * Numerical analysis Assign. 1 Assign. 2 Assign. 3 Assign. 4 “Personal” vs. “Scientific” computing • Early computers, up to the 70s or 80s, were built to solve problems. They were “scientific computers”, or SCs, so to speak • Today the vast majority of computers are PCs What this course is about • PC: Cycles used mainly for fixed, widely used programs, for communication, rendering, DSP, etc. • SC: Involves developing programs: programming, modeling, experimentation Machines are driven by the mass market ca. 1956 Stanisław Ulam with MANIAC I --- about 104 ops/sec Modeling in general • Purposes: quantitative prediction, qualitative prediction, development of intuition, theory formation, theory testing • Independent and dependent variables, space, time • Discrete vs. continuous choices for space, time, dependent variables • Philosophy: painting vs. photography Examples • Discrete-time/discrete-space/discrete-value spatial epidemic models Sugarscape seashells lattice gasses cellular automata in general Examples, con’t • Difference equations population growth population genetics digital signal processing, digital filters, FFT, etc. Examples, con’t • Event-driven simulation market dynamics population genetics network traffic Examples, con’t • Ordinary differential equations market dynamics epidemics seashells insulin-glucose regulation immune system predator-prey system n-body problem, solar system, formation of galaxy Examples, con’t • Partial differential equations heat diffusion population dispersion wave motion in water, ether, earth, … spread of genes in population classical mechanics quantum mechanics Examples, con’t • Combinatorial optimization scheduling routing, traffic oil refining layout partition … and many more main() { /* main */ float x, sum; int i; x = 1./10.; sum = 0.; for (i=0;i<10000000;i++) sum += x; printf("sum = %28.25f\n", sum); } main() { /* main */ float x, sum; int i; x = 1./10.; sum = 0.; for (i=0;i<10000000;i++) sum += x; printf("sum = %28.25f\n", sum); } sum = 1087937.0000000000000000000000000 Roundoff errors can accumulate in iterative computations: main() { /* main */ float x, sum; int i; x = 1./10.; sum = 0.; for (i=0;i<10000000;i++) sum += x; printf("sum = %28.25f\n", sum); } sum = 1087937.0000000000000000000000000 Numbers • Fixed-point (absolute precision) • Floating-point (relative precision) scientific notation, like 3x10-8 • Single-precision: 32 bits, 8 bit exponent, about 7 decimal-place accuracy • Double-precision: 64 bits, 11 bit exponent, about 15 decimal-place accuracy [see IEEE 754 standard] Numbers (con’t) Example: 1/10 has no exact representation in binary floating-point: main() { /* main */ float x; x = 1./10.; printf("x = %28.25f\n", x); } x = 0.1000000014901161193847656 More subtle problem Roots of quadratic: X2 – 9999 x + 1 = 0 Relative error in x2 is huge! What’s the problem? main() { /* main */ printf("Solving quadratic\n"); printf("Actual root = 0.00010...\n"); printf("Actual root = 9998.9...\n"); float a, b, c, d, x1, x2; a = 1.; b = -9999.; c = 1.; d = b*b - 4.*a*c; x1 = (-b + sqrt(d))/2.; x2 = (-b - sqrt(d))/2.; printf("x1= %28.25f\nx2= %28.25f\n", x1, x2); } Solving quadratic Actual root = 0.00010... Actual root = 9998.9... x1= 9999.0000000000000000000000000 x2= 0.0000250025004788767546415 Higher-level languages such as Matlab, Maple, Mathematica |\^/| Maple V Release 5 (WMI Campus Wide License) ._|\| |/|_. Copyright (c) 1981-1997 by Waterloo Maple Inc. All rights \ MAPLE / reserved. Maple and Maple V are registered trademarks of <____ ____> Waterloo Maple Inc. | Type ? for help. # solving ill-conditioned quadratic # x^2 -9999*x+1 = 0 # b := -9999. x1 := ( -b - sqrt(b*b - 4) )/2; Mutiple-precision arithmetic Digits := 7 x1 := 0 (software) Digits := 8 x1 := .0001 Experimental technique Digits := 20 x1 := .0001000100020004 Digits := 40 x1 := .000100010002000400090021005101270323