Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39

Некорректно работает перемножение матриц

28.05.2012, 22:06. Показов 1282. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Задача: произвести действия над матрицами.
Проблема в том, что до операции умножения всё считает правильно, а на умножении выдает неправильную матрицу. Может найдёте ошибку. Подпрограмма с ошибкой отмечена 'problem
Прогуглил, вроде все как и надо, но правильный ответ упорно не хочет выдавать. Заранее спасибо


Visual Basic
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Sub matrixx()
 
Dim A(1 To 2, 1 To 5)
Dim B(1 To 2, 1 To 5)
Dim C(1 To 2, 1 To 5)
Dim E(1 To 2, 1 To 2)
Dim U(5, 2)
Dim G(2, 2)
Dim F(2, 2)
Dim k(2, 5)
Dim H(2, 2)
Dim L(2, 2)
 
Call enter(7, 10, 1, 2, 5, A()) 'prov
Call enter(7, 10, 4, 2, 5, B())
Call enter(7, 10, 7, 2, 5, C())
Call enter(7, 10, 10, 2, 2, E())
 
Call summ(A(), B(), 2, 5, k()) 'prov
Call transp(k(), 2, 5, U()) 'prov
 
 
Call UMNOZH(U(), C(), G(), 2, 2, 2)
 
 
Call umnc(F(), E(), 3, 2, 2) 'prov
Call summ(G(), F(), 2, 2, H()) 'prov
Call transp(H(), 2, 2, L()) 'prov
 
 
Call screen(7, 2, 12, 2, 2, G()) 'prov
 
End Sub
 
Sub enter(sheet, row, col, m, n, D())
For i = 1 To m
For j = 1 To n
 D(i, j) = Worksheets(sheet).Cells(row + i - 1, col + j - 1).Value
Next j, i
End Sub
 
 
'problem
Sub UMNOZH(q6(), q7(), q5(), n, m, p)
For i = 1 To n
For j = 1 To m
For t = 1 To p
q5(i, j) = q6(i, t) * q7(t, j) + q5(i, j)
Next t
Next j
Next i
 
End Sub
Sub transp(z2(), m, n, z1())
For i = 1 To m
For j = 1 To n
z1(j, i) = z2(i, j)
Next j, i
End Sub
 
Sub summ(d1(), d2(), m, n, g1())
For i = 1 To m
For j = 1 To n
g1(i, j) = d1(i, j) + d2(i, j)
Next j, i
End Sub
 
Sub screen(sheet, row, col, m, n, V1())
For i = 1 To m
For j = 1 To n
Worksheets(sheet).Cells(row + i - 1, col + j - 1).Value = V1(i, j)
Next j, i
 
End Sub
 
Sub umnc(f1(), f2(), z, n, m)
For i = 1 To n
For j = 1 To m
f1(i, j) = z * f2(i, j)
Next j, i
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2012, 22:06
Ответы с готовыми решениями:

Перемножение матриц
Доброго времени суток! На листе 2 массива. Размерность массивов может быть разная, но количество строк в одном массиве равно количеству...

Перемножение матриц и векторов
Само задание такое: Заданы две матрицы А(4, 4) и B(3, 3) и два вектора C(4) и D(3). Написать программу вычисления произведений матриц на...

Перемножение транспонированных матриц
Заданы две матрицы B(4,4) и D(3,3). Написать программу транспонирования каждой из заданных матриц с последующим перемножением...

