matlab割线法的代码,感觉逻辑没什么问题,但是结果不对

用割线法求根,我感觉逻辑上对,但是不知道为什么运行不出来,麻烦各位帮忙给看看

function [k,y,n] = secant(f,x0,x1,epsilon)
syms x
n = 1;
fx1 = subs(f,x,x1);
while norm(fx1) > epsilon && n<1000
    fx0 = subs(f,x,x0);
    x2 = x1-fx1*(x1-x0)/(fx1-fx0);
    x0 = x1;
    x1 = x2;
    n = n+1;
end
 k = vpa(x1);
 y = fx1;

然后我运行

syms x
fun = x^3-x^2-x-1;
[k,y,n] = secant(fun,2,1,1e-6)

答案应该是1.8多,但是用这个代码运行不出来。

建议这种运算不要用符号运算,syms这种东西是流毒,贻害无穷(syms除了推公式,一无是处,能避免尽量避免

clc;clear
fun = @(x) x^3-x^2-x-1; % 这里直接定义f是x的函数句柄
[k,y,n] = secant(fun,0.1,2,1e-6)

function [k,y,n] = secant(f,x0,x1,epsilon)
n = 1;
fx1 = f(x1);
while norm(fx1) > epsilon && n<1000
    fx0 = f(x0);
    x2 = x1-fx1*(x1-x0)/(fx1-fx0);
    x0 = x1;
    x1 = x2;
    fx1 = f(x1); % 这里缺了一项
    n = n+1;
end
k = x1;
y = fx1;
end

结果

k =

   1.839286655041187


y =

    -5.479815636810770e-07


n =

     8