[英]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語句,則不會定義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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.