Автор: Relrin 24.02.2011 14:22
Сейчас сижу пишу программку, которая вычисляет СЛАУ методом Гаусса. Сейчас возникло несколько вопросов и проблем, на которые нужен ответ :
1) Где нужно исправить переменные в процедуре Gauss, чтобы она могла решить не только случаи, когда количество переменных равно количеству уравнений, но и случай, когда количество переменных меньше кол-ва уравнений. Например:
x1 + x2 + x3 = 3
2x1 +3x2 +2x3= 7
3x1 + x2 + x3 = 5
5x1 - x2 - x3 = 3
2) Необходимость помочь раскомментировать процедуру Gauss(взял с этого форума процедуру, как и ввод/вывод), поскольку не очень понимаю ход решения (хотя, очень похоже на решение "обратным ходом"). Поэтому хочется, чтобы помогли разобраться с этим кодом
Поскольку код получился чуть более чем на 400 строк, то приложу исходник.
Прикрепленные файлы
pr1.pas ( 9.44 килобайт )
Кол-во скачиваний: 260
Автор: TarasBer 24.02.2011 14:25
> но и случай, когда количество переменных меньше кол-ва уравнений
В общем случае решения нет. Тебе это точно надо?
Автор: Relrin 24.02.2011 14:29
Да, конечно.
Пример, был взят из книги по вышке. Решение того примера, что я написал выше будут:
x1=1
x2=1
x3=1
Автор: Lapp 24.02.2011 16:56
Цитата(Relrin @ 24.02.2011 10:22)
Где нужно исправить переменные в процедуре Gauss, чтобы она могла решить не только случаи, когда количество переменных равно количеству уравнений, но и случай, когда количество переменных меньше кол-ва уравнений.
Из полной системы скомбинируй несколько таких, в которых кол-во уравнений равно числу неизвестных. Например, из 4 ур. с 3 неизв. получится 4 системы:
{1,2,3}
{2,3,4}
{1,3,4}
{1,2,4}
(цифры означают номера уравнений, в общем случае будет C
nk систем)
Затем реши каждую из них и возьми пересечение ответов (то есть множеств точек в многогомерных пространствах) к каждой. Это и будет ответ к полной системе.
Автор: TarasBer 24.02.2011 17:18
> Затем реши каждую из них
Это ужасно.
Итак, есть система:
x1 + x2 + x3 = 3
2x1 +3x2 +2x3= 7
3x1 + x2 + x3 = 5
5x1 - x2 - x3 = 3
Её соответствует такая расширенная матрица:
Код
1 1 1 | 3
2 3 2 | 7
3 1 1 | 5
5 -1 -1 | 3
Для того, чтобы система имела решение, надо, чтобы ранг этой матрицы (n+1 на m) был равен n.
Как считать ранг матрицы?
Цитата(Википедия)
Ранг матрицы равен числу ненулевых строк в матрице после приведения её к ступенчатой форме при помощи элементарных преобразований над строками матрицы.
То есть решает методом Гаусса (это ведь оно приводит к трапициевидной форме?), и надо, чтобы все строки после n-ой были нулевыми.
Например, данная матрица после приведения к трапециевидному виду становится такой:
Код
1 1 1 | 3
0 1 0 | 1
0 0 -2 | -2
0 0 0 | 0
Сразу виден ранг.