Возведение матрицы в степень
Подскажите как возвести матрицу в натуральную степень?
В задании только "великая" подсказка A^n=A*A*...*A (n-раз). Уверен есть js библиотека для работы с матрицами, но никак не найду :) |
|
Цитата:
понял только, что в статье рассматриваются единичные или почти единичные матрицы, а нужно для любых. |
Сначала составляете функцию перемножения двух матриц, затем рекурсивно умножаете матрицу на саму себя.
function multMatrix(A,B) { var rowsA = A.length, rowsB = B.length, colsB = B[0].length, C = []; for (var i=0; i<rowsA; i++) { C[i] = new Array(colsB); } for (var k=0; k<colsB; k++) { for (var i=0; i<rowsA; i++) { var temp = 0; for (var j=0; j<rowsB; j++) { temp += A[i][j]*B[j][k]; } C[i][k] = temp; } } return C; } function MatrixPow(n,A) { if (n==1) return A; else return multMatrix(A,MatrixPow(n-1,A)); } |
Demath,
спасибо, выручили! :dance: умножение двух матриц у меня получилось почти также, но рекурсию не осилил бы, не понимаю ее ( помогите еще с LU-разложением матрицы :) |
Цитата:
<script> function LU(A) { var n = A.length, L = [], U = A; for (var i=0; i<n; i++) { L[i] = []; for (var j=0; j<n; j++) L[i][j] = 0; } for (var i=0; i<n; i++) { for (var j=i; j<n; j++) L[j][i] = U[j][i]/U[i][i]; } for (var k=1; k<n; k++) { for (var i=k-1; i<n; i++) { for (var j=i; j<n; j++) L[j][i] = U[j][i]/U[i][i]; } for (var i=k; i<n; i++) { for (var j=k-1; j<n; j++) U[i][j] -= L[i][k-1]*U[k-1][j]; } } return [L,U]; } </script> <button onclick="a = LU([[11,21,5],[2,7,-5],[13,-19,17]]); document.write('A = <br>'+[[11,21,5],[2,7,-5],[13,-19,17]].join('<br>') +'<br><br>L = <br>'+a[0].join('<br>')+'<br><br>U = <br>'+a[1].join('<br>') )"> Пример для A = [[11,21,5],[2,7,-5],[13,-19,17]]</button> |
Часовой пояс GMT +3, время: 05:33. |