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

New to MATLAB?

Function Intersection using Newton's Method

Asked by SB

SB (view profile)

on 19 Nov 2012
Accepted Answer by Matt J

Matt J (view profile)

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

Matt J (view profile)

on 19 Nov 2012

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

SB

SB (view profile)

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

SB (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Matt J

Matt J (view profile)

on 19 Nov 2012
Accepted answer

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

3 Comments

SB

SB (view profile)

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

Matt J (view profile)

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

SB (view profile)

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

Matt J (view profile)

Contact us