Advertisement
Guest User

Untitled

a guest
Jul 30th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. N = 20;
  2. gamma = 3;
  3. a = .1 + 3 * rand(N, 1);
  4.  
  5. mina = min(a);
  6.  
  7. x = linspace(0, gamma / mina, 1000);
  8.  
  9. f = @(beta) sum(min(gamma, a * beta(:)')) - N;
  10.  
  11. corners = gamma ./ a;
  12. corners = [corners; 0; gamma / mina];
  13. values = f(corners);
  14. [values, reorder] = sort(values);
  15. corners = corners(reorder);
  16.  
  17. low = 1;
  18. upp = length(corners);
  19.  
  20. iters = 0;
  21. while upp - low > 1
  22. iters = iters + 1;
  23. mid = floor((upp + low) / 2 + 0.1);
  24. % low < mid < upp
  25. if values(mid) > N
  26. upp = mid;
  27. else
  28. low = mid;
  29. end
  30. end
  31.  
  32. fprintf('Binary search in %d iters, N at [%f, %f]n', ...
  33. iters, corners(low), corners(upp));
  34.  
  35. root = corners(low) + ...
  36. (corners(upp) - corners(low)) / (values(upp) - values(low)) * ...
  37. (N - values(low));
  38.  
  39. fprintf('The root is %fn', root);
  40.  
  41. plot(x, f(x), '-', corners, values, 'r.', ...
  42. x, N, 'k-', [root], [N], 'g*');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement