Очевидно, что мы должны протестировать нашу программу. К счастью, это сделать несложно.
void solve_random_system(Index n)
{
Matrix A = random_matrix(n); // Vector b = random_vector(n);
cout << "A = " << A << endl; cout << "b = " << b << endl; try {
Vector x = classical_gaussian_elimination(A, b); cout << "Решение методом Гаусса x = " << x << endl;
Vector v = A * x;
cout << " A * x = " << v << endl;
}
catch(const exception& e) {
cerr << e.what() << std::endl;
}
}
Также вам может показаться, что такая тема как наушники beats by dr dre studio никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт monsterbeats.su
Тема наушники Monster Beats Studio (Монстер Битс Студио) там представлена весьма широко. На том сайте можно узнать много интересного на тему наушники Monster Beats Studio (Монстер Битс Студио).
Что означает вообще тема наушники Monster Beats Studio (Монстер Битс Студио), где найти наушники Monster Beats Studio (Монстер Битс Студио) - про это написано на сайте monsterbeats.su
Это очень важная для многих людей тема - наушники Monster Beats Studio (Монстер Битс Студио) Спасибо сайту monsterbeats.su за информацию на тему наушники Monster Beats Studio (Монстер Битс Студио)
Существуют три причины, из-за которых можно попасть в раздел catch.
• Ошибка в программе (однако, будучи оптимистами, будем считать, что этого никогда не произойдет).
• Входные данные, приводящие к краху алгоритма classical_elimination (целесообразно использовать функцию elim_with_partial_pivot).
Ошибки округления
Тем не менее наш тест не настолько реалистичен, как мы думали, поскольку случайные матрицы вряд ли вызовут проблемы с алгоритмом classical_elimination.
Для того чтобы проверить наше решение, выводим на экране произведение A*x, которое должно быть равно вектору b (или достаточно близким к нему с учетом ошибок округления). Из-за вероятных ошибок округления мы не можем просто ограничиться инструкцией
if (A*x!=b) error("Неправильное решение");
Поскольку числа с десятичной точкой являются лишь приближением действительных чисел, получим лишь приближенный ответ. В принципе лучше не применять операторы == и ! = к результатам вычислений с десятичными точками: такие числа являются лишь приближениями.
В библиотеке Matrix нет операции умножения матрицы на вектор, поэтому эту функцию нам придется написать самостоятельно.
Vector operator*(const Matrix& m, const Vector& u)
{
const Index n = m.dim1();
Vector v(n);
for (Index i = 0; i < n; ++i) v(i) = dot_product(m[i], u); return v;
}
И вновь простая операция над объектом класса Matrix делает за нас большую часть работы. Как указывалось, операции вывода объектов класса Matrix описаны в заголовке MatrixIO.h. Функции random_matrix() и ran- dom_vector() просто используют случайные числа. Читатели могут написать эти функции в качестве упражнения. Имя Index является синонимом типа индекса, используемого в библиотеке Matrix, и определено с помощью оператора typedef. Этот тип включается в программу с помощью объявления using.
using Numeric_lib::Index;
Опубликовал katy
April 23 2015 11:29:43 ·
0 Комментариев ·
2727 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.