don't know the problem in my while loop

조회 수: 1 (최근 30일)
hamza kharbouch
hamza kharbouch 2022년 1월 1일
답변: hamza kharbouch 2022년 1월 1일
there is also another error idk about of :
Array indices must be positive integers or logical values.
Error in sym/subsref (line 890)
R_tilde = builtin('subsref',L_tilde,Idx);
iteration=0;i=1;
x=zeros(100,1);
syms f(x);
f(x) = input('donner une function : f(x)= ');
e = input('donner une la valuer de erreur : e = ');
x(1) = input('donner la valeur de depart : x1 = ');
while ( e < abs(x(i+1)-x(i)) )
iteration = iteration +1 ;
x(i+1)=x(i)-f(x(i))/diff(f(x(i)));
i=i+1;
end
disp('la value de x apartir de e est', x(i));
disp(iteration);

채택된 답변

the cyclist
the cyclist 2022년 1월 1일
You initialize the value of i to be zero.
Then you try
x(i)
which is equivalent to
x(0)
which means you are trying to access the zeroth element of x. But MATLAB indexing begins at 1, not 0, so you get that error.
  댓글 수: 8
hamza kharbouch
hamza kharbouch 2022년 1월 1일
편집: hamza kharbouch 2022년 1월 1일
yea the purpose of it was to calculate the root of any function u choose as f(x) depending on the value of the start x1 and the error e of how close is enough
i choosed
f(x)=x^3-10 for example
e=0.001
x1=3
for an example . and it didn't work there . i want it to work atleast in the possible cases and i think a polynomial function usually is
the cyclist
the cyclist 2022년 1월 1일
OK. Is the following code equivalent to your example, and give the error you see?
I removed the input functions (because they won't work here), and I also used an anonymous function instead of the symbolic function (because I don't have that toolbox).
iteration=0;
i=1;
x=zeros(100,1);
% syms f(x);
% f(x) = input('donner une function : f(x)= ');
% e = input('donner une la valuer de erreur : e = ');
% x(1) = input('donner la valeur de depart : x1 = ');
f = @(x) x.^3 - 10;
e = 0.001;
x(1) = 3;
while ( e < abs(x(i+1)-x(i)) )
iteration = iteration +1 ;
x(i+1)=x(i)-f(x(i))/diff(f(x(i)));
i=i+1;
end
Error using /
Matrix dimensions must agree.
disp('la value de x apartir de e est', x(i));
disp(iteration);

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

hamza kharbouch
hamza kharbouch 2022년 1월 1일
okey i did minor other simplifications and it's working now
thanks
i=1;
iteration=0;
f = @(x) cos(x);
df = @(x) -sin(x);
e = 0.00001;
x(1) = 3;
while ( e < abs(x(i+1)-x(i)) )
iteration = iteration +1 ;
x(i+1)=x(i)-f(x(i))/df(x(i));
i=i+1;
end
disp(iteration);
disp(x(i));

카테고리

Help CenterFile Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by