| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > решение системы линейных уравнений |
| Автор: Ivanich 22.3.2007, 22:43 |
| Посоветуйте метод для решения системы линейных алгебраических уравнений. Совсем забыл написать, что СЛАУ мне надо решеть однородные. |
| Автор: skyboy 22.3.2007, 23:01 |
| метод Крамера метод обратной матрицы метод Гаусса это то, что пришло в голову сходу. а вообще, я бы не гнушался воспользоваться поиском в Wikipedia(http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9) |
| Автор: cardinal 23.3.2007, 00:07 |
| Вручную больше не решаю... А вообще, если тривиальная система, то можно и без методов, а просто "подставленим одного в другое"... |
| Автор: Ivanich 23.3.2007, 14:32 | ||
вот и я не хочу, мне надо написать программу. Писать буду на С++, теорию уже почитал и знаю что метод Гаусса и Крамера для этого мне не подойдут. Как я понял мне надо использовать итерационный метод(уже разобрался с методом простых итераций, но он не подходит, так как решать системы мне надо однородные). Подскажите начинающему |
| Автор: skyboy 23.3.2007, 18:28 | ||
Ivanich, т.е. ссылки на список из 9 методов - слишком мало?!
|
| Автор: sergejzr 23.3.2007, 19:44 |
| Гаусс - молодец был |
| Автор: Ivanich 24.3.2007, 12:07 | ||
Так метод Гаусса же дает серьезную погрешность, в отличии от методов итерации при вычисление СЛАУ на ЭВМ. Или я ошибаюсь? |
| Автор: sergejzr 24.3.2007, 13:30 |
| Смотря как вычисляешь. если сохранять дроби, то погрешности не будет. |
| Автор: esperanto 24.3.2007, 15:35 | ||||
Ошибаешься. Есть системы для которых гаус вообще не дает погрешности. Есть системы для которых итеративные методы не сходятся. |
| Автор: Joss 25.3.2007, 22:14 | ||
Однородная СЛАУ имеет либо единственное тривиальное решение, либо бесконечное множество решений. Во втором случае описанные методы вообще неприменимы |
| Автор: skyboy 25.3.2007, 22:50 |
| почему же "неприменимы"? например, метод Крамера. если "общий" определитель равен нулю и все "частные" определители тоже равны 0, то решений - бесконечное множество. если "общий" определитель равен нулю и хотя бі один частній определитель не равен нулю, то решений нет; система несовместна если "общий" определитель не равен нулю, то решение есть и оно единственно. ------------ единственное базовое ограничение для (известных мне) численных методов: количество переменных == количество уравнений в системе. |
| Автор: Artemios 26.3.2007, 00:33 |
| Ээ... Сведение матрицы СЛАУ к ступенчатой форме хоть Гауссом, хоть итерационным каким методом... В случае однородности СЛАУ некоторые строки -- нулевые; соответствующие этим строкам переменные выбираем в качестве свободных переменных, остальные строки дадут зависимости несвободных от свободных. |
| Автор: Ivanich 26.3.2007, 16:39 | ||||||||
|
| Автор: Artemios 26.3.2007, 18:18 | ||||||||
Ну да, немного попутал: в голове перемешалось с итерационными методами сведения матрицы (не СЛАУ) к треугольной/диагональной форме в задаче поиска собственных значений. Хотя, и те методы, в немного урезанном варианте, кажется, должны быть применимы: там же обнуляет элементы одно преобразование (строк например), а второе преобразование (столбцов) является компенсирующим для сохранения подобности матриц. А при решении СЛАУ подобности матриц не требуется, но требуется неизменность порядка столбцов, то есть компенсирующее преобразование можно опустить...
например получили такую треугольную матрицу: 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 Из последних 2-х уравнений -- x_3 и x_4 -- свободные переменные, из 2-го сверху уравнения x_2 = -x_4, из 1-го x_1 = -x_2 - x_3, а с учетом того, что по x_2 уже решено, то x_1 = x_4 - x_3. Таким образом, решение системы -- 2-мерная плоскость в 4-мерном пространстве: {x_2 = -x_4, x_1 = x_4 - x_3} А чтобы не гадать, по каким переменным уже разрешено, а по каким еще нет, лучше сразу приводить максимальный ненулевой минор матрицы к диагональному виду: 1 0 1 -1 0 1 0 1 0 0 0 0 0 0 0 0 Кстати,
Так как писать собрался на C/C++ , ничего не может быть проще, чем скачать библиотеку на длинную арифметику: http://gmplib.org/, и проводить вычисления в дробях произвольной длины с абсолютной точностью. |
| Автор: Danza 24.12.2007, 21:47 | ||
Метод Гаусса на с++:
Насколько помню, всё работает. Можно ещё решать методом Якоби. Но что бы матрица была "решаема" необходимо диагональное преобладание. Могу скинуть код если надо. |
| Автор: Alleut 12.3.2008, 23:01 | ||
| Объясните, плиз, как решать неоднородные системы итерационным методом Якоби? В общем виде это записывается так:
Как выбирать x{0} (икс нулевое)? |
| Автор: cardinal 12.3.2008, 23:50 |
| Пожалуйста, один топик - один вопрос. Правила форума: http://forum.vingrad.ru/index.php?act=boardrules |