Ваша функция foo
работает нормально. Однако в цикле вывод foo
присваивается только одной переменной, хотя вы пытаетесь поместить оба значения из foo
в строку в своей матрице. Это техничность с MATLAB, которая может показаться раздражающей вначале. Он обрабатывает всю строку вашей матрицы как одну переменную, поэтому мы получаем только первую переменную от foo
. Вторая переменная отбрасывается. Поскольку он возвращает только одну переменную, ваше назначение в вашем цикле на каждой итерации присваивает целой строке одинаковое число, что является первым выходом foo
.
Есть три способа, которые вы можете получить эту работу:
1. Измените вашу foo
функции (а-ля Divakar)
Если вы хотите произвести вектор выходов быть назначены матрицы, вам нужно вернуть одну переменную и объединить оба значения exp(0)
и exp(1)
на выход. Таким образом:
function x = foo()
x = [exp(0) exp(1)];
end
Затем вы можете использовать код цикла.
2. Используйте временные переменные в цикле
Вы можете оставить foo
нетронутыми, но вы должны получить оба выходных переменных из foo
первой, а затем назначить его на матрицу. Таким образом:
N=5;
Results = zeros(N,2);
for i=1:N
[x, y] = foo();
Results(i,:) = [x, y];
end
3. Изменение, как вы пишете Results
(а-ля Дэвид)
Вы можете избавиться от временных переменных, изменяя, как вы звоните foo
. Вам нужно будет проиндексировать в Results
самостоятельно, чтобы получить доступ к каждому значению с вывода foo
в вашем запросе.Поэтому:
N=5;
Results = zeros(N,2);
for i=1:N
[Results(i,1), Results(i,2)] = foo();
end
мне не нравится этот метод, потому что он просто выглядит неаккуратно, но это один из способов, если вы не хотите использовать временные переменные.
Я думаю, что 'x = [exp (0) exp (1)]' внутри этой функции, и вы можете избежать использования 'y' в нем, но должны работать, даже если вы решили сохранить его. Кстати, чтобы получить 'Результаты' непосредственно без петель -' Результаты = repmat ([exp (0) exp (1)], N, 1) '. – Divakar
Да, Дивакар верен. 'foo' - это функция с двумя выходами, но даже если у вас есть вектор 1x2 слева от' = ', Matlab рассматривает его как одну переменную и поэтому выбрасывает второй вывод' foo'. Другим способом решения проблемы является выполнение «[Результаты (i, 1), Результаты (i, 2)] = foo()', что, конечно, не так чисто. – David