1

ヘルプが必要です。matlabの関数から行列を返すにはどうすればよいですか?ゼロ(サイズNxN)の行列があります。彼女を更新するために、行列を関数に送信します。更新されたマトリックスを返すにはどうすればよいですか?

コード内:

matrix = zeros(size); %put zeros
updateMatrix(radius,x0,y0,matrix);%call to function

function updateMatrix(radius,x0,y0,matrix)
    update the matrix
end

continue the prog with the updated matrix

更新された行列を返すだけで、他の変数は変更しません。

私はこれをやろうとしました:

matrix = zeros(size); %put zeros
matrix=updateMatrix(radius,x0,y0,matrix);%call to function

function [matrix]=updateMatrix(radius,x0,y0,matrix)
    update the matrix
end

continue the prog with the updated matrix

しかし、それは機能しません。

ありがとう!

4

2 に答える 2

5

Matlabはポインターをサポートしていません。指定しない限り、入力を変更することはできません。このようなことを試してください。

matrix=updateMatrix(radius,x0,y0,matrix)    

function matrix=updateMatrix(radius,x0,y0,matrix)
    %update the matrix
end
于 2012-11-14T17:16:52.920 に答える
2

CまたはC++(または他の任意の数の言語)の場合のように、MATLAB関数へのポインターまたは参照を渡して、データをインプレースで操作することはできません。ただし、MATLABオプティマイザーは、関数内のインプレースでデータを変更することが目的である場合を認識できる必要があります。この最適化は数年前に追加されました。

関数を次のように記述します

function matrix = updateMatrix( radius, x0, y0, matrix )
  % do whatever to the matrix variable
end

それを次のように呼びます

m = zeros( row, col );
m = updateMatrix( r, x0, y0, m );

秘訣は、入力変数と出力変数の名前を同じに保ち、オプティマイザーがデータをインプレースで変更したいことを認識できるようにすることです。

于 2012-11-14T17:26:11.510 に答える