Умножение матрицы на вектор при разделении данных по строкам. С умножение матрицы на вектор


Умножение матрицы на вектор, формула и примеры

Умножение матрицы на вектор производится по правилу «строка на столбец». При умножении матрицы на вектор-столбец число столбцов в матрице должно совпадать с числом строк в векторе-столбце. Результатом умножения матрицы на вектор-столбец есть вектор-столбец:

   

При умножении матрицы на вектор-строку, умножаемая матрица может быть только вектором-столбцом, причем количество строк в векторе-столбце должно совпадать с количеством столбцов в векторе-строке. Результатом такого умножения будет квадратная матрица соответствующей размерности:

   

Примеры умножения матриц на вектора

Понравился сайт? Расскажи друзьям!

ru.solverbook.com

умножение матрицы на вектор | C++ для приматов

Даны квадратная матрица [latex]A[/latex] порядка [latex]n[/latex], векторы [latex]x[/latex] и [latex]y[/latex] с [latex]n[/latex] элементами. Получить вектор [latex]A(x+y)[/latex].

Примеры:

Размерность матрицы Матрица Вектор x Вектор y Результирующий вектор A(x+y)
2 2 3

3 2

3 4 5 6 46 44
 3  2 1 4

5 2 6

3 4 8

 2 2 2  4 4 4  42 78 90
 4  1 2 3 4

3 4 1 6

2 3 8 1

4 5 0 8

 1 2 3 4  5 4 3 2  60 84 84 102
 5

 0 0 0 0 0

0 0 0 0 0

0 0 1 0 0

0 0 0 0 0

0 0 0 0 0

 4 6 7 8 0  2 8 9 3 1  0 0 16 0 0

Алгоритм решения: Вводим матрицу [latex]A[/latex] порядка [latex]n[/latex]. Вводим векторы [latex]x[/latex] и [latex]y[/latex], прибавляем векторы [latex]x[/latex] и [latex]y[/latex]. После умножаем матрицу [latex]A[/latex] на вектор [latex]x + y[/latex] и получаем вектор [latex]A(x + y)[/latex]. С помощью цикла выводим результирующий вектор.

Код программы :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#include <iostream>

using namespace std;

int main() {

int n;

cin >> n;

int x[n];

int y[n];

int z[n];

int A[n][n];

int result_vector[n];

for (int i = 0; i < n; i++){

for (int j = 0; j < n; j++)

cin >> A[i][j];

}

for (int i = 0; i < n; i++){

cin>>x[i];

}

for (int i = 0; i < n; i++){

cin>>y[i];

}

for (int i = 0; i < n; i++){

z[i]=x[i]+y[i];            

}

for(int i=0; i<n; i++)

{

result_vector[i]=0;

for(int j=0; j<n; j++)

{

result_vector[i]+=A[i][j]*z[j];  

}

}

for(int i=0; i<n; i++)

{

cout << result_vector[i] << endl;

}

return 0;

}

Оригинал кода можно увидеть перейдя по ссылке

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import java.util.*;

import java.lang.*;

import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */

class Ideone

{

public static void main (String[] args) throws java.lang.Exception

{

int n;

Scanner in = new Scanner(System.in);

n = in.nextInt();

double []x = new double[n];

double []y = new double[n];

double []z = new double[n];

double [] result_vector = new double[n];

double [][] A = new double[n][n];

for (int i = 0; i < n; i++){

for (int j = 0; j < n; j++){

A[i][j]=in.nextDouble();

}

}

for (int i = 0; i < n; i++){

x[i]=in.nextDouble();

}

for (int i = 0; i < n; i++){

y[i]=in.nextDouble();

}

for (int i = 0; i < n; i++){

z[i]=x[i]+y[i];            

}

for(int i=0; i<n; i++)

{

result_vector[i]=0;

for(int j=0; j<n; j++)

{

result_vector[i]+=A[i][j]*z[j];  

}

}

for(int i=0; i<n; i++)

{

System.out.printf("%.6f ",result_vector[i]);

}

}

}

Оригинал кода можно увидеть перейдя по ссылка

Posted in 6. Многомерные массивы. Tagged умножение матрицы на вектор.

Задача.  Дана квадратная матрица порядка n. Получить вектор  Ab, где b-вектор, элементы которого вычисляются по формулам:

[latex]b_{i}=\begin{cases}\frac{1}{i^{2}+2} & \text{, if i mod 2=0} \\ \frac{1}{i} & \text{, other case } \end{cases}[/latex]

i=(1,…,n).

Тесты:

Вход Выход Комментарий
41 2 1 11 3 6 91 2 1 11 6 3 18 1.72222 4 1.72222 4 Пройден
30 0 01 1 12 2 2 0 1.5 3 Пройден
41 2 2 93 4 1 181 1 1 10 0 0 0 2.5 5 1.55556 0 Пройден

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#include <iostream>

using namespace std;

 

int main()

{

int n;

cin>>n;

double b[n];

for (int i=0; i<n; i++)

{

            if((i+1)%2==0) b[i]=1.0/((i+1)*(i+1) + 2);

    else b[i]=1.0/(i+1);

        }

 

double A[n][n];

for (int i=0; i<n; i++)

    for (int j=0; j<n; j++)

        cin>>A[i][j];

        double Ab[n];

        for (int i=0; i<n; i++)

        {  

        Ab[i]=0;

        for (int j=0; j<n; j++)

        {

     Ab[i]+=A[i][j]*b[j];

        }

        }

        for (int i=0; i<n; i++)

        cout<<Ab[i]<<" ";

return 0;

}

Решение:

Согласно условию находим вектор b. По формуле [latex]Ab_{i}=\sum_{j=1}^{n}A_{ij}b_{j}[/latex], i=(0,…,n) находим произведение матрицы на вектор.

С работой программы можно ознакомится здесь.

Posted in 6. Многомерные массивы. Tagged квадратная матрица, умножение матрицы на вектор.

cpp.mazurok.com

Умножение комплексного вектора на матрицу

Результат умножения вектора-строки на матрицу с*A
Результат умножения
Результат умножения матрицы на вектор-столбец A*b
Результат умножения

Умножение Вектора на матрицу

Каждый вектор можно рассматривать как одностолбцовую или однострочную матрицу. Одностолбцовую матрицу будем называть вектор-столбцом, а однострочную матрицу - вектор-строкой.

Если A-матрица размера m*n, то вектор столбец b имеет размер n, а вектор строка b имеет размер m.

Таким образом, что бы умножить матрицу на вектор, надо рассматривать вектор как вектор-столбец. При умножении вектора на матрицу, его нужно рассматривать как вектор -строку.

Пример.

Умножить матрицу

 

на комплексный вектор

 

Получаем результат

Результат умножения матрицы на вектор A*b
Результат умножения вектора на матрицу b*A

 

Как видите при неизменной размерности вектора, у нас могут существовать два решения.

Хотелось бы обратить Ваше внимание на то что матрица в первом и втором варианте, несмотря на одинаковые значения, совершенно разные (имеют различную размерность)

 

В первом случае вектор считается как столбец и тогда необходимо  умножать матрицу на вектор, а во втором случае у нас вектор-строка и тогда у нас произведение вектора на матрицу.

 

 

Свойства умножения матрицы на вектор

 - матрица   - вектор столбец   - вектор-строка  - произвольное число

1. Произведение матрицы на сумму векторов-столбцов равна сумме произведений матрицы на каждый из векторов

2. Произведение суммы векторов-строк на матрицу  равна сумме произведений векторов на матрицу

3. Общий множитель вектора  можно вынести за пределы произведения матрицы на вектор/вектора на матрицу

4.Произведение вектора-строки на произведение матрицы и вектора столбца, равноценно произведению произведения вектора-строки на матрицу и вектора-столбца.

 

Удачных расчетов!!

 

  • Умножение матриц с комплексными значениями онлайн >>

www.abakbot.ru

Умножение матрицы на вектор при разделении данных по строкам

Данный алгоритм основан на представлении матрицы непрерывными наборами (горизонтальными полосами) строк. Полученные полосы распределяются по процессорам вычислительной системы. Вектор b копируется на все процессоры. Перемножение полосы матрицы на вектор (а данная операция может быть выполнена процессорами параллельно) приводит к получению блока элементов результирующего вектора с. Для объединения результатов расчета и получения полного вектора c на каждом из процессоров вычислительной системы необходимо выполнить операцию обобщенного сбора данных.

Умножение матрицы на вектор при разделении данных по столбцам

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

Параллельный алгоритм умножения матрицы на вектор начинается с того, что каждый процессор i выполняет умножение своей вертикальной полосы матрицы А на блок элементов вектора b, в итоге на каждом процессоре получается вектор промежуточных результатов c'(i). Далее для получения элементов результирующего вектора с процессоры должны обменяться своими промежуточными данными между собой.

Умножение матрицы на вектор при блочном разделении данных

 

Рассмотрим теперь параллельный алгоритм умножения матрицы на вектор, который основан на ином способе разделения данных – на разбиении матрицы на прямоугольные фрагменты (блоки). При таком способе разделения данных исходная матрица A представляется в виде набора прямоугольных блоков. Вектор b также должен быть разделен на блоки. Блоки матрицы и блоки вектора распределены между процессорами вычислительной системы. Логическая (виртуальная) топология вычислительной системы в данном случае имеет вид прямоугольной двумерной решетки. Размеры процессорной решетки соответствуют количеству прямоугольных блоков, на которые разбита матрица A. На процессоре pi,j, находящемся на пересечении i-й строки и j-го столбца процессорной решетки, располагается блок Ai,j матрицы A и блок bj вектора b.

После перемножения блоков матрицы A и вектора b каждый процессор pi,j будет содержать вектор частичных результатов c'(i,j). Поэлементное суммирование векторов частичных результатов для каждой горизонтальной строки процессорной решетки позволяет получить результирующий вектор c.

Матричное умножение

Задача умножения матрицы на матрицу определяется соотношениями:

(для простоты изложения материала будем предполагать, что перемножаемые матрицы A и B являются квадратными и имеют порядок n×n). Как следует из приведенных соотношений, вычислительная сложность задачи является достаточно высокой (оценка количества выполняемых операций имеет порядок n3).

Основу возможности параллельных вычислений для матричного умножения составляет независимость расчетов для получения элементов сij результирующей матрицы C. Тем самым, все элементы матрицы C могут быть вычислены параллельно при наличии n2 процессоров, при этом на каждом процессоре будет располагаться по одной строке матрицы A и одному столбцу матрицы B. При меньшем количестве процессоров подобный подход приводит к ленточной схеме разбиения данных, когда на процессорах располагаются по несколько строк и столбцов (полос) исходных матриц.

Другой широко используемый подход для построения параллельных способов выполнения матричного умножения состоит в применении блочного представления матриц, при котором исходные матрицы A, B и результирующая матрица C рассматриваются в виде наборов блоков (как правило, квадратного вида некоторого размера m×m). Тогда операцию матричного умножения матриц A и B в блочном виде можно представить следующим образом:

где каждый блок Cij матрицы C определяется в соответствии с выражением:

Полученные блоки Cij также являются независимыми, и, как результат, возможный подход для параллельного выполнения вычислений может состоять в расчетах, связанных с получением отдельных блоков Cij, на разных процессорах. Применение подобного подхода позволяет получить многие эффективные параллельные методы умножения блочно-представленных матриц.

Ленточный алгоритм

При ленточной схеме разделения данных исходные матрицы разбиваются на горизонтальные (для матрицы A) и вертикальные (для матрицы B) полосы. Получаемые полосы распределяются по процессорам, при этом на каждом из имеющегося набора процессоров располагается только по одной полосе матриц A и B. Перемножение полос (а данная операция может быть выполнена процессорами параллельно) приводит к получению части блоков результирующей матрицы C. Для вычисления оставшихся блоков матрицы C сочетания полос матриц A и B на процессорах должны быть изменены. В наиболее простом виде это может быть обеспечено, например, при кольцевой топологии вычислительной сети (при числе процессоров, равном количеству полос) – в этом случае необходимое для матричного умножения изменение положения данных может быть реализовано циклическим сдвигом полос матрицы B по кольцу. После многократного выполнения описанных действий (количество необходимых повторений является равным числу процессоров) на каждом процессоре получается набор блоков, образующий горизонтальную полосу матрицы C.

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



infopedia.su

Умножение комплексного вектора на матрицу

Результат умножения вектора-строки на матрицу с*A
Результат умножения
Результат умножения матрицы на вектор-столбец A*b
Результат умножения

Умножение Вектора на матрицу

Каждый вектор можно рассматривать как одностолбцовую или однострочную матрицу. Одностолбцовую матрицу будем называть вектор-столбцом, а однострочную матрицу - вектор-строкой.

Если A-матрица размера m*n, то вектор столбец b имеет размер n, а вектор строка b имеет размер m.

Таким образом, что бы умножить матрицу на вектор, надо рассматривать вектор как вектор-столбец. При умножении вектора на матрицу, его нужно рассматривать как вектор -строку.

Пример.

Умножить матрицу

 

на комплексный вектор

 

Получаем результат

Результат умножения матрицы на вектор A*b
Результат умножения вектора на матрицу b*A

 

Как видите при неизменной размерности вектора, у нас могут существовать два решения.

Хотелось бы обратить Ваше внимание на то что матрица в первом и втором варианте, несмотря на одинаковые значения, совершенно разные (имеют различную размерность)

 

В первом случае вектор считается как столбец и тогда необходимо  умножать матрицу на вектор, а во втором случае у нас вектор-строка и тогда у нас произведение вектора на матрицу.

 

 

Свойства умножения матрицы на вектор

 - матрица   - вектор столбец   - вектор-строка  - произвольное число

1. Произведение матрицы на сумму векторов-столбцов равна сумме произведений матрицы на каждый из векторов

2. Произведение суммы векторов-строк на матрицу  равна сумме произведений векторов на матрицу

3. Общий множитель вектора  можно вынести за пределы произведения матрицы на вектор/вектора на матрицу

4.Произведение вектора-строки на произведение матрицы и вектора столбца, равноценно произведению произведения вектора-строки на матрицу и вектора-столбца.

 

Удачных расчетов!!

 

  • Умножение матриц с комплексными значениями онлайн >>

www.abakbot.ru

Умножение матрицы на вектор при разделении данных по строкам

Данный алгоритм основан на представлении матрицы непрерывными наборами (горизонтальными полосами) строк. Полученные полосы распределяются по процессорам вычислительной системы. Вектор b копируется на все процессоры. Перемножение полосы матрицы на вектор (а данная операция может быть выполнена процессорами параллельно) приводит к получению блока элементов результирующего вектора с. Для объединения результатов расчета и получения полного вектора c на каждом из процессоров вычислительной системы необходимо выполнить операцию обобщенного сбора данных.

4.2.2. Умножение матрицы на вектор при разделении данных по столбцам

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

Параллельный алгоритм умножения матрицы на вектор начинается с того, что каждый процессор i выполняет умножение своей вертикальной полосы матрицы А на блок элементов вектора b, в итоге на каждом процессоре получается вектор промежуточных результатов c'(i). Далее для получения элементов результирующего вектора с процессоры должны обменяться своими промежуточными данными между собой.

4.2.3. Умножение матрицы на вектор при блочном разделении данных

Рассмотрим теперь параллельный алгоритм умножения матрицы на вектор, который основан на ином способе разделения данных – на разбиении матрицы на прямоугольные фрагменты (блоки). При таком способе разделения данных исходная матрица A представляется в виде набора прямоугольных блоков. Вектор b также должен быть разделен на блоки. Блоки матрицы и блоки вектора распределены между процессорами вычислительной системы. Логическая (виртуальная) топология вычислительной системы в данном случае имеет вид прямоугольной двумерной решетки. Размеры процессорной решетки соответствуют количеству прямоугольных блоков, на которые разбита матрица A. На процессоре pi,j, находящемся на пересечении i-й строки и j-го столбца процессорной решетки, располагается блок Ai,j матрицы A и блок bj вектора b.

После перемножения блоков матрицы A и вектора b каждый процессор pi,j будет содержать вектор частичных результатов c'(i,j). Поэлементное суммирование векторов частичных результатов для каждой горизонтальной строки процессорной решетки позволяет получить результирующий вектор c.

4.3. Матричное умножение

Задача умножения матрицы на матрицу определяется соотношениями:

(для простоты изложения материала будем предполагать, что перемножаемые матрицы A и B являются квадратными и имеют порядок n×n). Как следует из приведенных соотношений, вычислительная сложность задачи является достаточно высокой (оценка количества выполняемых операций имеет порядок n3).

Основу возможности параллельных вычислений для матричного умножения составляет независимость расчетов для получения элементов сij результирующей матрицы C. Тем самым, все элементы матрицы C могут быть вычислены параллельно при наличии n2 процессоров, при этом на каждом процессоре будет располагаться по одной строке матрицы A и одному столбцу матрицы B. При меньшем количестве процессоров подобный подход приводит к ленточной схеме разбиения данных, когда на процессорах располагаются по несколько строк и столбцов (полос) исходных матриц.

Другой широко используемый подход для построения параллельных способов выполнения матричного умножения состоит в применении блочного представления матриц, при котором исходные матрицы A, B и результирующая матрица C рассматриваются в виде наборов блоков (как правило, квадратного вида некоторого размера m×m). Тогда операцию матричного умножения матриц A и B в блочном виде можно представить следующим образом:

где каждый блок Cij матрицы C определяется в соответствии с выражением:

Полученные блоки Cij также являются независимыми, и, как результат, возможный подход для параллельного выполнения вычислений может состоять в расчетах, связанных с получением отдельных блоков Cij, на разных процессорах. Применение подобного подхода позволяет получить многие эффективные параллельные методы умножения блочно-представленных матриц.

studfiles.net

Умножение вектора на матрицу — КиберПедия

По обычным правилам матричного умножения осуществляется умножение на матрицу слева вектора-столбца, а также умножение вектора-строки на матрицу справа. Поскольку элементы вектора-столбца или вектора-строки можно записать (что обычно и делается), используя один, а не два индекса, это умножение можно записать так:

для вектора-столбца v (получая новый вектор-столбец Av):

для вектора-строки s (получая новый вектор-строку sA):

Вектор-строка, матрица и вектор столбец могут быть умножены друг на друга, давая число (скаляр):

(Порядок важен: вектор-строка слева, вектор-столбец справа от матрицы).

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

  • При представлении вектора вещественного векторного пространства в ортонормированном базисе (что эквивалентно использованию прямоугольных декартовых координат) соответствующие ему вектор-столбец и вектор-строка, представляющие собой набор компонент вектора, будут совпадать (поэлементно), отличаясь лишь формально своим изображением для корректности матричных операций (т.е. один получается из другого просто операцией транспонирования). При использовании же неортонормированных базисов (например, косоугольных координат или хотя бы разных масштабов по осям) вектор-столбец соответствует компонентам вектора в основном базисе, а вектор-строка - в базисе, дуальном основному [4] (Иногда о пространстве векторов-строк говорят также как об особом, дуальном пространству векторов-столбцов, пространстве ковекторов).

Заметим, что обычной мотивировкой введения матриц и определения операции матричного умножения (см.тж.в статье об умножении матриц) является именно введение их, начиная с умножения вектора на матрицу (которое вводится исходя из преобразований базиса или вообще линейных операций над векторами), а уже затем композиции преобразований сопоставляется произведение матриц. Действительно, если новый вектор Av, полученный из исходного вектора v преобразованием, представимым умножением на матрицу A, преобразовать теперь еще раз, преобразованием, представимым умножением на матрицу B, получив B(Av), то, исходя из правила умножения вектора на матрицу, приведенного в начале этого параграфа (используя ассоциативность умножения чисел и меняя порядок суммирования), нетрудно увидеть в результате формулу, дающую элементы матрицы (BA), представляющую композицию первого и второго преобразований, и совпадающую с обычным определением матричного умножения.

Комплексное сопряжение

Если элементами матрицы являются комплексные числа, то комплексно сопряжённая (не путать с эрмитово сопряжённой! см. далее) матрица равна . Здесь — число, комплексно сопряжённое к .

cyberpedia.su