【问题标题】:matlab iteration with else statement error (output argument)带有 else 语句错误的 matlab 迭代(输出参数)
【发布时间】:2017-09-06 06:17:51
【问题描述】:

我正在尝试完成下面的代码,它是一个迭代代码。是的,我终于让它工作了,但是当我把规定放在标志上时,发现和底部。

我现在得到“在调用“jacobi”期间未分配输出参数“错误”(可能还有其他参数)。”

我知道它与 flag=0 而不是 1 时的 else 语句有关,因为在我尝试将 else 编码放入之前一切正常,现在 我得到这个错误。任何帮助将不胜感激。

当我进入代码时,它会一直以正确的答案和矩阵工作 价值观。当我在 if flag=1 的最终 if 语句中时,它将跳到 else 部分,打印出我希望它打印的所有内容,然后 当绿色箭头使用该功能转到最后一个结束语句并且我单击下一步时,它会发出上述错误。

它怎么能一直工作到最后的 end 语句。我必须失踪 某物。我是新手,如果这很容易,请原谅我。

function [x error niter flag ] =jacobi(A,x,b,maxiter, tol)


if isrow(x)==1
   x=x';
end

if isrow(b)==1
   b=b';
end

if n ~= m               
   disp('The matrix has to be square for this function, please enter a 
   matrix that is sqaure');
end



index=1;
Dinv= inv(diag(diag(A)));
D=diag(diag(A));
flag=0;
y=x;

while index <= maxiter 
    z = Dinv*((D-A)*y+b);
       if norm(z-y)<tol
           flag=1;
           err=abs(norm(z-y));
        break
    end
  y=z;
  index=index+1;
end 


if flag==1
   niter=index;
   x=z;
   error=err;
else
    maxindex='you have reached the maximum iterations of %d which is larger 
    than %d.';
         niter=index;
         maxiter=maxiter;
         sprintf(maxindex,niter,maxiter);
end






end

【问题讨论】:

  • flag 为0 时,您没有为error 分配任何内容,因此该函数不知道该输出是什么。而且您必须更改该变量的名称,error 是一个已保存的单词,可能会导致无法预料的行为。

标签: matlab loops iteration


【解决方案1】:

您的问题是您指定了以下输出:

[x error niter flag ]

但是如果你进入 else 语句,你没有定义,x 也不是error,因此它不能输出这些变量。请注意,不设置 x 在技术上不会产生和错误,因为您将其作为输入,但输出 x 等于输入 x

我个人更喜欢发出警告的版本:

niter=index;
x=z;
error=err;
if flag==0
    warning(strcat('You have reached the maximum iterations of , int2str(niter),' which is larger than ',int2str(maxiter)));
end

而不是

if flag==1
   niter=index;
   x=z;
   error=err;
else
    maxindex='you have reached the maximum iterations of %d which is larger 
    than %d.';
    niter=index;
    maxiter=maxiter;
    x=z;
    error=err;
    sprintf(maxindex,niter,maxiter);
end

【讨论】:

  • x 不是问题,他将其作为输入。
  • 嗯,错误方面你是对的,但我想这仍然不是他想要返回的 x 值,因此我提到了它。
  • 谢谢大家。是的,我知道错误问题,并且更改会很棒,但不幸的是,我被赋予了这项任务并且需要输出。谢谢你,因为现在我至少没有得到那个错误。我把最后一部分改成了这个,但不再得到字符串了
  • 我现在的代码是if flag==1 niter=index; x=z; error=err; else x='N/A'; error='N/A'; maxindex='you have reached the maximum iterations of %d which is larger than %d.'; niter=index; maxiter=maxiter; sprintf(maxindex,niter,maxiter); end
  • 我无法为这条评论正确格式化代码。
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2015-01-05
  • 2012-01-14
  • 2020-12-09
  • 2019-08-26
相关资源
最近更新 更多