Download presentation

Presentation is loading. Please wait.

Published byAnthony Single Modified over 4 years ago

1
Chem 302 Lab Assignment Tuesday 2:30 – 4:00 Colin Chris M Johnathan P Craig Jonathan E Alex Tuesday 4:00 – 5:30 Curtis Matt Chris L Janet Cory Kristen

2
Chem 302 - Math 252 Chapter 1 Solutions of nonlinear equations

3
Roots of Nonlinear Equations Many problems in chemistry involve nonlinear equations Linear and quadratic equations are trivial, can be solved analytically Cubic and higher order solve numerically Present a overview of basic methods Not a complete discussion

4
Successive Approximations Simplest method Want to solve f(x)=0 rearrange into the form x=g(x) Use as iteration formula x i+1 =g(x i ) Use initial guess and iterate until self consistent

5
Successive Approximations

6
ixixi 00 10.666667 20.814815 30.887974 40.929500 50.954656 60.970456 70.980595 80.987189 90.991514 100.994367 110.996255 120.997508 130.998341 140.998895 150.999264 160.999509 ixixi 170.999673 180.999782 190.999855 200.999903 210.999935 220.999957 230.999971 240.999981 250.999987 260.999991 270.999994 280.999996 290.999997 300.999998 310.999999 320.999999

7
Successive Approximations Second root

8
Successive Approximations Second root

9
Successive Approximations Different formula Will find x=2, will not find x=1 Different formula – different results No one formula is best Slow to converge

10
Successive Approximations How to find initial guesses? Grid search Course to start Get finer

11
Analysis of Convergence Each stage of iteration x i+1 =g(x i ) For convergence True root Intersection of two functions: x & g(x)

12
Analysis of Convergence

13
Four possibilities –Monotonic convergence –Oscillating convergence –Monotonic divergence –Oscillating divergence Analysis of Convergence

14
Monotonic convergence

15
Oscillating convergence

16
Monotonic divergence

17
Oscillating divergence

18
Analysis of Convergence Key is g (x) Mean Value Theorem –If g(x) and g (x) are continuous on the interval [a,b] then there exists an (a< <b) such that

19
Analysis of Convergence

20
To converge LHS 0 If M < 1 guaranteed to converge Sufficient but not necessary

21
Speed of Convergence Taylor expansion about root For x i When close to convergence Dominant term will be 1 st nonzero derivative Order of Convergence

22
One of most common methods Usually 2 nd order convergence Generally superior to simple iteration Uses function and 1 st derivative to predict root (assume f is linear) Newton-Raphson Method

24
Fairly robust Need analytic expressions for f(x) and f'(x) –May be complicated or not available Need to evaluate f(x) and f'(x) many times –Maximum efficiency f'(x) close to zero will cause problems –Especially important for multiple roots –Need to checks in program Value of f'(x) Max iterations

25
Newton-Raphson Method Test conditions Convergence

26
NR but use numeric derivative Secant Method Need two points to start

27
Similar to Secant Method Uses two points (one on each side of root) (need search) Find where function would be zero if linear between two points During each iteration one point is held fixed (pivot), other is moved More stable but slower than NR If pivot far from root then slow If pivot close to root then denominator can be small False-Position Method

28
Algorithm –Pick x L & x R (x L < < x R ) –Evaluate –Calculate –If then x M is the root –Replace x L or x R with x M (depends on sign of ) False-Position Method Repeat xLxL xRxR xMxM

29
False-Position Method

30
Same as FP Method but x M is average of x L & x R Drawbacks of both FP & Bisection –Two initial guesses on opposite sides of root Multiple or close roots a problem f always same sign a problem –Round-off error as x M gets close to root Secant, FP & Bisection methods do not require analtyic expression of f'(x) Bisection Method

31
Want as efficient an algorithm as possible –Efficiency of operations + * / Power –Naive method (10 ×, 4 +) –Most efficient method for polynomial of order m requires m additions and m multiplications –Nesting (Horners Method) Roots of Polynomials

32
For polynomial of degree m Horners Method Divide by (x-r) b 0 is f(r)

33
Horners Method m ×, m +

34
Horners Method 1 is a root

35
Horners Method 2 is a root

36
If b 0 = 0 (i.e. r is a root) Horners Method Have factored (x-r) from equation (i.e. reduced order, called deflating) Continue to find roots of reduced equation

37
Horners Method 2 is a root (i.e. a double root of original equation)

38
Birge-Vieta Method NR method with f(x) and f'(x) evaluated using Horners method Once a root is found, reduce order of polynomial

39
Birge-Vieta Method

44
Example

45
NR x 0 4.33 3 x 0 > 4.33 5 Third root? Try it!!!

46
BV

47
Roots of Polynomials What about complex roots? –Occur in pairs –Have form + i & – i –Roots of quadratic equation f(x) = x 2 – 2 x + 2 + 2 BV method – we removed factors of x – r. Quadratic can be solved analytically – therefore best to remove quadratic factors

48
Lin-Bairstow Method

49
Iteration Scheme

50
Lin-Bairstow Method Algorithm –m > 3: determine quadratic roots, reduce order of problem by 2 –m = 3: determine linear root then quadratic roots –m = 2: determine quadratic roots –m = 1: determine linear root

