问题
I have a code for finding the bisection (and it finally works!), but I need to include 3 more things:
- output- Root History a vector containing the sequence of midpoints obtained by the algorithm
- output- the absolute value of the function
f(x) at r, i.e., fRoot = f(r) input- max iterations
function [R, E] = myBisection(f, a, b, tol) m = (a + b)/2; R = m; E = abs(f(m)); while E(end) > tol if sign(f(a)) == sign(f(m)) a = m; else b = m; end m = (a + b)/2; R = [R, m]; E = [E, abs(f(m))]; end
how do I do this? thanks!!
回答1:
I have corrected indents an you can see that you've left out end
from the end of the function. (it is optional but best not to leave those things out so you know you did not mean to write couple lines to the end but you forgot it.)
R
and E
should be returned now, if you call myBisection apropriately, that is
[R, E] = myBisection(f, a, b, tol);
If you just call
myBisection(f, a, b, tol)
it will only return R
.
To add a limit on the number of iterations, you change while
's condition like so:
iter=0;
while (E(end) > tol) && (iter<max_iter)
iter = iter+1;
% ...
end
or it is better to do it in a for loop, with an if
plus break
:
for iter=1:max_iter
if(E(end) <= tol), break, end;
% ...
end
来源:https://stackoverflow.com/questions/13459784/how-to-show-all-the-midpoints-on-my-bisection-code