#include <iostream>
#include "Eigen/Core"
#include "Eigen/Array" // Matrix.setRandom()
USING_PART_OF_NAMESPACE_EIGEN
using namespace std;
static const int MATR_SIZE = 5;
int main(int argc, const char *argv[])
{
// Создаем матрицу и заполняем случайными числами
MatrixXf m(MATR_SIZE, MATR_SIZE);
m.setRandom(MATR_SIZE, MATR_SIZE);
cout << "input matrix: " << endl << m << endl;
double product = 1; // произведение элементов на главной диагонали
int i;
for (i = 0; i < MATR_SIZE; i++) {
product *= abs(m(i, i));
}
product = pow( product, 1.0/i ); // среднее геометрическое
cout << "Geometric mean on main diag: " << product << endl;
// заменяем эл-ты с четной суммой коэфф-в на среднее геометрическое
for (int i = 0; i < MATR_SIZE; i++) {
for (int j = 0; j < MATR_SIZE; j++) {
if ( !((i + j) & 1) ) {
m(i,j) = product;
}
}
}
cout << "output matrix: " << endl << m << endl;
return 0;
}
Еще раз матрицы
этой темой.
А кто знает какие-нибудь хорошие матричные библиотеки? Хорошие, это значит, что ими удобно пользоваться, т.е. можно писать нормальные выражения вроде
Matrix A = B.inverse() * C + D и которые выполняются БЫСТРО, т.е. сделаны без виртуальных функций, исключений и прочего в критичных местах?
Я помню потратил два дня на поиски, нашел пару десятков, из которых меня устроила только одна: Eigen. Собственно, хочу и поделиться этой ссылкой на замечательную библиотеку. Остальные либо платные, либо медленные, либо с убогим интерфейсом и возможностями. Может, кто знает еще для сравнения?
Навеяло
А кто знает какие-нибудь хорошие матричные библиотеки? Хорошие, это значит, что ими удобно пользоваться, т.е. можно писать нормальные выражения вроде
Matrix A = B.inverse() * C + D и которые выполняются БЫСТРО, т.е. сделаны без виртуальных функций, исключений и прочего в критичных местах?
Я помню потратил два дня на поиски, нашел пару десятков, из которых меня устроила только одна: Eigen. Собственно, хочу и поделиться этой ссылкой на замечательную библиотеку. Остальные либо платные, либо медленные, либо с убогим интерфейсом и возможностями. Может, кто знает еще для сравнения?
ну и скелет решения задачки mego4el:
Цитата: gaga
А кто знает какие-нибудь хорошие матричные библиотеки? Хорошие, это значит, что ими удобно пользоваться, т.е. можно писать нормальные выражения вроде
Matrix A = B.inverse() * C + D
Matrix A = B.inverse() * C + D
В GNU есть. Хотя бы в той же Octave.
Цитата: gaga
и которые выполняются БЫСТРО, т.е. сделаны без виртуальных функций, исключений и прочего в критичных местах?
Не вижу связи между БЫСТРО и без исключений.
Неужели B.inverse() не выкинет исключения для неквадратной B? - это же полный бред получиться....
Так что throw обязательно должны быть. Другое дело, что не должно быть отбработки исключений - блоков catch.
Цитата: sigmov
В GNU есть. Хотя бы в той же Octave.
Не вижу связи между БЫСТРО и без исключений.
Неужели B.inverse() не выкинет исключения для неквадратной B? - это же полный бред получиться....
Так что throw обязательно должны быть. Другое дело, что не должно быть отбработки исключений - блоков catch.
Не вижу связи между БЫСТРО и без исключений.
Неужели B.inverse() не выкинет исключения для неквадратной B? - это же полный бред получиться....
Так что throw обязательно должны быть. Другое дело, что не должно быть отбработки исключений - блоков catch.
Спасибо, гляну на Octave.
Связь есть, если много вычислений с небольшими матрицами, то очень существенная. Не выкинет, конкретно в этом случае вернет нулевую матрицу, если не ошибаюсь.