Цикл while и If - возврат обоих результатов при выполнении условий - PullRequest
1 голос
/ 05 мая 2019

Я делаю секущий метод для поиска корня.

Моя проблема: Я использую Хотя, чтобы процесс не проходил x итераций, внутри цикла while я использую условие if, когда оно удовлетворяет условию, возвращает корневое значение (p). Если нет, он обновляется и возвращает «Не найден корень, превышено число итераций». Дело в том, что я нахожу рут, но я также возвращаю сообщение «Нет рута».

Например, я запускаю скрипт и получаю: Нет корня Нет корня Нет корня root: [Number]

Цель: Чтобы вернуть только один раз корень, в противном случае только одно сообщение «Нет рута»

Попытка добавить новую переменную "root" в условие if, чтобы при выполнении условия это значение стало новой переменной.

Не знаю, думал, наверное, это из-за этого.

**While** i<=iter
p=p1-q1*((p1-p0)/(q1-q0));

**if** abs(p-p1)<tol
root=p;
disp('root:')
disp(root)
return
**endif**

i=i+1;
p0=p1
q0=q1
p1=p
q1=f(p);
disp("no root")
**endwhile**

Мне нужно одно из двух, сообщение «Нет корня» или root: [Number]

В то время, когда у меня есть оба сообщения.

Спасибо

1 Ответ

2 голосов
/ 05 мая 2019

Вам нужно вывести дисплей за пределы цикла, а break из цикла вместо return.

root = nan; % preallocate as if there is no root

while i<=iter
   p=p1-q1*((p1-p0)/(q1-q0));

   if abs(p-p1)<tol
      root=p;
      break
   end

   i=i+1;
   p0=p1
   q0=q1
   p1=p
   q1=f(p);
end

if isnan(root)
   disp("no root")
else
   disp('root:')
   disp(root)
end
...