1

私はこのエラーで立ち往生しています:

代入 A(I) = B では、B と I の要素数は同じでなければなりません。

yres(1)=((u - uc).^2) + ((y - yc).^2) -(d.^2); 要素がすべてスカラーであるため、なぜこれがスカラーにならないのかわかりません。スカラーを取得するには何を変更する必要がありますか?

よろしくお願いします

編集:sloedeに感謝します。すべての入力はスカラーですが、それでもこのエラーが発生します

代入 A(I) = B では、B と I の要素数は同じでなければなりません。

     Error in myfun (line 7)
     yres(1)=sqrt(((u - uc).^2) + ((y - yc).^2) ) -d;
    Error in fsolve (line 241)
        fuser = feval(funfcn{3},x,varargin{:});
    Error in modfsolve (line 26)
    x= fsolve(@myfun,x0,options,uc,d,spacing_amplitude,spacing_width);
    Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE
    cannot continue.*
4

2 に答える 2

1

「。」演算子の前とは、次の操作をベクトル全体ではなく要素ごとに適用する必要があることを意味します。したがって

a = b.^2

結果として、 bのすべての要素が二乗され、aに保存されます。したがって、上記のコードステートメントで、uucyycdのいずれかがスカラーではなくベクトルである場合、結果もベクトルになります。

それ以外の場合は、コードに問題はないようです。

于 2012-07-06T05:26:31.090 に答える
0

fsolve のドキュメントを読む: http://www.mathworks.nl/help/toolbox/optim/ug/fsolve.html

それは述べています:

fun
解く非線形連立方程式。funは、ベクトルを受け取り、で評価される非線形方程式であるベクトルxを返す関数です。Fx

明らかに、関数myfunはベクトル入力を処理しません。これは、関数内に次の構造を追加することで解決できます (もちろん、ニーズ/パラメーターに合わせて変更します)。

function out = myfun(in)
    if ~isscalar(in)
        % assuming it's a matrix or vector
        out = reshape(arrayfun(@myfun,in(:)),size(in));
    else
        % your actual function execution statements
        out = dostuffon(in);
    end
end

または関数を適切にベクトル化します (可能な場合)

于 2012-07-06T08:13:43.037 に答える