1

Matlabでアダプティブシンプソンメソッドを再帰的に実装しています。積分後にヒストグラムを生成するために、関数評価が行われるすべてのポイントを保存したいと思います。私は現在持っています:

function [S, points] = adsimp(f, a, b, fv, tol, level, points)
...
d = (a+b)*0.25;
e = (a+b)*0.75;
points = [points, d, e];
...

したがって、関数呼び出しごとに、長さをpoints2つ増やします。Matlabの関数入出力スキームについての私の理解は不十分です。知りたいのですが:

1)入力と出力が変数名を共有する場合、これは単一の変数を使用しますか、それともローカルコピーを作成してから返しますか?

2)コピーの場合、points参照を渡して十分なメモリを事前に割り当てる方法はありますか?

4

1 に答える 1

1

最初の質問に答えるには、ここを参照してください。ほとんどのMATLAB変数は、ハンドルオブジェクト(関数ハンドル、軸ハンドルなど)でない限り、値(行列など)で渡されます。入力変数のローカルコピーは、その変数が関数で変更された場合にのみ作成されます。すなわち。

function y = doTheFunc1(x)
    x(2) = 17;
    y = x;

コピーを作成する必要があります。とは対照的に:

function y = doTheFunc2(x)
    y = x(1);

関数内でコピーを作成する必要がない場合。言い換えれば、MATLABは「コピーオンライト」言語です。これは、出力変数の出力名が何であるかに関係なく当てはまるとほぼ確信しています(つまり、出力と入力の両方に名前が付けられている場合でも、これは当てはまりますx)。

2番目の質問に答えるには、ここで最初の答えを見てください。ネストされた関数またはハンドルオブジェクトの使用を検討してください。

于 2012-11-30T19:58:08.463 に答える