int multMatrixBlock(double *a, const int n, double *b, const int m, double *res, double *c, double *d, double*e){
int n_block=n/m;
int m_small;
int i,j,k,o;
m_small=n-n_block*m;
clearMatrix(res, n*n);
for ( i = 0; i <= n_block; i++)
{
for ( j = 0; j <= n_block; j++)
{
for ( k = 0; k <=n_block; k++)
{
if (i<n_block && j<n_block && k<n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixSq(c, m, d, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i<n_block && j<n_block && k==n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m, d,m_small, m, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i==n_block && j<n_block && k<n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m_small, d,m, m, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i==n_block && j<n_block && k==n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m_small, d,m_small, m, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i<n_block && j==n_block && k<n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m, d,m, m_small, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i<n_block && j==n_block && k==n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m, d,m_small, m_small, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i==n_block && j==n_block && k<n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixRect(c, m_small, d,m, m_small, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
else if (i==n_block && j==n_block && k==n_block) {
getSubMatrix(a, n, c, m, i, k);
getSubMatrix(b, n, d, m, k, j);
multMatrixSq(c, m_small, d, e);
setSubMatrixAdded(res, n, e, m, i, j);
}
}
}
}
return 0;
}
перевести код на C#
Нашел у вас на форуме код, полезный, только написан на С, а я его не помню. Помогите перевести плз.
а по теме: меняешь звездочки на квадратные скобочки.
сам то я пытался... ну спасибо, сейчас покалдую... как я понимаю getSubMatrix, multMatrixRect отдельные методы.. которого тут нет?
Цитата: Mr_Ser_Win
сам то я пытался... ну спасибо, сейчас покалдую... как я понимаю getSubMatrix, multMatrixRect отдельные методы.. которого тут нет?
Совершенно верно.
Более того. Еще тут нету:
clearMatrix
getSubMatrix
getSubMatrix
multMatrixSq
setSubMatrixAdded
Так что переводить все это будет очень весело. ))))
Поэтому варианты:
1. Это алгоритм блочного перемножения матриц. Его легко можно найти на C#. Мне не раз попадались.
2. Есть специальные конвертеры для кода подобного рода с С++ на С#