Вы получаете правильное значение на самом деле. С этим методом вы численно решаете уравнение. Таким образом, вы сходитесь к решению с требуемой точностью (если она работает), установленной критериями допуска.
Выполните приведенный ниже код. То же самое с большим количеством цифр для печати номера, более строгим допуском и печатью ошибки (и я добавил вычисление fx1 для его печати).
x0 = 1.5;
nMax = 15;
tol = 1e-10; %1e-4
% for loop acting continously for 15 iterations
for i = 1:nMax
fx0= (x0).^3-3.^(x0)+1;
differentialx0=3.*(x0.^2) - 3.^x0.*log(3);
%function f(x0)respectively
x1 = x0 -fx0./differentialx0;
fx1= (x0).^3-3.^(x0)+1;
error = abs(x1-x0) ;
if error<tol
break
end
x0 = x1;
fprintf('Iteration = %i, x0 = %.6f, x1 = %.6f, fx1 = %.6f, error = %.6f \n',i,x0,x1,fx1,error);
end
% Sample output code for monitoring (this should be included in your loop structure.
Вы получите этот вывод в команде:
Iteration = 1, x0 = 2.288476, x1 = 2.288476, fx1 = -0.821152, error = 0.788476
Iteration = 2, x0 = 1.994137, x1 = 1.994137, fx1 = 0.628953, error = 0.294339
Iteration = 3, x0 = 2.000009, x1 = 2.000009, fx1 = -0.012367, error = 0.005873
Iteration = 4, x0 = 2.000000, x1 = 2.000000, fx1 = 0.000020, error = 0.000009
Это дает решение ближе к 2 (но если вы добавите больше цифр в fprintf, вы увидите, что это не идеальные 2, а что-то вроде 2.000000000001).
Имейте в виду, что если алгоритм сходится, он даст вам численное решение, близкое к теоретическому, с ошибкой, которая зависит от предоставленного вами допуска.