Newton's method problem
1 view (last 30 days)
Show older comments
clear all; close all;
a=4;
b=3;
x=zeros();
x(1)=1;
for i=1:1000;
f(x(i))=(x(i)-a)^2+b;
x(i+1) =x(i)-(f(x(i))/diff(f(x(i))));
end
4 Comments
Answers (3)
Andrei Bobrov
on 7 Oct 2011
for your case EDITED
f = @(x)(x - 4)^2 + 9;
syms x
ex = (x - 4)^2 + 9;
cf = double(coeffs(ex));
distxp = (4*prod(cf([1 end]))-cf(2)^2)/4/cf(3);
fun = matlabFunction(ex - distxp);
df = matlabFunction(diff(ex));
x = 10;
xout = x;
while abs(fun(x)) > 1e-6
x1 = x - fun(x)/df(x);
x = x1;
xout = [xout;x];
end
ADD corrected
f = @(x)(x - 4)^2 + 9;
syms x
ex = (x - 4)^2 + 9;
cf = fliplr(double(coeffs(expand(ex))));
distxp = (4*prod(cf([1 end]))-cf(2)^2)/4/cf(1);
fun = @(x)f(x)-distxp;
dcf = polyder(cf);
df = @(x)polyval(dcf,x);
x = 10;
xout = x;
while abs(fun(x)) > 1e-6
x1 = x - fun(x)/df(x);
x = x1;
xout = [xout;x];
end
output for the first 10 iterations and optimal x
if numel(xout)<=10
out = xout;
else
out = [xout(1:10);xout(end)];
end
7 Comments
Andreas Goser
on 7 Oct 2011
This code isn't working because diff(f(x(i))) returns [] and thus a scalar can't be divide by [].
Steve
on 9 Oct 2011
You can use this Newton function implementation in general.
function n = newton(f,fp,x0,tol,Nmax)
n=0;
test_val = abs(poly_val(f,x0));
num1 = 1;
while (test_val > tol && num1<Nmax)
n = x0 - poly_val(f,x0)/poly_val(fp,x0);
test_val = abs(poly_val(f,n));
x0=n;
num1=num1+1;
end
end
See Also
Categories
Find more on Symbolic Math Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!