15
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 22:10
глубоко не копал, но, имхо, в
Visual Basic
1
Call UMNOZH(U(), C(), G(), 2, 2, 2)
чиселки неправильные.
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 22:20  [ТС]
Цитата Сообщение от ikki_cf Посмотреть сообщение
глубоко не копал, но, имхо, в
Visual Basic
1
Call UMNOZH(U(), C(), G(), 2, 2, 2)
чиселки неправильные.
А какие могут чиселки быть?) U - это матрица 5 на 2, а С 2 на 5.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 22:24
при умножении матрицы u(5,2) на матрицу с(2,5) получится матрица размером 5х5
для вашей Sub UMNOZH будет так:
Visual Basic
1
Call UMNOZH(U(), C(), G(), 5, 5, 2)
подробности здесь
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 22:29  [ТС]
с этими данными вообще работать отказывается)
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 22:31
Visual Basic
1
Dim G(2, 2)
Цитата Сообщение от ikki_cf Посмотреть сообщение
получится матрица размером 5х5
привели в соответствие?
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 22:32  [ТС]
а куда этот Dim вставлять?
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 22:35
он у вас уже стоит.
в восьмой строке "вашего" кода.
но он неправильный.
нужно исправить.
на правильный.
в той же строке.
в восьмой.
"вашего" кода.
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 22:37  [ТС]
адаптировал, ответ выдает такой же. Противная ошибка.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 22:39
какая?
и где?

а лучше - присоедините файлик с данными и с этим кодом.
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 22:46  [ТС]
Вот файл, седьмой лист, макрос matrixx
Вложения
Тип файла: xls л-1.xls (100.0 Кб, 5 просмотров)
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 23:00
мде...
1
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 23:02  [ТС]
вот оно и не пашет
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
28.05.2012, 23:06
у вас ведь весь код вверх тормашками написан - в формуле матрицы A, B, C имеют пять строк и два столбца, на листе - так же, всё правильно, а в коде они почему-то стали состоящими из двух строк и пяти столбцов...

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

но - причину ошибок я вам нашёл.
переделывайте сами.
0
 Аватар для klays07
0 / 0 / 1
Регистрация: 16.03.2009
Сообщений: 39
28.05.2012, 23:23  [ТС]
спасибо огромное))) переделал)) все четко работает))
0
4 / 4 / 1
Регистрация: 21.05.2012
Сообщений: 12
18.06.2012, 14:53
Честно говоря, подробно не вникал в ваш код, но беглый просмотр наводит на мысль, что ошибка может быть в отсутствии указания типа данных для элементов массива, то есть у вас все данные имею тип Variant. Например, в строке "g1(i, j) = d1(i, j) + d2(i, j)" процедуры Summ возможен разный результат: если тип склавдываемых элементов массива Integer, например d1(i, j)=1, а d2(i, j)=2, то сумма будет равна 3. Но, если это тип вариант, то VBA может трактовть данные элементы, как строки d1(i, j)="1", а d2(i, j)="2", тогда сумма будет равна "12".
Второе предположение, что по умолчанию VBA может полагать, что все ваши данные имеют тип Interger(Long), согласно их инициализации, и при вычислениях, если результат вычисления дробное число, приводить его к целому типу, отбрасывая дробную часть. Таим образом, в итоге вы получите неверный ответ.
Используйте явное объявление типов элементов матирицы (массивов):
Visual Basic
1
2
3
Dim A(...) as Integer
Dim B() as Long
Dim C() as Single
или
Visual Basic
1
Dim D() as Double
в зависимости от решаемой задачи и получаемых в результате вычислений значений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.06.2012, 14:53
Помогаю со студенческими работами здесь

Перемножение и вычитание матриц
Добрый вечер, уважаемые! Честно скажу, что ни капли не разбираюсь в VBA, но срочно нужно написать программу, знаю, что она по сути...

VBA: Перемножение двоичных матриц
Прошу помочь, в выполнении этого задания. Написать процедуру перемножения матрицы A(5,10) на матрицу В(10,4). Данные нужно взять из...

Транспонирование и перемножение матриц VBA
Добрый вечер!!! Интересует вопрос транспонирования и перемножения матриц встроенными функциями Excel(VBA), такими как MINVERSE и MMULT, без...

Транспонирование матриц и перемножение транспонированной на исходную
Задание: Заданы две матрицы В(4,4) и D(3,3). Написать программу транспонирования каждой из заданных матриц с последующим перемножением...

Перемножение транспонированных матриц (исправить ошибку)
Заданы две матрицы B(4,4) и D(3,3). Написать программу транспонирования каждой из заданных матриц с последующим перемножением...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru