Newton's method in Matlab

830 views (last 30 days)
FURKAN CEVAHIR
FURKAN CEVAHIR on 26 Jan 2019
Commented: Anurag Harsh on 17 Aug 2021
I am trying to apply Newton's method in Matlab, and I wrote a script:
syms f(x)
f(x) = x^2-4
g = diff(f)
x_1=1 %initial point
while f(['x_' num2str(i+1)])<0.001;% tolerance
for i=1:1000 %it should be stopped when tolerance is reached
['x_' num2str(i+1)]=['x_' num2str(i)]-f(['x_' num2str(i)])/g(['x_' num2str(i)])
end
end
I am getting this error:
Error: An array for multiple LHS assignment cannot contain M_STRING.
Newton's Method formula is x_(n+1)= x_n-f(x_n)/df(x_n) that goes until f(x_n) value gets closer to zero.
  1 Comment
John D'Errico
John D'Errico on 26 Jan 2019
You should realize that things like this:
['x_' num2str(i+1)]=['x_' num2str(i)]-f(['x_' num2str(i)])/g(['x_' num2str(i)])
are not valid MATLAB syntax, that you cannot create or access variables on the fly like that.

Sign in to comment.

Accepted Answer

Basil C.
Basil C. on 26 Jan 2019
Edited: Basil C. on 26 Jan 2019
You seem to have made some fudamentals errors in your code.
1. the variable 'x' cannot be used however you feel right
2. also with the for loop in your code would have to run for 1000 iteration every time which makes it inefficient so always put a condition inside it
Please use the below code....
syms f(x) x
f(x) = x^2-4;
g = diff(f);
x(1)=1 ;%initial point
for i=1:1000 %it should be stopped when tolerance is reached
x(i+1) = x(i) - f(x(i))/g(x(i));
if( abs(f(x(i+1)))<0.001) % tolerance
disp(double(x(i+1)));
break;
end
end
  2 Comments
Lee Kruse
Lee Kruse on 9 Dec 2020
Your code example doesn't work for me. Gives an error at the if statement "Conversion to logical from sym is not possible."

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!