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

on 19 Nov 2012
Accepted Answer by Matt J

Matt J

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

on 19 Nov 2012

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

SB

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

SB

Products

No products are associated with this question.

1 Answer

Answer by Matt J

Matt J

on 19 Nov 2012
Accepted answer

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

3 Comments

SB

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

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

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

Matt J

Contact us