Изменения элементарного умножения matlab в R2018a [закрыты]

coco спросил: 13 июня 2018 в 12:08 в: matlab

В Matlab R2014a, если

a = [1,2];  %row vector
b = [3,4]'; %column vector

, то

c = a.*b;   %error

будет указывать на ошибку matrix dimension not match.

Однако в Matlab R2018a это правильно и вернет матрицу 2x2, которая

[3   6]
[4   8]

Мне интересно, почему они делают это улучшение; Я думал, что в моем коде сначала что-то не так.

1 ответ

jshamble ответил: 13 июня 2018 в 01:52

Тщательно проверьте размеры матрицы.

Помните, что при переносе внешнего произведения MxN в YxZ,

внутренние измерения должны совпадать (т. е. N = Y) , а результирующая матрица будет иметь размеры MxZ.

Итак, в вашем случае у вас есть вектор строки 1x2 и вектор-столбец 1x2 '= 2x1 ...

, поэтому результирующий вектор будет 1x1 ... вероятно, не то, что вы хотите.

попробуйте умножить с помощью

a = [1,2]';
b = [3,4]; a = 1x2' == 2x1
b = 1x2

, чтобы продукт a b затем приводил к 2x-матрице.

Также обратите внимание, что. является умножением по элементам, поэтому он не будет генерировать 2x2.

coco ответил: 13 июня 2018 в 01:49
На самом деле, мой вопрос в том, почему результаты в двух версиях Matlab отличаются. И какова цель сделать его законным и определить новую операцию в последней версии matlab.
jshamble ответил: 13 июня 2018 в 01:55
. - умножение по элементам, поэтому оно не должно работать, поскольку элементарные операции будут работать только при равных размерах (т. е. 2x1 и 2x1). Но новый Matlab интерпретирует его как внешний (матричный) продукт. Пожалуйста, ознакомьтесь с разницей между матричными продуктами (*) и элементами продуктов (*.)
Cris Luengo ответил: 13 июня 2018 в 03:24
Мало того, что ваш вопрос пропускает отметку - OP спрашивает о .*, а не * - но он также использует неправильные имена: матричный продукт * не является внешний продукт! Кроме того, вы должны прочитать о неявном расширении синглтон.
coco ответил: 14 июня 2018 в 01:22
После расширения элементарное умножение фактически подчиняется правилам матричных произведений.
Cris Luengo ответил: 15 июня 2018 в 09:22
@coco: нет, после одноэлементного расширения умножение по элементам умножает по элементам. Вычисляются не точечные произведения. Каждое выходное значение является результатом произведения двух входных значений. Используя a и b из вашего вопроса (не этот ответ), затем a.*b == repmat(a,2,1).*repmat(b,1,2), который отличается от repmat(a,2,1)*repmat(b,1,2).

Дополнительное видео по вопросу: Изменения элементарного умножения matlab в R2018a [закрыты]

Символьные и численные расчеты в MATLAB

MATLAB 04 Массивы и матрицы

Основы ЦОС: 05. Создаем аккорд в MATLAB (ссылки на скачивание скриптов в описании)