Об игре
Новости
Войти
Регистрация
Рейтинг
Форум
19:42
4244
 online
Требуется авторизация
Вы не авторизованы
   Форумы-->Форум для внеигровых тем-->
1|2

Авторкак перемножить матрицы? (VBA)
задача
Даны три матрицы А, В и С размерностью (n×m). Вычислить
F = A*B-A*C+C*B

Сначала вводим 3 матрицы

Sub ïðîãà3()
Dim i, j, L, n, m As Integer
Dim a(), b(), c() As Single
n = InputBox("n="): m = InputBox("m=")
ReDim a(n, m): ReDim b(n, m): ReDim c(n, m)
Randomize
Worksheets(1).Select
Cells.Clear
For i = 1 To n
For j = 1 To m
a(i, j) = Int(10 * Rnd())
Cells(i, j) = a(i, j)
Next j: Next i

For i = 1 To n
For j = 1 To m
b(i, j) = Int(10 * Rnd())
Cells(i, j + (2 * m)) = b(i, j)
Next j: Next i

For i = 1 To n
For j = 1 To m
c(i, j) = Int(10 * Rnd())
Cells(i, j + (4 * m)) = c(i, j)
Next j: Next i

а как перемножить хз, ведь нужно умножать строки на столбцы.. И ещё всё усложняется тем что матрицы могут быть разных размеров..
Если есть достойные программеры, а не балаболы, то помогите пожалуйста
разных размеров, но есть правило...
Матрицу A можно умножить не на всякую матрицу B. Необходимо, чтобы число столбцов матрицы A было равно числу строк матрицы B

а перемножать просто строки первой на столбцы второй по очереди...
Элемент ci,j стоящий на пересечении i строки и j столбца матрицы С равен сумме попарных произведений элементов i строки матрицы A и j столбца матрицы B

сi,j=
n
∑
k=1
ai,k·bk,j
для 1nsee:
можно в личку написать тоже самое, а то не всё прописалось как надо
A*B
A*C
а вот ииза этого, сдается мне, что В и С одного развера и квадратные должны быть...




а значит и А должна быть квадратной матрицей Оо
ну С точно квадратная, ну и следовательно все остальные тоже ибо есть + и -
For i = 1 To n
For j = 1 To n
{
d(i, j) = 0
For k = 1 To n
d(i,j) = d(i,j)+a(i,k)*c(k,j)
}
Next j Next i Next k
ну допустим берём 2 матрицы одинаковых размеров (3*4)

2353
7522
8654

1586
8635
2456

то получится матрица где число строк равно числу строк в первой матрице, А число столбцов равно числу столбцов во второй.. так?
для letalis:
For k = 1 To n
что за К?
для letalis:
For k = 1 To n
что за К?

счетчик также как и і
для letalis:
а что он считает то?
For i = 1 To n
For j = 1 To n
{
d(i, j) = 0
For k = 1 To n
d(i,j) = d(i,j)+a(i,k)*c(k,j)
}
Next j Next i Next k


ошибку выдаёт и подчёркивает Next j
для Убийца_матрёшек:
всё со своим бэйсиком мучаешься?
для Lord-Romeo:
да, но прогресс большой
ошибку выдаёт и подчёркивает Next j [/quote
так я не знаю бэйсика
For i = 1 To n
For j = 1 To n
d(i, j) = 0
For k = 1 To n
d(i,j) = d(i,j)+a(i,k)*c(k,j)
Next j: Next i: Next k

попробуй так
For i = 1 To n
For j = 1 To n
d(i, j) = 0
For k = 1 To n
d(i,j) = d(i,j)+a(i,k)*c(k,j)
Next k: Next j: Next i

так вроде получается, но всё равно выдаёт ошибку(не выводит)
И ещё мне непонятно.. т.е про перемножении 2х одинаковых матриц, должна обязательно получится квадратная, так?
И ещё мне непонятно.. т.е про перемножении 2х одинаковых матриц, должна обязательно получится квадратная, так?
да
a(i,k)*c(k,j)
тут мы пишем что матрица(ну допустим) A с элементами (i,k), а выше она была с элементами (i,j) тоже не понятно
16+
C=A*B
пусть А имеет 5 строк и 3 столбца (5;3)
пусть В имеет 3 строки и 4 столбца (3;4)
тогда С будет иметь 5 строк и 4 столбца (5;4)

в общем случае А(n;m)*B(m;k)=C(n;k)
для letalis:
вообщем понятно, но почему то ошибка... не выводит мне матрицу d(i,j)
может из за этого?
d(i, j) = 0
может так надо?
d(i,j)=d(0,0)

или
d(i,j) = d(i,j)+a(i,k)*c(k,j)
а надо так?d(i,j) =a(i,k)*c(k,j)
а может так надо?
Dim a(), b(), c(), d() As Single
1|2
К списку тем
2007-2025, онлайн игры HeroesWM