Цикл Matlab над переменными (новичок) - PullRequest
2 голосов
/ 15 января 2012

Я хотел бы применить функцию к нескольким переменным. Есть ли хороший способ сделать это?

Как:

M = ones(2,2)
N = zeros(3,3)
M = M + 1
N = N + 1

Работает, но я хотел бы сделать что-то вроде:

M = ones(2,2)
N = zeros(3,3)
L = ?UnknownStructure?(M, N)
for i = 1:length(L)
    L(i) = L(i) + 1
end

Или есть лучший способ полностью применить функцию к набору переменных?

Ответы [ 3 ]

4 голосов
/ 15 января 2012

Вы можете использовать ячейки:

M = ones(2,2)
N = zeros(3,3)
L = {M, N};
funct=@(x) x+1;
L2=cellfun(funct, L, 'UniformOutput',false);
2 голосов
/ 15 января 2012

В Matlab нет такой вещи, как ссылки, в том смысле, что вы можете иметь два разных имени переменных, указывающих на одну и ту же матрицу.

Однако вы можете иметь массив матриц.

L = { M, N };
for i = 1:length(L)
    L{i} = L{i} + 1
end

Я тестировал этот код в Octave. Однако обратите внимание: исходные матрицы M, N не изменяются при этом.

0 голосов
/ 15 января 2012

Попробуйте:

a = ones(2,2)
arrayfun(@(x) 2*x , a)

Вы можете сделать функцию (2*x) как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...