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

采纳的回答

Alan Stevens
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 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by