32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 837
|
||||||
1 | ||||||
Умножение матриц по Винограду19.09.2011, 08:29. Показов 13537. Ответов 38
Метки нет (Все метки)
Для вариантов, предусматривающих решение систем линейных уравнений, умножение матриц и вычисление их определителей, размерность матрицы коэффициентов и ее элементы вводятся пользователем.
Необходимо реализовать следующие положения: для вариантов по темам «матрицы», «системы линейных уравнений»: реализовать генерацию данных случайным образом; включить в функциональность программы оценку времени выполнения алгоритма; оценить время работы алгоритма для матриц размерностей от 5 до 100 (верхний предел может быть больше), результаты измерений записать в файл; при этом время теста должно быть соизмеримо со временем принятия лабораторной работы; на основании данных теста из файла вывести график зависимости времени работы программы от размерности матрицы, сделать выводы. Само задание Решение систем линейных уравнений методом исключения Гаусса с выбором главного элемента по столбцу. Умножение матриц с использованием алгоритма Винограда. может кто знает хотя бы одно задание помогите пожалуйста разобраться Добавлено через 15 минут вот что то нашел ну скорее всего это не то Умножение матриц по Винограду Если посмотреть на результат умножения двух матриц, то видно, что каждый элемент в нем представляет собой скалярное произведение соответствующих строки и столбца исходных матриц. Можно заметить также, что такое умножение допускает предварительную обработку, позволяющую часть работы выполнить заранее. Рассмотрим два вектора V = (v1, v2, v3, v4) и W = (w1, w2, w3, w4). Их скалярное произведение равно: V • W = v1w1 + v2w2 + v3w3 + v4w4. Это равенство можно переписать в виде: V • W = (v1 + w2)(v2 + w1) + (v3 + w4)(v4 + w3) - v1v2 - v3v4 - w1w2 - w3w4. Вы сами можете без труда проверить эквивалентность двух последних выражений. Кажется, что второе выражение задает больше работы, чем первое: вместо четырех умножений мы насчитываем их шесть, а вместо трех сложений - десять. Менее очевидно, что выражение в правой части последнего равенства допускает предварительную обработку: его части можно вычислить заранее и запомнить для каждой строки первой матрицы и для каждого столбца второй. На практике это означает, что над предварительно обработанными элементами нам придется выполнять лишь первые два умножения и последующие пять сложений, а также дополнительно два сложения. Вот как выглядит полный алгоритм Винограда для умножения матрицы G размером a x b на матрицу H размером b x c. Результат записывается в матрицу R размером a x c.
0
|
19.09.2011, 08:29 | |
Ответы с готовыми решениями:
38
Умножение матриц (не работает для неквадратных матриц) Умножение матриц Си Умножение двух матриц Умножение неквадратных матриц |
Заблокирован
|
||||||
19.09.2011, 09:39 | 2 | |||||
результат работы
Enter NUM of equations: 5
a[1][1] = 2 a[1][2] = 0 a[1][3] = 0 a[1][4] = -12 a[1][5] = 3 a[2][1] = 0 a[2][2] = 2 a[2][3] = 0 a[2][4] = 3 a[2][5] = 2 a[3][1] = 0 a[3][2] = 0 a[3][3] = 38 a[3][4] = 5 a[3][5] = 7 a[4][1] = -12 a[4][2] = 13 a[4][3] = 5 a[4][4] = 0 a[4][5] = 0 a[5][1] = 3 a[5][2] = 2 a[5][3] = 7 a[5][4] = 0 a[5][5] = 0 b[1] = 22 b[2] = 14 b[3] = 456 b[4] = 0 b[5] = 5 See input Matrix A: 2.000 0.000 0.000 -12.000 3.000 0.000 2.000 0.000 3.000 2.000 0.000 0.000 38.000 5.000 7.000 -12.000 13.000 5.000 0.000 0.000 3.000 2.000 7.000 0.000 0.000 Vector B: 22.000 14.000 456.000 0.000 5.000 Solving on Gauss method Forvard Gauss course Matrix A: -12.000 13.000 5.000 0.000 0.000 0.000 5.250 8.250 0.000 0.000 0.000 0.000 38.000 5.000 7.000 0.000 0.000 0.000 -11.662 3.474 0.000 0.000 0.000 0.000 3.596 Vector B: 0.000 5.000 456.000 50.794 64.678 Back Gauss course Matrix A: -12.000 13.000 5.000 0.000 0.000 0.000 5.250 8.250 0.000 0.000 0.000 0.000 38.000 5.000 7.000 0.000 0.000 0.000 -11.662 3.474 0.000 0.000 0.000 0.000 3.596 Vector B: 0.000 5.000 456.000 50.794 64.678 Results : <- Это ответы -9.967 -12.491 8.555 1.002 17.987 Press Y for new input
0
|
sandye51
|
19.09.2011, 12:36
#3
|
0
|
sandye51
|
19.09.2011, 12:43
#5
|
Не по теме: использовать операционно-зависимые ашники, где это на самом деле не требуется - правило плохо тона
0
|
Заблокирован
|
|
19.09.2011, 13:07 | 6 |
sandye51, подключив в программу windows.h избавляем себя от кучи гемора, на старіх компиляторах malloc дан в malloc.h а уже в поновей cstdlib. Зачем кому-то этот гемор с хедерами если windows.h своими дефайнами позволяет точно всё подключить???И подключать всё по отдельности это дополнительные строки кода...
0
|
Заблокирован
|
|||||||||||
19.09.2011, 13:13 | 8 | ||||||||||
- выделяем память new и компилируем получившуюся смесь Си с С++. Если есть претензии к алгоритму сразу скажу он проверен многолетним стажем работы, есть желание поковырять код выдираем из проги
0
|
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
|
|
19.09.2011, 13:16 | 9 |
2
|
Заблокирован
|
|
19.09.2011, 13:21 | 10 |
- у ТС были особые требования к ОС, ммм???
Работаю в форточках, на счёт сего скажу что ели есть желание разводить офтоп у меня его нет!На сим перехожу в другой топик до того как не последуют посты ТС... PS:Вам сюдаhttp://en.wikipedia.org/wiki/Windows.h
0
|
sandye51
|
19.09.2011, 13:24
#11
|
2
|
19.09.2011, 13:32 | 12 |
Не по теме: Ну это не показатель, я так же делаю. Из тех соображений, что в каждой IDE расстояние табуляции разное, и, если пользоваться табами, снижается комфортность. А так - четыре пробела и везде одно и то же. А вообще, windows.h is a Windows-specific header, как говорит википедия. Так что лучше его не использовать, если можно обойтись без него.
1
|
32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 837
|
|
19.09.2011, 13:47 [ТС] | 13 |
0
|
3564 / 2711 / 347
Регистрация: 11.03.2009
Сообщений: 6,240
|
|
19.09.2011, 13:53 | 14 |
кроме вышеназванных, есть еще один недостаток. Компилятор не умеет отделять код какой-либо функции из либы, поэтому при статической линковке, в программу будет добавляться код всей либы, соответсвующей хидеру.
0
|
19.09.2011, 13:56 | 15 |
kazak, а разве можно статически прилинковаться к kernel32.dll, user32.dll и другим?.. И разве заголовочник определяет, с какими библиотеками линковаться? Мне казалось, что это делается через параметры сборщика.
0
|
3564 / 2711 / 347
Регистрация: 11.03.2009
Сообщений: 6,240
|
|
19.09.2011, 14:34 | 16 |
Вообще возможно, но поскольку внутренне содержание виндовых либ известно лишь компании Майкрософт (причем оно может менятся от версии к версии), то для других компаний это будет труднореализуемым и с технической точки зрения и с юридической.
Я имел в виду стандартные библиотеки языка. Нет. Тут я наверное загнул. Немного перефразирую, при статической линковке в программу будет добавляться код всех объявленных функций. Думаю так будет правильнее. Для нестандартных библиотек.
0
|
19.09.2011, 22:59 | 17 |
Не по теме: оформление java-программ вообще гласит никаких табуляций, именно пробелы. Не понятно вообще к чему эта шутка поднималась. Сам tab избегаю как только можно. 3-4 пробела самое то:)
0
|
silent_1991
|
20.09.2011, 12:05
#18
|
1
|
32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 837
|
|
02.10.2011, 21:25 [ТС] | 20 |
не запускаеться данный проект,вот такая ошибка
0
|
02.10.2011, 21:25 | |
02.10.2011, 21:25 | |
Помогаю со студенческими работами здесь
20
Параллельное умножение матриц Умножение квадратных матриц Умножение матриц большого размера Не правильно происходит умножение матриц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |