IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Метод Гаусса, Проблемка с решением этим методом
Relrin
сообщение 24.02.2011 10:22
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Сейчас сижу пишу программку, которая вычисляет СЛАУ методом Гаусса. Сейчас возникло несколько вопросов и проблем, на которые нужен ответ smile.gif :
1) Где нужно исправить переменные в процедуре Gauss, чтобы она могла решить не только случаи, когда количество переменных равно количеству уравнений, но и случай, когда количество переменных меньше кол-ва уравнений. Например:
x1 + x2 + x3 = 3
2x1 +3x2 +2x3= 7
3x1 + x2 + x3 = 5
5x1 - x2 - x3 = 3
2) Необходимость помочь раскомментировать процедуру Gauss(взял с этого форума процедуру, как и ввод/вывод), поскольку не очень понимаю ход решения (хотя, очень похоже на решение "обратным ходом"). Поэтому хочется, чтобы помогли разобраться с этим кодом

Поскольку код получился чуть более чем на 400 строк, то приложу исходник.

Сообщение отредактировано: Relrin - 24.02.2011 10:24


Прикрепленные файлы
Прикрепленный файл  pr1.pas ( 9.44 килобайт ) Кол-во скачиваний: 176
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 24.02.2011 10:25
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> но и случай, когда количество переменных меньше кол-ва уравнений

В общем случае решения нет. Тебе это точно надо?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Relrin
сообщение 24.02.2011 10:29
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Да, конечно.
Пример, был взят из книги по вышке. Решение того примера, что я написал выше будут:
x1=1
x2=1
x3=1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.02.2011 12:56
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Relrin @ 24.02.2011 10:22) *
Где нужно исправить переменные в процедуре Gauss, чтобы она могла решить не только случаи, когда количество переменных равно количеству уравнений, но и случай, когда количество переменных меньше кол-ва уравнений.

Из полной системы скомбинируй несколько таких, в которых кол-во уравнений равно числу неизвестных. Например, из 4 ур. с 3 неизв. получится 4 системы:
{1,2,3}
{2,3,4}
{1,3,4}
{1,2,4}
(цифры означают номера уравнений, в общем случае будет Cnk систем)
Затем реши каждую из них и возьми пересечение ответов (то есть множеств точек в многогомерных пространствах) к каждой. Это и будет ответ к полной системе.



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 24.02.2011 13:18
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Затем реши каждую из них

Это ужасно.

Итак, есть система:

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

Сразу виден ранг.

Сообщение отредактировано: TarasBer - 24.02.2011 13:22


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"