computational physics numerical differentiation

30
Computational Physics Numerical Differentiation Dr. Guy Tel-Zur Clouds. Picture by Peter Griffin, publicdomainpictures.net

Upload: yakov

Post on 15-Jan-2016

65 views

Category:

Documents


1 download

DESCRIPTION

Computational Physics Numerical Differentiation. Dr. Guy Tel- Zur. Clouds. Picture by Peter Griffin, publicdomainpictures.net. MHJ Chapter 3: Numerical Differentiation. Should be f’c. “2” stands for two points. forward/backward 1 st derivative: ±h. N-points stencil. Example code. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Computational  Physics Numerical Differentiation

Computational PhysicsNumerical Differentiation

Dr. Guy Tel-Zur

Clouds. Picture by Peter Griffin, publicdomainpictures.net

Page 2: Computational  Physics Numerical Differentiation

MHJ Chapter 3: Numerical Differentiation

Should be f’c

“2 ”stands for two points

Page 3: Computational  Physics Numerical Differentiation

forward/backward 1st derivative: ±h

f(x)=a+bx^2 f(x)=a+bx

f’=2bx f’=b Exact f’

f2’=((a+b(x+h)^2)-(a+bx^2))/h = (a+bx^2+2bxh+bh^2)-(a+bx^2))/h=2bx+bh Bad!!!

f2’=((a+b(x+h))-(a+bx))/h=b

Good!

f2’

((a+b(x+h)^2)-(a+b(x-h)^2))/(2h)=(a+bx^2+2bxh+bh^2-a-bx^2+2bxh-bh^2)/(2h)=4bxh/2h=2bxGood!

(1/2)(f2L’+f2R’)=f2’=(f(x+h)-f(x-h))/(2h)

Page 4: Computational  Physics Numerical Differentiation

N-points stencil

Page 5: Computational  Physics Numerical Differentiation

Example code

• 2nd derivative of exp(x)• Code in C++, we will learn more of the

language features:– Pointers– Call by Value/Reference– Dynamic memory allocation– Files (I/O)

Page 6: Computational  Physics Numerical Differentiation

Call by value vs. call by reference

• printf(“speed= %d\n”, v); // this is a call by value as the value of v won’t be changed by the function (printf) – which is desired

• scanf(“%d\n”,&v); // this is a call by reference, we want to supply the address of v in order to set it’s value(s)

Page 7: Computational  Physics Numerical Differentiation

//// This program module// demonstrates memory allocation and data transfer in between functions in C++

#include<stdio.h>#include<stdlib.h>

