Из вашего описания это звучит как простая матричная операция. Вы просто должны убедиться, что у вас есть правильные размеры для C и S . C должен быть вектором столбца ( длина (C) -by-1), а S должен быть вектором строки (длина 1 × ) (S) ). Предполагая, что они являются правильными размерами, просто сделайте следующее:
mat = C*S;
Если вы не уверены в их размерах, это должно сработать:
mat = (C(:))*(S(:)');
РЕДАКТИРОВАТЬ: На самом деле, я немного с ума сошел с скобками. Некоторые из них не нужны, так как нет проблем с порядком работы. Вот более чистая версия:
mat = C(:)*S(:)';
ПОЯСНЕНИЯ:
Оператор умножения матриц в MATLAB будет производить либо внутренний продукт (что приведет к скалярному значению), либо внешний продукт (что приведет к матрице) в зависимости от размеров векторов, к которым он применяется.
Последнее уравнение, приведенное выше, создает внешний продукт из-за использования оператора двоеточия для изменения размеров векторных аргументов. Синтаксис C (:) преобразует содержимое C в один столбец-вектор. Синтаксис S (:) ' преобразует содержимое S в вектор-столбец, а затем переносит его в вектор-строку. При умножении это приводит к матрице размера ( длина (C) -by- длина (S) ).
Примечание: Это использование оператора двоеточия применимо к векторам и матрицам любого измерения, что позволяет вам преобразовывать их содержимое в один столбец-вектор (что облегчает некоторые операции, как показано этот другой ТАК вопрос ).