UF6

EAS 502 Homework I

UF6
Jan 25th, 2021
1,500
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. clear all;
  2.  
  3. function root = bisection(f, x0, x1, tol=1E-5)
  4.                 while (abs(x1 - x0)/2 > tol)
  5.                                 root = (x0 + x1) / 2; % calculate the new root.
  6.                                 if (f(x0) * f(root)) > 0
  7.                                 % if f(x0) and f(root) have same sign
  8.                                                 x0 = root;
  9.                                 else
  10.                                                 x1 = root;
  11.                                 end
  12.                 end
  13. end
  14.  
  15. function x1 = newtons(f, f_dash, x0, tol=1E-5)
  16.                 err = 1;
  17.                 while (abs(err) > tol)
  18.                                 x1 = x0 - f(x0) / f_dash(x0);
  19.                                 err = x1 - x0;
  20.                                 x0 = x1;
  21.                 end
  22. end
  23.  
  24. function x2 = chords(f, x0, x1, tol=1E-5)
  25.                 err = (x1 - x0);
  26.                 while (abs(err) > tol)
  27.                                 x2 = x0 - f(x0) * (x1 - x0) / (f(x1) - f(x0));
  28.                                 err = x2 - x1;
  29.                                 x0 = x1;
  30.                                 x1 = x2;
  31.                 end
  32. end
  33.  
  34.  
  35. function x2 = secant(f, x0, x1, tol=1E-5)
  36.                 err = (x1 - x0);
  37.                 while (abs(err) > tol)
  38.                                 x2 = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0));
  39.                                 err = x2 - x1;
  40.                                 x0 = x1;
  41.                                 x1 = x2;
  42.                 end
  43. end
  44.  
  45.  
  46. function x2 = false_pos(f, x0, x1, tol=1E-5)
  47.                 err = (x1 - x0);
  48.                 while (abs(err) > tol)
  49.                                 x2 = (f(x0) * x1 - f(x1) * x0) / (f(x0) - f(x1));
  50.                                 err = x2 - x1;
  51.                                 x0 = x1;
  52.                                 x1 = x2;
  53.                 end
  54. end
  55.  
  56.  
  57.  
  58. % find_root (test subroutine)
  59. function root = find_root(f, f_dash, x0, x1, method, tol=1E-5)
  60.                 if method == 'b'
  61.                                 root = bisection(f, x0, x1, tol);
  62.                 elseif method == 'n'
  63.                                 root = newtons(f, f_dash, x0, tol);
  64.                 elseif method == 's'
  65.                                 root = secant(f, x0, x1, tol);
  66.                 elseif method == 'c'
  67.                                 root = chords(f, x0, x1, tol);
  68.                 elseif method == 'f'
  69.                                 root = false_pos(f, x0, x1, tol);
  70.                 end
  71. end
  72.  
  73.  
  74. f = @(x) x.^3 - 20;
  75. f_dash = @(x) 3.*x.^2;
  76.  
  77. x0 = 1;
  78. x1 = 3;
  79.  
  80. find_root(f, f_dash, x0, x1, 'n') % newtons method.
  81. find_root(f, f_dash, x0, x1, 'b') % bisection method.
RAW Paste Data