1

3 つの関数があり、2 つの変数をすべての関数で実行したいと考えています。私はこれをやってみました:

R = rot(mir(sca(P(1,:),P(2,:))));

しかし、私はこのエラーが発生します:

Error using mir (line 2)
Not enough input arguments.

助言がありますか?

%rot.m
function rot = rot(x,y)
    rot = [ cos(pi/6)*x-sin(pi/6)*y; sin(pi/6)*x+cos(pi/6)*y ];

%mir.m
function mir = mir(x,y)
    mir = [x;(-y)];

%sca.m
function sca = sca(x,y)
    sca = [2*x;2*y];
4

2 に答える 2

1

エラーに驚かないでください。関数mirには 2 つのパラメーターが必要ですが (実際、すべての関数がそれを期待しています)、指定するのは 1 つだけです。マトリックスは 1 つのパラメーターと見なされます。問題を修正するには、次のいずれかを実行できます。

  1. 1 つのパラメーターを受け入れるように再定義mirし、関数内でそれを 2 つの個別の変数に分割する

  2. sca2 つの値を返すように再定義します。

    function [outx, outy] = sca(x, y)
        outx = 2 * x;
        outy = 2 * y;
    

    そして、それらを次mirのように渡します:

    [scax, scay] = sca(x, y);
    mir(scax, scay);
    

明らかに、機能するためにも同じことを行う必要がありrotます。

于 2013-03-07T16:02:09.150 に答える
0

MATLAB では、複数の出力引数がある場合、出力変数を明示的に指定する必要があります。デフォルトでは、関数は常に 1 つの (最初の) 引数を返します。

あなたの状況では、関数の定義を変更して、行列として入力引数を 1 つだけ受け取るようにすることが 1 つの選択肢となります。例えば:

%mir.m
function mir = mir(xy)
    mir = [xy(1,:); -xy(2,:)];

この場合はさらに簡単です (他の関数も単純化できます):

function xy = mir(xy)
    xy(2,:) = -xy(2,:);

あなたがアイデアを得たことを願っています。

次に、実行できます:

R = rot(mir(sca(P(1:2,:))));

何らかの理由で関数定義を変更できない場合は、3 つの関数への 1 行の呼び出しを 3 行に分割する必要があります。

S = sca(P(1,:),P(2,:));
M = mir(S(1,:),S(2,:));
R = rot(M(1,:),M(2,:));
于 2013-03-07T18:01:25.463 に答える