Резюме: Я хочу вызвать функцию, которая возвращает несколько структур n
раз. Как добавить результаты в существующие поля в мои выходные структуры (т. Е. Создавать векторы) вместо создания новых полей, содержащих скаляр каждой итерации?MATLAB: Вложенные функции и структуры
Пример: Рассмотрим функцию sample_fct(x)
, что 1) perfroms некоторые операции по x
и сохраняет результат в пару новых переменных (a
и b
в примере кода), а затем 2) вызывает некоторые суб- функции calculate_one(x)
и calculate_two(x)
с a
и b
как вход. Неважно, что именно делают эти функции. Затем вывод этих функций собирается в struct 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 * п Структуры, каждое поле вновь, содержащие поля 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
и B
быть 1 * 2 Структуры с 1 * п векторов one
и two
, так что желаемый результат должен выглядеть примерно так:
>> A
A =
two: [1 8 27]
one: [1 4 9]
Как именно я могу сделать это без [один, два] является выходной переменной моей функции и не вызывая мою функцию A и B по отдельности?
Почему я хочу сделать это: Я хочу запустить прогнозную модель с различными комбинациями параметров на временные рядах и вычислить некоторые Совершенства-о-формы мер и другие статистические данные за 1 минуту, 1 часов, 1 день и т. Д. В моем примере, x
бы временные ряды, петля над n
цикл по различным векторам параметров, a
и b
представлений с различным временем выборки и один и two
некоторые статистические данные, которые я хочу собрать в A
и структур B
. Я почти уверен, что это гораздо более сложный способ сделать это, но я просто не могу обернуть вокруг себя голову.
Я знаю, что это легко сделать с векторами/матрицами вместо структур, но я хотел бы иметь возможность вызывать мой вывод с именем переменной вместо A.hourly (:, 19) или что-то в этом роде, поскольку Я вычисляю много статистики, а не только два в моем фактическом коде.
Ваш вопрос довольно длинный, не могли бы вы поставить краткое резюме сверху? –
Я пробовал, но я считаю, что мой вопрос слишком сложный, чтобы суммировать его в нескольких предложениях. –
Я только что прочитал резюме: o -> предложение: поместите их в массив ячеек; хорошо, если это не вопрос о том, «как добавить данные в мою матрицу» ... как a = [a newValues] или (end + 1) = newValues –