簡體   English   中英

帶有else語句錯誤的matlab迭代(輸出參數)

[英]matlab iteration with else statement error (output argument)

我正在嘗試完成下面的代碼,這是一個迭代代碼。 是的,我終於使它工作了,但是當我把標志的規定放進去時,找到了底部。

我現在得到“在調用“ jacobi”期間未分配的輸出參數“ error”(可能還有其他)。”

我知道它與flag = 0而不是1時的else語句有關,因為一切正常,直到我嘗試放入else編碼,現在我收到此錯誤。 任何幫助將不勝感激。

當我進入代碼時,它會一直使用正確的答案和矩陣值。 當我處於if標志的最后if語句中時,它將跳到else部分,打印出我想要打印的所有內容,然后當綠色箭頭使用該功能轉到最終結語時,我單擊接下來,它會釋放出上面的錯誤。

一直到最后的結束聲明,它如何一直起作用。 我必須丟失一些東西。 我對此很陌生,所以如果這很簡單,請原諒我。

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

您的問題是您指定了以下輸出:

[x error niter flag ]

但是如果進入else語句,則不會定義xerror ,因此它無法輸出這些變量。 請注意,從技術上講,不設置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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM