Свертка и умножение полиномов
Создайте векторы u
и v
содержа коэффициенты полиномов и .
u = [1 0 1]; v = [2 7];
Используйте свертку, чтобы умножить полиномы.
w = conv(u,v)
w = 1×4
2 7 2 7
w
содержит полиномиальные коэффициенты для .
Создать два вектора и применить операцию свертки.
u = [1 1 1]; v = [1 1 0 0 0 1 1]; w = conv(u,v)
w = 1×9
1 2 2 1 0 1 2 2 1
Длина w
length(u)+length(v)-1
, который в этом примере является 9
.
Создайте два вектора. Найдите центральную часть свертки u
и v
это одного размера с u
.
u = [-1 2 3 -2 0 1 2];
v = [2 4 -1 1];
w = conv(u,v,'same')
w = 1×7
15 5 -9 7 6 7 -1
w
имеет длину 7
. Полная свертка имела бы длину length(u)+length(v)-1
, который в этом примере был бы 10.
u,v
— Входные векторыВходные векторы, заданные или как строка или как вектор-столбцы. Векторы u
и v
могут быть различные длины или типы данных.
Когда u
или v
имеют тип single
, затем выход имеет тип single
. В противном случае, conv
преобразует входные параметры, чтобы ввести double
и возвращается, вводят double
.
Типы данных: double |
single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
Поддержка комплексного числа: Да
shape
— Подраздел свертки'full'
(значение по умолчанию) | 'same'
| 'valid'
Часть свертки, заданная как 'full'
, 'same'
, или 'valid'
.
'full' | Полная свертка (значение по умолчанию). |
'same' | Центральная часть свертки одного размера с |
'valid' | Только те части свертки, которые вычисляются без дополненных нулем ребер. Используя эту опцию, |
Свертка двух векторов, u
и v
, представляет область перекрытия под точками как v
скользит по u
. Алгебраически, свертка является той же операцией как умножение полиномов, коэффициенты которого являются элементами u
и v
.
Позвольте m = length(u)
и n = length(v)
. Затем w
вектор длины m+n-1
чей k
элемент th
Сумма по всем значениям j
тот вывод к легальным индексам для u(j)
и v(k-j+1)
, в частности j
=
max(1,k+1-n):1:min(k,m)
. Когда m
=
n
, это дает
w(1) = u(1)*v(1) w(2) = u(1)*v(2)+u(2)*v(1) w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1) ... w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1) ... w(2*n-1) = u(n)*v(n)
Указания и ограничения по применению:
Входные параметры u
и v
должны быть вектор-столбцы.
Если shape
'full'
(значение по умолчанию), затем только один из u
или v
может быть длинный массив.
Если shape
'same'
или 'valid'
, затем v
не может быть длинный массив.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Для получения информации об ограничениях генерации кода C/C++ смотрите Измеряющие Переменную Ограничения для Генерации кода Функций Тулбокса (MATLAB Coder).
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.