Передача переменных функциям с входными аргументами переменной длины

#matlab

#matlab

Вопрос:

blkdiag используется varargin для построения блочной диагональной матрицы из входных аргументов (каждая матрица, которую необходимо вставить в диагональ).

out = blkdiag(a,b,c,d,...) , где a, b, c, d, ... матрицы, выводит блочную диагональную матрицу вида

введите описание изображения здесь

Предположим, у меня есть массив ячеек матриц (или какая-либо другая структура данных); как бы я передал это функции, подобной blkdiag ?

Комментарии:

1. Черт. Только что понял ответ. Ну что ж…

2. @Phonon: это вообще не очень хорошая форма 🙂

3. Однако это дает хорошую информацию людям, ищущим помощь в SO.

4. @Jacob: Я не согласен. Я думаю, что вполне нормально опубликовать хороший ответ на ваш собственный вопрос.

5. @Jonas: Да, определенно, но я лично предпочитаю это делать, если мой ответ лучше / остается без ответа.

Ответ №1:

Используйте {:}, чтобы расширить его для функции:

 blocks = cell(2);
blocks{1} = rand(2);
blocks{2} = rand(2);
out = blkdiag(blocks{:})
  

Ответ:

 out =

0.6787    0.7431         0         0
0.7577    0.3922         0         0
     0         0    0.6555    0.7060
     0         0    0.1712    0.0318