![]() |
Методы Гаусса и Крамера[c++]
Как-то на кряклабе нашёл несколько примеров по решению систем линейных уравнений этим методом. Но 404. :( . Решил написать сам.
Для привидения матрицы к главному ступенчатому виду использовал метод ведущего элемента(для машины он проще чем сначала получение верхне треугольной матрицы , а потом самого вида.) Т.к. часто попадаются "плохие" числа и приходится работать с дробями, то написал класс для дробей, перегрузил операторы *, / , + , - . Сделал функции 1, 2 и 3 элементарных преобразований. Также есть алгоритм оброботки нулевых эллемтов на главной диагонале.Для этого написал отдельно класс для матриц. Ввод матрицы осуществляется в самой программе. Программа таже показывает пошагово значения матриц. Приводить весь алгоритм небуду, т.к. он очень большой. Исходники и откомпиленная прога ниже(вместе с Крамером): http://slil.ru/25072002 http://ifolder.ru/4038710 http://rapidshare.com/files/68056699/Gauss_Kramer.rar.html |
Цитата:
Код:
printf("Insert %d element of second matrix:",x); |
Ni0x, ты че, это кроссплатформеный Опен-Сурс от Кузьмича.
А вот это вообще будет висеть у меня на стенке в корридоре Цитата:
Цитата:
Ну и самый прикол Цитата:
|
Я лучше столбиком буду делить...
|
не удивительно, шо у меня ошибки при компеляци))
кстате я метод гаус на 5 сдал!!! имея 3 по математике в школе по жизни :) |
Идея норм, сурс ужасен=\
|
Цитата:
Цитата:
Код:
printf("Insert %d element of second matrix:",x);Код:
cout<<"Insert "<<x<< " element of second matrix:"; |
Большое спасибо за критику. Учёл.
Улучшил Гаусса, добавил обработку нулевых элементов на главной диагонале. Вот, ещё написал метод Крамера с рекурсивным вычислением определителя. Код:
#include <tchar.h>Ссылка на откомпиленную прогу в первом посте. |
Спасибо, мы ща в уневере как раз ща решаем матрицы методом Гауса и Крамера.
|
Да бред все это! Используйте метод Гаусаса.
|
Блин я фигею дамы и господа. Вроде же была такая тема - там писали, что нельзя использовать рекурсию. Тут же приходиться вычислять n+1 определитель размером NxN. НИКТО не считает методом крамера, тем более рекурсивно.
|
Цитата:
Чуток подправил парсинг нулевых строк\нулевых элементов на главной диагонале. Теперь всегда корректно работать будет. http://slil.ru/25077981 |
Так объясните мне - если у нас есть метод гаусса - куда более эффективный и там не надо использовать рекурсию... Мот я чего не понимаю - это новая тенденция писать програму, которая жрет память и которую надо оптимизировать, вместо того, чтобы испольовать простейший алгоритм? попробуй вести у себя в алгоритме первую строку чтонить вроде одной десятитысячной, а остальные элементы - хотя бы вторая строка тысяч 35. а стальные эллементы дробные числа - и посмотри - точно ли у ьебя получаеться решение. Пы сы возьми матрицу хотя бы 250*250.
|
На практике, метод Крамера использовать действительно не имеет смысла, но дело в том, что его дают написать на лабораторных.
И на самом деле, с Крамером ещё хуже, чем кажеться: если понимать под 1 интерацией вычисление определителя матрицы 2х2, умножение его на число и складывание с чем-нибудь, то для вычисления определителя матрицы NxN нужно !N/2 таких интераций. Т.е. 17х17 - ~8кк таких интераций. |
прости - ты читал мое предпоследнее сообщение? И кстати раз уж ты так любишь считать - посчитай, сколько у тебя памяти уходит на рекурсию. - сколько ты лишних элементов хранишь. Я тут пониже создал тему - численные методы.
http://forum.antichat.ru/thread53080.html тут только начало - но почитай - будет полезно. |
| Время: 23:09 |