why my iteration prog doesn't work ?

% Use NR method f(x)= x^3-5x^2+7x-3
clc
TV=3;
x=(4);
tol=0.0007;
format long
for i=1:5;
fx=(x(i))^3-5*(x(i))^2+7*(x(i))-3;
fxx=3*(x(i))^2-10*(x(i))+7;
x(i+1)=(x(i))-(fx/fxx);
E_T(i)=(abs((TV-x(i+1))/TV))*100;
end
for i=1:5;
e(i)=(x(6))-(x(i));
fx=(x(i))^3-5*(x(i))^2+7*(x(i))-3;
fxx=3*(x(i))^2-10*(x(i))+7;
fxxx=6*(x(i))-10;
e(i+1)=(-fxxx/2*fxx)*(e(i))^2;
end
if abs(TV-(x(i+1)))<tol
disp(' enough to here')
disp(' -----------')
disp(' x(i+1) ')
disp(' -----------')
x;
disp(' -----------')
disp(' T.V ')
disp(' -----------')
E_T;
disp(' -----------')
disp(' E(i+1) ')
disp(' -----------')
e;
disp(' ------------- ')
end
%-----------------------------------------------------------

7 Comments

John D'Errico
John D'Errico on 23 Jan 2017
Edited: John D'Errico on 23 Jan 2017
Sure it works. It does exactly what it does. Of course, we don't know what you want it to do, since you don't tell us.
If we could actually read it, we might be more willing to help you. So why not learn to format your code as code?
Edit the question. Select the block of text that is code, then click on the "{} Code" button above the edit window. Your code will now be readable as code.
Then tell us what the code does wrong. Do you get an error? Does it just return the wrong thing? What do you expect it to do?
If you want help from people, then why not make it possible for people to give you help?
What is that not working here?
Hi,John D'Errico .... when I start the program, I don't get any results .... I expect something like
x(i+1)=3.0000000557
and T.V=0.00000007424 and E(i+1)=-0.000000089144 ... otherwise , i got a message about E_T .... Thanks for helping me , I'm new with matlab but I really need in my faculty ...
Hi, John D'Errico ... I always got this message : The variable ' E_T' appears to change size every loop iteration (within a script) . Consider preallocating for speed. ....thanks again.
That is an efficiency warning; it is telling you that your code could possibly be made faster. It is not an error message. You could get rid of it by starting out with
E_T = zeros(1,5);
Hi , Walter Roberson .... I'm deeply grateful for your help ... I still have a problem with decimal digits ...
What if I need more decimal digits in my answer than the default ? for example 50 or 80 digits .
PLEASE , HELP in this one ...
clear all
clc
x=(-0.1);
y=(0);
fprintf(' i x \n')
fprintf(' --- ------------- \n')
for i=1:5;
fx=(x(i))^3-(x(i))^2+2;
fxx=3*(x(i))^2-2*(x(i));
y(i)=x(i)-(fx/fxx);
fy=(y(i))^3-(y(i))^2+2;
fyy=3*(y(i))^2-2*(y(i));
x(i+1)=x(i)+([fy-fx]/fyy);
end
for i=1:length(x)
fprintf('%2i %18.15f\n',i,x(i))
end
THE RESULTS ARE
i x
--- -------------
1 -0.100000000000000
2 -3.119140528362807
3 -1.474069695697443
4 -1.017351956185236
5 -1.000001047082565
6 -1.000000000000000
If you need 50 or 80 digits you will need to switch to the Symbolic Toolbox, and display using vpa()
NumDig = 50;
x = sym(-0.1);
y = sym(0);
fprintf(' i x \n')
fprintf(' --- ------------- \n')
for i=1:5;
fx=(x(i))^3-(x(i))^2+2;
fxx=3*(x(i))^2-2*(x(i));
y(i)=x(i)-(fx/fxx);
fy=(y(i))^3-(y(i))^2+2;
fyy=3*(y(i))^2-2*(y(i));
x(i+1)=x(i)+([fy-fx]/fyy);
end
for i=1:length(x)
fprintf('%2i %s\n', i, char(vpa(x(i),NumDig)))
end

Sign in to comment.

 Accepted Answer

In your section
if abs(TV-(x(i+1)))<tol
disp(' enough to here')
disp(' -----------')
disp(' x(i+1) ')
disp(' -----------')
x;
disp(' -----------')
disp(' T.V ')
disp(' -----------')
E_T;
disp(' -----------')
disp(' E(i+1) ')
disp(' -----------')
e;
disp(' ------------- ')
end
remove the ';' from the 'x;' and 'E_T;' and 'e;' -- so
if abs(TV-(x(i+1)))<tol
disp(' enough to here')
disp(' -----------')
disp(' x(i+1) ')
disp(' -----------')
x
disp(' -----------')
disp(' T.V ')
disp(' -----------')
E_T
disp(' -----------')
disp(' E(i+1) ')
disp(' -----------')
e
disp(' ------------- ')
end

2 Comments

Hi, Walter Roberson .... thanks a lot , I will try ... thanks again ...
Hi , Walter Roberson .... YOU're a genius ... thanks again ...thanks thanks .

Sign in to comment.

More Answers (1)

increase your number of iteration, you will meet the tolerance target

Community Treasure Hunt

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

Start Hunting!