Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Function Intersection using Newton's Method

Asked by SB on 19 Nov 2012

Hi everyone, I'm trying to write a function that fi nds 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

2 Comments

Matt J on 19 Nov 2012

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

SB on 19 Nov 2012

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

SB

Products

No products are associated with this question.

1 Answer

Answer by Matt J on 19 Nov 2012
Accepted answer

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

3 Comments

SB on 19 Nov 2012

Oh,how would I update them? Should I just put the definitions inside the loop for h and dh?

Matt J on 19 Nov 2012

As new points x are generated in the loop, you want h and dh to be evaluated at those points.

SB on 19 Nov 2012

Thank you so much! I got it, I can't believe I forgot to update them within my loop.

Matt J

Contact us