А702а

Дана квадратная матрица порядка [latex]n[/latex].
Получить вектор [latex]Ab[/latex], где [latex]b[/latex]-вектор, элементы которого вычисляются по формуле: [latex]{b}_{i}={\frac{1}{{i}^{2}+2}}[/latex], где [latex]i=1,2,\dots,n[/latex].

2
1 2
3 4
0.666667 1.66667
Пройдено
2
5 6
7 8
2.66667 3.66667
Пройдено

При рассмотрении ряда квадратов чисел [latex](1, 4 , 9, \dots)[/latex], заметно, что числа следующей степени увеличиваются на четные числа, при этом модификатор предыдущего элемента на [latex]2[/latex] меньше чем следующего.
Все что нам остается сделать, это добавить генерацию вектора [latex]b[/latex], через модифицирующий элемент (преимущества которого состоят в частности, в том, что мы намного ускоряем вычисления квадратов, используя уже имеющиеся нас данные), в первый цикл (цикл ввода матрицы [latex]a[/latex]), а во втором цикле уже организовать вывод и вычисление собственно результирующего вектора.

Код программы: http://ideone.com/bl2iJE.

A711a

Задача: Дана матрица [latex]A [/latex] размера [latex]m\times m [/latex]. Получить матрицу  [latex]AA^{*} [/latex] (ее размер [latex]m\times m [/latex]).

Входные данные:

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

Выходные данные:

30 70 20 50
70 174 68 122
20 68 86 44
50 122 44 86

Решение:

Ссылка на ideone С++: http://ideone.com/iXjoLZ

Ссылка на ideone Java: http://ideone.com/u96MDY

 

Вводим матрицу [latex]A[i][j] [/latex] и матрицу [latex]B[j][i] [/latex] в цикле по [latex] i,j[/latex] от одного до [latex] n[/latex]. Умножаем матрицу  [latex] A[/latex] на [latex]A^{*} [/latex].

 

А717а

Задача

Две правые треугольные матрицы [latex]A[/latex] и [latex]B[/latex] порядка [latex]n[/latex] заданы в виде последовательности [latex]\frac{\left(n+1\right)*n}{2}[/latex] чисел: сначала идет [latex]n[/latex] элементов первой строки, затем [latex]n-1[/latex] элемент второй строки, начиная со второго элемента, и т. д. (из последней, [latex]n[/latex]-й строки берется только [latex]n[/latex]-й элемент).

Получить матрицу [latex]A*B[/latex].

Тесты

n матрица A матрица B результат (матрица A*B) комментарий
2 1 2

3

4 5

6

4 17

0 18

пройден
3 1 -1 2

4 6

6

1 -1 1

0 0

3

1 -1 7

0 0 15

0 0 18

пройден

Решение

Сначала обнуляем и вводим обе матрицы. Так как они заданы строкой чисел и известно, что они правые треугольные, заполняем ячейки массива, начиная от диагональных элементов.

Умножение выполнимо, потому что оба сомножителя — квадратные матрицы одного и того же порядка. Перемножаем матрицы стандартным способом (строки первой матрицы на столбцы второй).

Ссылка на код.

A701a

Задача

Даны квадратная матрица [latex]A[/latex] порядка [latex]n[/latex] и вектор [latex]b[/latex] с [latex]n[/latex] элементами. Получить вектор:
a) [latex]Ab[/latex];

Размерность
матрицы
Матрица Вектор Результирующий
вектор
2
1 2
3 4
1
2
5
11
3
3 2 6
3 2 1
5 3 8
4
5
7
64
29
91
4
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6
1
2
3
4
30
70
20
50
 5
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
5
6
7
8
9
115
290
465
640
815

Алгоритм действия достаточно прост:
Вводим размерность матрицы. Потом в цикле вводим саму матрицу. Вводим вектор. Далее идет сам алгоритм матрично-векторного произведения.

Последовательный алгоритм умножения матрицы на вектор может быть представлен следующим образом. Исходные данные: [latex]A[n][m][/latex] – матрицы размерности [latex]n[/latex]× [latex]m[/latex] . [latex]B[m][/latex] – вектор, состоящий из [latex]m[/latex] элементов. Результат: [latex]rezult[n][/latex] – вектор из [latex]n[/latex] элементов.

 

Матрично-векторное умножение – это последовательность вычисления скалярных произведений. Поскольку каждое вычисление скалярного произведения векторов длины [latex]m[/latex] требует выполнения [latex]m[/latex] операций умножения и [latex]m-1[/latex] операций сложения, его трудоемкость порядка [latex]O(m)[/latex]. Для выполнения матрично-векторного умножения необходимо выполнить [latex]n[/latex] операций вычисления скалярного произведения, таким образом, алгоритм имеет трудоемкость порядка [latex]O(nm)[/latex].

Ниже представлен сам код (C++).

Код на Java:

 

Также, Вы можете воспользоваться ссылкой (C++)/ссылкой (Java) на саму программу.