Before any formula, let's agree on the goal in plain words.
The picture below shows one curve crossing the flat line. That crossing point is what all four tools ultimately search for — directly (fsolve) or through the back door (minimize chases the zero of the slope).
WHY this matters: you can rarely solve g(x)=0 with algebra when g is messy. So instead of solving, we will sneak up on the crossing point step by step.
Standing at some guess xk (the little k just counts our guesses: guess number 0, 1, 2, …), we can measure two things about the curve right where we stand:
its heightg(xk) — how far above or below the line we are, and
its slopeg′(xk) — how steeply the curve is tilting there.
The figure shows the curve (cyan) and, in amber, the straight tangent ramp at xk.
WHY a tangent line? Because a straight line is the only thing we can solve =0 instantly. The curve is hard; a ramp is easy. So we replace the curve by its ramp nearxk and solve the easy problem instead.
Here is the one leap of faith, stated with zero jargon: close to where you stand, a smooth curve and its tangent ramp are almost the same line. Zoom in enough and every curve looks straight.
Writing "a small sideways step" as Δ (Greek letter delta, meaning "a little change"), the ramp's height after stepping is:
This is the parent note's "keep linear terms of the Taylor expansion" — but now you can see it: we threw away the curve's bending and kept only its straight part.
We want to land on the horizontal line. We cannot force the real curve to 0 in one clean move — but we can force the ramp (our straight stand-in) to 0, because a straight line meets the axis at exactly one solvable point. So we set the approximate height to zero:
Read the fraction as pure geometry: "how far to walk = (height error) ÷ (tilt)." A tall error over a gentle tilt means a long walk; a small error over a steep tilt means a tiny nudge. That is the ramp sliding down to the axis. Because we zeroed the ramp and not the curve, xk+Δ lands close to the true zero, not exactly on it — which is why we must repeat.
Our new, better guess is the old spot plus the step Δ:
Now the trick: the ramp only approximated the curve, so xk+1 isn't the exact zero — but it's closer (once we're near enough). So we stand there, draw a fresh tangent, slide again, and again. Each pass squeezes the gap.
The method is local: it slides to whatever zero its ramps happen to point at. Different seeds can land on different roots — exactly the parent's fsolve warning ([1,1]→(4,3) but [−5,−5]→(−3,−4)).
WHY linprog doesn't have this problem: a linear objective has a constant slope that never flattens, so there's no local trap — the optimum is always a corner, found globally. That's the whole reason it's a separate tool (see Linear Programming Simplex and Convex Optimization).
The "error squares" magic of Step 4 was promised only when you start close. Far away, the very same tangent-slide can throw you further from the zero — or into an endless loop.
Steps 6–8 were about the tilt vanishing where we stand. Now the subtler trap: the tilt vanishing at the very zero we're chasing. This happens when the curve doesn't cleanly cross the axis but merely touches it — a double (multiple) root, like g(x)=(x−2)2 at x∗=2.
Everything above, compressed: a curve, one guess, one tangent ramp, one slide to the axis, repeat — and the same picture reused with g=f′ to find a valley bottom.
Recall Feynman: the whole walkthrough in plain words
You want to find where a wiggly line crosses the floor, but the line's too complicated to solve. So you cheat: stand at a guess, feel how steeply the line tilts (that tilt is the slope — imagine two dots on the curve sliding together until the chord between them becomes a perfect kiss), and pretend the curve is a straight ramp from there. A straight ramp is easy — you can instantly see where it hits the floor, so you jump to that spot. The ramp lied a little because the real line was curved, so you're not there yet, but you're closer — and because the only leftover is that little bending, the miss shrinks like a square each time, so a few jumps and you're basically dead on. That's the engine inside fsolve. To find the bottom of a valley instead, notice the bottom is where the ground is flat — where the slope hits zero — so play the exact same game on the slope, but check the ground actually curves upward there (a bowl, not a dome or a ledge) or you'll happily land on a peak. That's minimize. Four warnings: if you stand on a flat spot your ramp is horizontal and points nowhere (divide-by-zero); if the line crosses twice, where you start decides which crossing you fall into; if you start too far off, the ramp can fling you into the wilderness; and if the line merely kisses the floor instead of slicing through it, the fast squaring dies and progress crawls to a halt. Real tools don't run raw Newton — fsolve uses Powell's hybrid scheme, mixing bold Newton jumps with cautious safe steps and guessing the slopes by tiny finite-difference nudges. linprog skips all of it, because straight walls always send you to a corner.
Recall Quick check
Newton update in one line ::: xk+1=xk−g(xk)/g′(xk) — slide down the tangent to the axis.
The slope g′(xk) is defined as… ::: the limit of the difference quotient hg(xk+h)−g(xk) as h→0 — a chord tightening into the tangent.
Why does the same formula minimize? ::: Put g=f′; the valley bottom is where the slope f′=0, a root of f′.
What extra check turns a stationary point into a real minimum? ::: The curvature must be positive, f′′(x)>0 (a bowl, not a dome or ledge).
What breaks Newton at a flat point? ::: g′(xk)=0 ⇒ horizontal ramp ⇒ divide-by-zero ⇒ step to infinity.
Why can two seeds give different roots? ::: Newton is local; its tangents chain to the nearest crossing, and a curve may cross more than once.
Why can a far-off guess diverge? ::: The "error squares" guarantee needs you to start close; far away the ramp is a poor stand-in and can fling iterates away or cycle.
What slows Newton to linear convergence? ::: A multiple root where g′(x∗)=0 (the curve only touches the axis): the error halves instead of squaring.
What does fsolve actually implement? ::: Powell's hybrid method (MINPACK hybrd) — Newton mixed with a trust-region safe step, using a finite-difference Jacobian.