概要: 複数の構造体を返す関数を呼び出したいn
。反復ごとにスカラーを含む新しいフィールドを作成する代わりに、結果を出力構造体の既存のフィールドに追加する (つまり、ベクトルを作成する) にはどうすればよいですか?
例: sample_fct( x )
1) いくつかの操作を実行しx
、その結果をいくつかの新しい変数 (a
およびb
サンプル コード) に保存し、2) いくつかのサブ関数を呼び出して入力としてcalculate_one( x )
and calculate_two( x )
を使用する関数を考えます。これらの関数が正確に何をするかは問題ではありません。これらの関数の出力は、 structおよびに収集されます。a
b
A
B
function [A, B] = sample_fct( x )
a = 1 * x;
b = 2 * x;
[A.one, A.two] = call_functions( a );
[B.one, B.two] = call_functions( b );
function [one, two] = call_functions( input )
one = calculate_one( input );
two = calculate_two( input );
function one = calculate_one( input )
one = input.^2;
end
function two = calculate_two( input )
two = input.^3;
end
end
end
n
次に、スクリプトでさまざまな入力パラメーターを使用してこの関数を何度も呼び出したい
n = 3;
for i = 1:n
[A(i), B(i)] = sample_fct( i );
end
これをA
行っB
て 1*n 構造体になると、各フィールドには再びフィールドone
とtwo
. したがって、私の例でn = 3
は、スカラーone
との 3 つのインスタンスがありtwo
ます。サンプル コードの出力は次のようになります。
>> A
A =
1x3 struct array with fields:
one
two
>> A.one
ans =
1
ans =
4
ans =
9
私が実際に望んでいるのはA
、 andB
が 1*n ベクトルone
とを持つ 1*2 構造体でtwo
あるため、目的の出力は次のようになります。
>> A
A =
two: [1 8 27]
one: [1 4 9]
[one, two] を関数の出力変数にせずに、また A と B の関数を別々に呼び出さずに、どうすれば正確にこれを行うことができますか?
これを行う理由: 時系列でさまざまなパラメーターの組み合わせを使用して予測モデルを実行し、1 分、1 時間、1 日などの表現について、いくつかの適合度やその他の統計を計算したいと考えています。私の例でx
は、時系列、n
異なるパラメーター ベクトルのループ オーバー ループ、異なるサンプリング時間の表現、a
および構造体と. これを行うためのはるかに洗練された方法があると確信していますが、頭を包むことはできません。b
two
A
B
構造体の代わりにベクトル/行列を使用すると簡単に実行できることはわかっていますが、多くの計算を行うため、A.hourly(:,19) などの代わりに変数名を使用して出力を呼び出せるようにしたいと考えています。私の実際のコードでは2つだけではありません。