0

私はscilabでプログラムを作成しようとしています(うまくいけば、同じことがmatlabにも当てはまります)安定したベクトルが見つかる時間を取得します。 .

これを行う最善の方法は再帰関数を使用することだと思うので、次のようにコーディングしました。

function [R]=vector_stable(v,m,i)
    V=v*m;
    if(V == v) then
        R=i;
        abort;
    else
        vector_stable(V,m,i+1);
    end
endfunction

少し説明させてください。V は初期ベクトルと行列の積です。結果がベクトル パラメータと同じである場合、これが発生した時刻を返す必要があります。そうでない場合は、同じ関数を最初のパラメーターとしての結果。ただし、次のエラーが表示されます

-->R=vector_stable(V,M,0)
 !--error 18 
: Too many names.

私の機能は正しいですか?助けてください。

4

2 に答える 2

1

おそらく安定しているということは、「変わらない」という意味ではなく、「収束する」という意味ですか?その場合、ループを終了するためにV==vが等しいかどうかをテストすることはできません。2つのベクトル間の相対的な差を調べて、それがたとえば1%または0.1%未満になった場合に終了することができます。

V==vではなくi==10の場合、(テスト目的で)終了したときにもエラーが発生しますか?

于 2012-06-01T05:40:04.987 に答える
1

関数が正しくないようです。これはもっと似ているかもしれません:

function [R] = vector_stable(v, M, i)

V = v*M;
if(norm(V - v) < 0.001)
    R = i;
    return;
else
    R = vector_stable(V,m,i+1);
end

return
end
于 2012-06-01T06:00:41.260 に答える