Если это только решение уравнения, используйте
fsolve(@fsecante, 0)
, чтобы найти корень функции, ближайший к 0
.
ans = 0.0257389353753764
Вы ничего не сделалинеправильно, секущий метод просто не сходится для всех начальных точек.Быстрая сходимость гарантируется только в том случае, если конвергенция происходит вообще.
Для метода, использующего секущие корни с гарантией сходимости, используйте метод regula falsi.В его варианте Иллинойса он может быть реализован как
x0=0
f0=fsecante(x0)
x1=1
f1=fsecante(x1)
wanted=10^-8;
iter=1;
while( abs(x1-x0) >= wanted)
iter=iter+1
F=(x1-x0)/(f1-f0);
xn=x1-F*f1
fn = fsecante(xn)
if fn*f0 < 0
x1=x0; f1=f0;
else
f1 = f1*0.5;
end
x0=xn; f0=fn;
end
и дает результат для x0=0; x1=1;
init: x0= 0 , f(x0)= 1
init: x1= 1 , f(x1)= -0.97824464599
n= 2: xn= 0.5054986510525 , f(xn)= -0.803719660003
n= 3: xn= 0.28025344639849 , f(xn)= -1.21180917676
n= 4: xn= 0.081858845659703, f(xn)= -2.38168069197
n= 5: xn= 0.007776289683393, f(xn)= 0.848005195428
n= 6: xn= 0.027227838393959, f(xn)= -0.090747663322
n= 7: xn= 0.025347489826149, f(xn)= 0.0235362327768
n= 8: xn= 0.025734738800888, f(xn)= 0.000253074462073
n= 9: xn= 0.025743020435749, f(xn)= -0.000246366400381
n=10: xn= 0.02573893523423 , f(xn)= 7.80359576957e-09
n=11: xn= 0.025738935363624, f(xn)= 2.40252262529e-13
n=12: xn= 0.025738935363632, f(xn)= -2.39919195621e-13