While和If循环-满足条件时返回两个结果

时间:2019-05-05 17:27:27

标签: matlab octave

我正在针对问题的根源进行割线处理。

我的问题: 我正在使用While,因此该过程不会进行x次迭代,而在while循环中,我使用了if条件,当满足条件时,它将返回根值(p)。 如果没有更新,它将返回“找不到根,超过了迭代次数”。 事实是,我正在找到一个根,但我还返回了“ No root”消息。

例如,我运行脚本,然后得到: 无根 无根 无根 根:[Number]

目标: 仅返回根目录一次,否则仅返回一条消息“ No root”

试图在if条件内添加一个新的变量“ root”,以便在满足条件时该值现在是一个新变量。

我不知道可能是由于这个原因。

**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**

我需要输入以下两个信息之一,即“ No root”消息或root:[Number]

当时我同时收到两条消息。

谢谢

1 个答案:

答案 0 :(得分:2)

您需要将显示内容移出循环,并从循环中移出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