Форумы-->Форум для внеигровых тем--> 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К списку тем
|