Matlab 调试代码,不确定为什么我没有得到正确的x1值 函数[x1]=tutorial1(x0,nMax,tol) %计算函数f(x)=x^3-3^x+1的根 %使用牛顿寻根法。 %投入: %-x0初始猜测 %-nMax迭代次数 %-tol溶液精度公差 %输出: %-x1方程的收敛根 %值x0、nMax、to的初始化 x0=1.5; nMax=15; tol=1e-4; %for循环连续运行15次迭代 对于i=1:nMax fx0=(x0)。^3-3.^(x0)+1; 微分x0=3.*(x0.^2)-3.^x0.*对数(3); %函数f(x0)分别为 x1=x0-fx0./x0; 如果abs(x1-x0)

Matlab 调试代码,不确定为什么我没有得到正确的x1值 函数[x1]=tutorial1(x0,nMax,tol) %计算函数f(x)=x^3-3^x+1的根 %使用牛顿寻根法。 %投入: %-x0初始猜测 %-nMax迭代次数 %-tol溶液精度公差 %输出: %-x1方程的收敛根 %值x0、nMax、to的初始化 x0=1.5; nMax=15; tol=1e-4; %for循环连续运行15次迭代 对于i=1:nMax fx0=(x0)。^3-3.^(x0)+1; 微分x0=3.*(x0.^2)-3.^x0.*对数(3); %函数f(x0)分别为 x1=x0-fx0./x0; 如果abs(x1-x0),matlab,Matlab,您实际上得到了正确的值。用这种方法,你可以数值求解一个方程。因此,您将以公差标准设置的精度(如果可行)收敛到解决方案 执行下面的代码。同样的,数字打印的位数更多,公差更严格,错误打印(我也添加了fx1计算来打印) 它给出了一个接近于2的解决方案(但是如果您向fprintf添加更多的数字,您将看到它不是一个完美的2,而是类似于2.000000000001的数字) 请记住,如果算法收敛,它将为您提供接近理论解的数值解,误差取决于您提供的公差您至少可以花时间学习如何正确格式化帖子中的代码。还有,问题是

您实际上得到了正确的值。用这种方法,你可以数值求解一个方程。因此,您将以公差标准设置的精度(如果可行)收敛到解决方案

执行下面的代码。同样的,数字打印的位数更多,公差更严格,错误打印(我也添加了fx1计算来打印)

它给出了一个接近于2的解决方案(但是如果您向fprintf添加更多的数字,您将看到它不是一个完美的2,而是类似于2.000000000001的数字)


请记住,如果算法收敛,它将为您提供接近理论解的数值解,误差取决于您提供的公差

您至少可以花时间学习如何正确格式化帖子中的代码。还有,问题是什么?我看到的只是代码。请阅读!我很抱歉这是我在这个网站上的第一个问题,我只是想知道这是一个关于牛顿方法的问题,我们应该得到方程根的值,但是我得到了x1的错误值,我不知道为什么?
function [x1] = tutorial1(x0,nMax,tol)
% Calculate the root of the function f(x) = x^3 - 3^x + 1
% using the Newton Method of root-finding.
% Inputs: 
%        - x0     initial guess
%        - nMax   number of iterations
%        - tol    solution accuracy tolerance
% Output:
%        - x1     converged root of the equation
% Initialisation of the values x0, nMax, to

x0 = 1.5;
nMax = 15;
tol = 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;

   if abs(x1-x0)<tol
   break
   end 
   x0 = x1; 

   fprintf('Iteration = %d, x0 = %.4f, x1 = %.4f, fx1 = %.4f\n',i,x0,x1);
    end 

 % Sample output code for monitoring (this should be included in your loop structure.


  return
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