MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by SB on 19 Nov 2012

Hi everyone, I'm trying to write a function that finds a point at

which two functions f(x) and g(x) intersect, i.e., f(x) = g(x). I'm using

Newton's Method and making and h(x)=f(x)-g(x) and h'(x) as well, but I'm not getting the right x-value. Please help me debug my code!

% function x = fgIntersect(f, df, g, dg, x0, tol, maxIter) h=f(x0)-g(x0) dh=df(x0)-dg(x0) k=1; while k<=maxIter x=x0-h/dh; if abs(x-x0)<tol*abs(x) return end x0=x; k=k+1; end

end

*No products are associated with this question.*

Answer by Matt J on 19 Nov 2012

Accepted answer

You're not updating h and dh within your loop.

## 2 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/54149#comment_112008

Give us example data that let's us reproduce the failure.

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/54149#comment_112010

format compact; format long;

f = @(x) exp(x) - 3;

df = @(x) exp(x);

g = @(x) sqrt(x);

dg = @(x) .5*x^(-.5);

x = fgIntersect(f, df, g, dg, 1, 1e-6, 50)

x should equal 1.434542442506692

Another case:

format compact; format long;

p1 = [1 -2 3 -8];

p2 = [1 -3 2 -4];

f = @(x) polyval(p1,x);

df = @(x) polyval(polyder(p1),x);

g = @(x) polyval(p2,x);

dg = @(x) polyval(polyder(p2),x);

x = fgIntersect(f, df, g, dg, 2, 1e-6, 50)

x should be 1.561552842846145