摘要:我想调用一个返回多个结构n
时间的函数。如何将结果附加到输出结构中的现有字段(即创建向量),而不是在每次迭代时创建包含标量的新字段?
示例:考虑一个函数sample_fct( x )
,它 1) 执行一些操作x
并将结果保存在几个新变量中(a
以及b
示例代码中),然后 2) 调用一些子函数calculate_one( x )
并 calculate_two( x )
使用a
和b
作为输入。这些函数究竟是做什么的并不重要。然后将这些函数的输出收集到 structA
和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
我有 3 个标量实例one
和two
. 我的示例代码的输出如下所示:
>> A
A =
1x3 struct array with fields:
one
two
>> A.one
ans =
1
ans =
4
ans =
9
我真正想要的是A
andB
是 1*2 具有 1*n 个向量的结构体one
and two
,所以所需的输出应该是这样的:
>> A
A =
two: [1 8 27]
one: [1 4 9]
如果没有 [one, two] 作为我的函数的输出变量并且没有分别为 A 和 B 调用我的函数,我该如何做到这一点?
为什么要这样做:我想在时间序列上运行具有不同参数组合的预测模型,并计算 1 分钟、1 小时、1 天等表示的一些拟合优度度量和其他统计数据。在我的示例中,x
将是时间序列、n
不同参数向量上的循环a
以及b
具有不同采样时间的表示以及two
我想在 structsA
和B
. 我很确定有一种更复杂的方法可以做到这一点,但我就是无法理解它。
我知道用向量/矩阵而不是结构很容易做到这一点,但我希望能够用变量名而不是 A.hourly(:,19) 或类似的名称来调用我的输出,因为我计算了很多统计数据,而不仅仅是我的实际代码中的两个。