How to create a vector and populate it with the first 10 roots using this Newtons method code?
조회 수: 2 (최근 30일)
이전 댓글 표시
I've created this code to calculate roots by using Newtons Method. However I only need the first 10 roots that I find with this code. I think I have to create a 10x1 matrix and populate it with the results that are not repeated. I have no idea how to do that... Any ideas? Thanks!!
syms f(x) x
f(x) = x*tan(x)-0.1; %Function
g = diff(f);
for e=1:100 %Trying different initial guesses to get all the roots
x(1)=e ;%initial guess
for i=1:1000 %it should be stopped when tolerance is reached
x(i+1) = x(i) - f(x(i))/g(x(i));%Newtons Method
if( abs(f(x(i+1)))<0.001) % tolerance
disp(double(x(i+1))); %Display result
break;
end
end
end
댓글 수: 0
채택된 답변
Alan Stevens
2020년 9월 11일
Something more like this perhaps (no need for symbolic maths).
f = @(x) x.*tan(x)-0.1; %Function
g = @(x) x.*tan(x).^2 + tan(x) + x;
tol = 0.001;
X = zeros(10,1); % Space for 10 roots
for i = 1:10 % loop for each root in turn
err = 1;
x = i*pi; % initial guess
while err>tol
xold = x;
x = x - f(x)/g(x);%Newtons Method
err = abs(x - xold);
end
X(i) = x;
end
fprintf('Roots\n')
fprintf('%8.4f \n',X)
Notice the way anonymous functions are defined.
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!