51
1.// Lin Biarstow.cpp 2.#include "stdafx.h" 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include 9.#include 10.#include 11.using namespace std; 12.int _tmain(int argc, _TCHAR* argv[]) 13.{ 14. double t=1e-8, *a, *b, *c,u,v,du,dv,r1,r2,ep,f,d; 15. int n,i; 16. FILE *logfile; 17. if((logfile=fopen("polynomial.txt","wt"))==NULL) 18. { 19. cout<<"Could not open log file.\n\nPress any key to exit."; 20. getch(); 21. return EXIT_FAILURE; 22. } 23. cout<<"Enter order of polynomial: "; 24. cin>>n; 25. fprintf(logfile,"Roots of the polynomial"); 26.a=new double[n+1]; 27. b=new double[n+1]; 28. c=new double[n+1]; 29. for(i=0;i<n+1;i++){ 30. cout<<"\nInput coefficient a["<<i<<"] "; 31. cin>>a[i]; 32. } 33. fprintf(logfile,"\n%lf %+lfx",a[0],a[1]); 34. for(i=2;i<n+1;i++)fprintf(logfile," %+lfx^%d",a[i],i); 35. cout<<"\n\nRoots of the polynomial are:\n"; 36. fprintf(logfile,"\n\nRoots are:\n"); 37. while (a[n]==0){n--;} 38. // make sure n>3 39. while(n>3) 40. { 41. u=0;v=0; 42. b[n]=c[n]=a[n];ep=1; 43. while(ep>t){ 44. b[n-1]=a[n-1]+u*b[n]; 45. c[n-1]=b[n-1]+u*c[n]; 46. for(i=n-2;i>0;i--) 47. { 48. b[i]=a[i]+u*b[i+1]+v*b[i+2]; 49. c[i]=b[i]+u*c[i+1]+v*c[i+2]; 50. }

52
26. b[0]=a[0]+u*b[1]+v*b[2]; 51. f=c[2]*c[2]-c[1]*c[3]; 52. if(f==0){du=dv=1;} 53. else{du=(b[0]*c[3]-b[1]*c[2])/f;dv=(c[1]*b[1]-c[2]*b[0])/f;} 54. u+=du; 55. v+=dv; 56. ep=sqrt(du*du+dv*dv); 57. } 58. d=u*u+4*v; 59. if(d<0) //complex roots 60. { 61. r1=u/2;r2=sqrt(-d)/2; 62. cout<<r1<<" + i"<<r2<<endl; 63. cout<<r1<<" - i"<<r2<<endl; 64. fprintf(logfile,"%lf + i%lf\n%lf - i%lf\n",r1,r2,r1,r2); 65. } 66. else // real roots 67. { 68. r1=u/2+sqrt(d)/2; 69. r2=u/2-sqrt(d)/2; 70. cout<<r1<<endl; 71. cout<<r2<<endl; 72. fprintf(logfile,"%lf\n%lf\n",r1,r2); 73. } 74. n-=2; 75. for(i=0;i<n+1;i++)a[i]=b[i+2]; 76. } 77.if(n==3){ 78. u=0; 79. b[n]=c[n]=a[n];ep=1; 80. while(ep>t){ 81. for(i=n-1;i>0;i--) 82. { 83. b[i]=a[i]+u*b[i+1]; 84. c[i]=b[i]+u*c[i+1]; 85. } 86. b[0]=a[0]+u*b[1]; 87. if(c[1]==0)du=1; 88. else du=-b[0]/c[1]; 89. u+=du; 90. ep=sqrt(du*du); 91. } 92. cout<<u<<endl; 93. fprintf(logfile,"%lf\n",u); 94. n--; 95. for(i=0;i<n+1;i++)a[i]=b[i+1]; 96. } 97. if(n==2){ 98. u=-a[1]/a[2]; 99. v=-a[0]/a[2]; 100. d=u*u+4*v;

53
101.if(d<0) //complex roots 102. { 103. r1=u/2;r2=sqrt(-d)/2; 104. cout<<r1<<" + i"<<r2<<endl; 105. cout<<r1<<" - i"<<r2<<endl; 106. fprintf(logfile,"%lf + i%lf\n%lf - i%lf\n",r1,r2,r1,r2); 107. } 108. else 109. { 110. r1=u/2+sqrt(d)/2; 111. r2=u/2-sqrt(d)/2; 112. cout<<r1<<endl; 113. cout<<r2<<endl; 114. fprintf(logfile,"%lf\n%lf\n",r1,r2); 115. } 116. } 117. else if(n==1){ 118. r1=-a[0]/a[1]; 119. cout<<r1<<endl; 120. fprintf(logfile,"%lf\n",r1); 121. } 122. delete[] a;delete[] b; delete[] c; 123. fclose(logfile); 124. cout<<"\n\nFinished finding roots. Press any key to exit.";getch(); 125.return EXIT_SUCCESS; 126.}

55
Roots of the polynomial -130.000000 +120.000000x -2.000000x^2 -9.000000x^3 +1.000000x^4 Roots are: 3.972068 -3.600135 7.399477 1.228589

Similar presentations

OK

SUBTRACTING INTEGERS 1. CHANGE THE SUBTRACTION SIGN TO ADDITION

SUBTRACTING INTEGERS 1. CHANGE THE SUBTRACTION SIGN TO ADDITION

© 2018 SlidePlayer.com Inc.

All rights reserved.

To make this website work, we log user data and share it with processors. To use this website, you must agree to our Privacy Policy, including cookie policy.

Ads by Google