int main(int argc, char *argv[]) { int a; // line 1 int *b; // line 2 a = 10; // line 3 b = new int[10]; // line 4 for(i = 0; i < 10; i++) { b[i] = i; // line 5 } func( a,b); // line 6 return 0;} // End: function main()

void func( int x, int *y) // line 7{ x += 7; // line 8 *y += 10; // line 9 y[6] += 10; // line 10 return; // line 11} // End: function func()

לדוגמה תכנית ניתוח

Page 8: Computational  Physics Numerical Differentiation

//// This program module// demonstrates memory allocation and data transfer in between functions in C++

#include<stdio.h>#include<stdlib.h>void func( int x, int *y);int main(int argc, char *argv[]) { int a; // line 1 int *b; // line 2 a = 10; // line 3 b = new int[10]; // line 4 for(int i = 0; i < 10; i++) { b[i] = i; // line 5 } func( a,b); // line 6 printf("a=%d\n",a); printf("b[0]=%d\n",b[0]); printf("b[1]=%d\n",b[0]); printf("b[2]=%d\n",b[0]); printf("b[3]=%d\n",b[0]); printf("b[4]=%d\n",b[0]); printf("b[5]=%d\n",b[0]); printf("b[6]=%d\n",b[0]); printf("b[7]=%d\n",b[0]); printf("b[8]=%d\n",b[0]); printf("b[9]=%d\n",b[0]); return 0;} // End: function main()

void func( int x, int *y) // line 7{ x += 7; // line 8 *y += 10; // line 9 y[6] += 10; // line 10 return; // line 11} // End: function func()

משופרת תכנית

Check program: demo1.cppUnder /lectures/02/code

Page 9: Computational  Physics Numerical Differentiation

פרק לסיום עד הלאה מכאן שיידונו הנושאיםMHJמתוך 3

• ' מס של: 1תכנית השנייה הנגזרת exp(x)חישוב++Cבשפת

• ' מס בשפת: 2תכנית דומה בתוספת Cתכניתולכתיבה לקריאה קבצים לפתיחת התיחסות

• ' מס ' 3תכנית מס: תכנית בשפת 2כמו שהפעם אלאC. בינהן++ השוני והדגשת

• ' מס " 4תכנית בשפת: ל Fortran90כנ

בחישוב • השגיאה בהערכת דיון

תוכנת – • השגיאה של גראפית gnuplotהצגה

Page 10: Computational  Physics Numerical Differentiation

• Self.Open( DevC++ for the demos!) תזכורתלעצמי

• I slightly modified “program1.cpp” from MHJ section 3.2.1 (2009 Fall edition): http://www.fys.uio.no/compphys/cp/programs/FYS3150/chapter03/cpp/program1.cpp

Page 11: Computational  Physics Numerical Differentiation

Explain program1.cpp

Working directory:C:\Users\telzur\Documents\BGU\Teaching\ComputationalPhysics\2011A\Lectures\02\code>

Open DevC++ IDE for the demo

Usage: > program1<user input> 0.01 10 100

Examine the output:> type out.dat

Page 12: Computational  Physics Numerical Differentiation

program2.cpp• The book mentions program2.cpp which is in

cpp and the URL is indeed a cpp code, but the listing below the URL is in C.

• This demonstrates the I/O differences between C and C++

Page 13: Computational  Physics Numerical Differentiation

using namespace std;#include <iostream>

int main(int argc, char *argv[]) { FILE *in_file, *out_file; if( argc < 3) { printf("The programs has the following structure :\n"); printf("write in the name of the input and output files \n"); exit(0); } in_file = fopen( argv[1], "r"); // returns pointer to the input file if( in_file == NULL ) { // NULL means that the file is missing printf("Can't find the input file %s\n", argv[1]); exit(0); } out_file = fopen( argv[2], "w"); // returns a pointer to the output file if( out_file == NULL ) { // can't find the file printf("Can't find the output file%s\n", argv[2]); exit(0); } fclose(in_file); fclose(out_file); return 0; }

Working with files in C++

program2.cpp

Page 14: Computational  Physics Numerical Differentiation

program3.cpp

• Usage: > program3 outfile_name• All the rest is like in program1.cpp

Page 15: Computational  Physics Numerical Differentiation

Now lets check the f90 version

• Open in SciTE program1.f90• In the image below: compilation and execution demo:

Page 16: Computational  Physics Numerical Differentiation

MHJ section3.2.2 Error analysis

Page 17: Computational  Physics Numerical Differentiation

Content of exp(10)’’ computation

• See MHJ section 3.2.2 and Fig. 3.2 (Fall 2009 Edition)• Text output with 4 columns:

h, computed_derivative, log(h),ε >program1 Input: 0.1 10. 10>more out.dat1.00000E-001 2.72055E+000 -1.00000E+000 -3.07904E+0005.00000E-002 2.71885E+000 -1.30103E+000 -3.68121E+0002.50000E-002 2.71842E+000 -1.60206E+000 -4.28329E+0001.25000E-002 2.71832E+000 -1.90309E+000 -4.88536E+0006.25000E-003 2.71829E+000 -2.20412E+000 -5.48742E+0003.12500E-003 2.71828E+000 -2.50515E+000 -6.08948E+0001.56250E-003 2.71828E+000 -2.80618E+000 -6.69162E+0007.81250E-004 2.71828E+000 -3.10721E+000 -7.29433E+0003.90625E-004 2.71828E+000 -3.40824E+000 -7.89329E+0001.95313E-004 2.71828E+000 -3.70927E+000 -8.44284E+000

Page 18: Computational  Physics Numerical Differentiation

Download and install Gnuplot

http://www.gnuplot.info/

Page 19: Computational  Physics Numerical Differentiation

Visualization: Gnuplot

• Reconstruct result from MHJ - Figure 3.2 using gnuplot

• Gnuplot is included in Python(x,y) package!• Gnuplot tutorial:

http://www.duke.edu/~hpgavin/gnuplot.html• Example:

http://www.physics.ohio-state.edu/~ntg/780/handouts/gnuplot_quadeq_example.pdf

• 3D Examples: http://www.physics.ohio-state.edu/~ntg/780/handouts/gnuplot_3d_example_v2.pdf

Page 20: Computational  Physics Numerical Differentiation

Using gnuplot

Page 21: Computational  Physics Numerical Differentiation

Can we explain this behavior?

Computed for x=10

Page 22: Computational  Physics Numerical Differentiation

Error Analysisεro = Round-Off error

The approximation error:

Recall Eq. 3.4:

The leading term in the error (j=1) is therefore:

Page 23: Computational  Physics Numerical Differentiation

The Round-Off Error (εro )

• εro depends on the precision level of the chosen variables (single or double precision)

Single precision

Double precision If the terms are very close the difference is at the level of the round off error

Page 24: Computational  Physics Numerical Differentiation

hmin = 10-4 is therefore the step size that gives the minimal error in our case.If h>hmin the round-off error term will dominate

Page 25: Computational  Physics Numerical Differentiation
Page 26: Computational  Physics Numerical Differentiation

Let’s upgrade our visualization skills!

• Mayavi• Included in the Python(x,y) package• 2D/3D• User guide:

http://code.enthought.com/projects/mayavi/docs/development/html/mayavi/index.html

Page 28: Computational  Physics Numerical Differentiation

The Python code

Page 29: Computational  Physics Numerical Differentiation

Mayavi environment

Page 30: Computational  Physics Numerical Differentiation

Move the object and zoom with the mouse