В таких алгоритмах проблема роста числителя и знаменателя решается алгоритмом сокращения простых дробей. Опробовано лет 20 назад. Где-то у меня есть на Фортране.
Если знаменатель объективно велик -- то ничего не поможет (кроме длинной арифметики). Но если заранее известно, что он не слишком велик (ну скажем не больше
, с оговорками насчёт размера матрицы и числа обусловленности), то самый дешёвый способ -- это провести метод Гаусса с полным выбором главного элемента в
вещественных числах, а потом привести вещественный ответ к рациональному виду через цепные дроби.
Простая дробь состоит не только из знаменателя. Кроме того простая дробь может иметь числитель больше знаменателя. Проблема только в возможности недопущения роста какой либо из частей простой дроби.
Мне представляется, что есть два аспекта проблемы.
1. Теоретически (нет вопросов!) существуют несократимые дроби, у которых числитель или знаменатель "не влезает" в машинное слово конечной длины.
2. Практически, даже для очень сложных задач (гидродинамика, нейтронная физика ets.) не встречал проблем роста несократимости дробей. Может быть Вы приведете
реальный пример, извините за каламбур, для подтверждения своего утверждения.
Еще одно соображение: в задачах матфизики, где возникает проблема эффективного обращения матриц (точнее говорить, эффективного итерационного решения систем нелинейных уравнений), сама матрица обычно разреженная. И чем грамотней проводится декомпозиция задачи, тем более разреженной становится матрица! Как показывает опыт работы с такими матрицами, проблемы несократимости не возникает. Трудно понять, почему, но это факт. (Оговорюсь, что имелось в виду решение систем уравнений методом LU-разложения, а не обращение и операции с обратной матрицей).
-- Пн окт 12, 2009 10:54:02 --http://www.drobotenko.com/code_rus.html
drob: "Мат библиотеки от Intel и AMD отличаются большей скоростью. Они неплохо работают с большими матрицами, которые не помещаются в кэш. Основная операция это вычитание из строки другой строки, помноженной на число, которое в регистре с обратной запись результата. Выпадение строк из кэша, а это несколько мегабайт в зависимости от процессора приводит к замедлению на порядок. Это на одно ядро, тоесть для четырехядерных можно сказать, что производительность падает в сорок раз. Библиотеки от Intel и AMD неплохо справляются с этой проблемой."
--------------------------------------------------
Скорость алгоритма прежде всего определяется скоростью перемножения матриц. А скорость этого перемножения высока у Intel прежде всего благодаря грамотному применению блочных методов перемножения матриц. Вообще говоря, много бреда у вас понаписано. Интересно, каким коммерческим структурам вы мозги запудрили?
С появлением технологий CUDA и OPEN CL появились и новые возможности дешево повысить эффективность матричных вычислений, пока ни Intel ни AMD адекватного ответа не дали!