Метод разделения Matlab пополам

#octave #gnu

Вопрос:

Я пытаюсь написать программу для поиска root в GNU octave

 %this is program to calculate root of Non linear differential eqn

display('you can change function in bsfun.m')
a=input("enter maximum valuet");
b=input("entr minimum valuet");
e=input("enter tolerencet");
if (bsfun(a)*bsfun(b)>0)
  display("you have not assumed right values")
endif
 
while ((b-a)>e)
  c=(b a)/2;    %find middile point
  disp c
  if (bsfun(c)==0)    %check middile point is the root 
    break
  elseif (bsfun(a)*bsfun(c)<0)    % Decide the side to repeat the steps
    b=c;
  else 
    a=c;
  endif
end
fprintf("The root is %fn",c);
 

где

 %bisection Function
function out = bsfun(x) 
  out = (x.^2) (2.1*x)-8.82;
 

но это не работает
Я новичок в программировании
, также есть любой способ определить определяемую пользователем функцию в первой программе(без создания отдельного файла, как в c)

Комментарии:

1. Проблема решена Поставьте abs(b-a)

2. как a>b , b-a всегда отрицательно, поэтому вы должны были использовать a-b . Вы также должны добавить элемент управления, который действительно a>b

3. да, это была глупая ошибка