| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Нахождение определителя матрицы |
| Автор: gmart 26.4.2004, 17:19 |
| не могли бы отправить прогу(JAVA) |
| Автор: Sid 28.4.2004, 20:06 |
| Могу дать код написанный на C++ если хошь. Думаю переписать на Java его будет легко |
| Автор: Kurt 29.4.2004, 01:18 | ||
| Я написал тебе такую программку. Конечно, ее можно оптимизировать или вообще использовать другой алгоритм (тады обращайся в "Алгоритмы" - я не спец. Вроде бы. Для вычисления определителя я использовал разложение на миноры. Если не знаком, немного теории: Определитель любой квадратной матрицы можно разложить так: |A11..A1n| |........| = ((-1)^(k+1))*Ak1*Mk1+((-1)^(k+2))*Ak2*Mk2+..+((-1)^(k+n))*Akn*Mkn. |An1..Ann| Где 1<=k<=n (по какой строке раскладываем), Aij - соотв. элемент определителя Mij - минор определителя, получающийся вычеркиванием i-й строки и j-го столбца. (соответственно, он более низкого порядка). Раскладывать можно по любой строке - это не имеет значения. Вот код(написан в Sun ONE Studio):
Все. Как видишь, тут 2 основные ф-ции: GetMinor(..) - получает минор, "вычеркнув" строку и столбец. (явно можно проще реализовать..withstupid ) CalculateMatrix(..) - рекурсивная ф-ция для вычисления определителя. Я везде использовал тип double - так "универсальнее". Хотя тест сделал в целых числах - не охота было возиться с дробями. Если что не понятно - спрашивай. Если так не пойдет - скажи как надо (ну или можно попробовать перевести с С++, как предлагал Sid..). : |
| Автор: Sid 29.4.2004, 16:34 |
| gmart У меня детерминант находится методом приведения к диагональному виду. Но думаю у Kurtа реальная реализация |
| Автор: Kurt 29.4.2004, 18:51 |
| Ну, как я сказал, эт не оптимизированный код. Но работающий. Однако хотелоь бы услышать мнение самого gmart.. |
| Автор: LSD 30.4.2004, 23:04 |
| CERN создал свою библиотеку математических функций colt (на чистой Java), если надо то могу после праздников кинуть ссылку. |
| Автор: Kurt 4.5.2004, 01:05 |
| Эхм.. вот бы автора топика услышать.. А то как-то..ну вы понимаете.. |
| Автор: Гость_maxius 5.5.2004, 00:39 |
| Буду благодарен если LSD скинет ссылку на библиотеку мат. функций. |
| Автор: LSD 6.5.2004, 20:24 |
| http://hoschek.home.cern.ch/hoschek/colt/ |
| Автор: Guest 13.6.2004, 20:34 |
| Профессиональный код Kurt, ты меня просто выручил, наконец я здал все лабы по программированию. |
| Автор: = niko = 13.6.2004, 20:45 |
| Если можно пришлите код на С++ для расчета определителя на patriot.admin@mail.ru |