Возведение матрицы в степень
Подскажите как возвести матрицу в натуральную степень?
В задании только "великая" подсказка 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, время: 20:59. |