2017-09-06 6 views
0

私は反復コードである以下のコードを完成しようとしています。はい、私はついにそれを働かせましたが、私はフラッグのために規定を入れたときに、見つけたと底を見つけました。else文のエラー(出力引数)を伴うmatlab反復

"jacobi"への呼び出し中に出力引数 "error"(およびその他のもの)が割り当てられていません。 "

else文を入れようとするまで、すべてがうまく動作していたので、flag = 0の代わりにelse文を使用しなければならないことが分かりました。 このエラーが発生します。どんな助けも非常に高く評価されるでしょう。

私がコードにステップインすると、正しい答えと行列 の値ですべての方法で動作します。私は最後のifフラグ= 1のための文章では、elseセクションにスキップし、印刷したいものをすべて印刷してから、 緑色の矢印が関数とiで最後の終了文に行くと次へをクリックすると、上記のエラーが表示されます。

どのように最終的な終わりのステートメントまでのすべての方法を動作させることができます。私は逃している必要があります 何か。私はこれに新しいので、これは簡単なことなら私を許してください。

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 
+0

'flag'が0の場合、あなたはERROR''に何を割り当てるので、機能していないがその出力として何を与えるべきかを知らない。その変数の名前を変更する必要があります。「エラー」は保存された単語であり、予期しない動作を引き起こす可能性があります。 – Adiel

答えて

0

あなたの問題は、あなたがの出力を指定していることである:

[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 
+0

'x'は問題ではなく、入力として取得します。 – Adiel

+0

あなたは間違いはありませんが、彼はまだ彼が返そうとしているx値ではないと思います。 –

+0

ありがとうございます。はい、私はエラーの問題を認識しており、変更は素晴らしいでしょうが、私は残念なことにこのタスクを与えられており、出力が必要です。私は少なくともそのエラーを取得しないように今すぐありがとうございました。私はこれに最後の部分を変更しましたが、もう文字列を取得しないでください –