Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Решение СЛАУ методом Гаусса   Найти похожие ветки 

 
Motion ©   (2005-05-02 18:28) [0]

Рассчитывая полином по МНК, получил СЛАУ, которое необходимо решить за Гауссом(для произвольной матрицы). Объясните, для начала как решить математически, а потом как это реализовать с помощью Delphi


 
begin...end ©   (2005-05-02 18:34) [1]

> Motion ©   (02.05.05 18:28)

Итак, начнём. Как бы Вы решали такую систему?

2x + 3y = 8
4x - 5y = -6


 
Motion ©   (2005-05-02 18:35) [2]

Поделил первую строку на 2 и отнял бы от 2-ой


 
Motion ©   (2005-05-02 18:36) [3]

Точнее умножил бы на 2 и отнял бы от 2-ой :)


 
Antonn ©   (2005-05-02 18:40) [4]

--------------
2x = 8 - 3y;
--------------
x = (8 - 3y) / 2
--------------
(4(8 - 3y)/ 2) - 5y = -6
--------------
2(8 - 3y) - 5y = -6
--------------
16 - 6y - 5y = -6
--------------
-11y = -22
--------------
y = 2
--------------
x = (8 - 3*2) / 2
--------------
x = 1
--------------

Правильно? :)


 
Motion ©   (2005-05-02 18:42) [5]

Да


 
begin...end ©   (2005-05-02 18:43) [6]

> Motion ©   (02.05.05 18:36) [3]

OK. А такую?

2x + 3y + 4z = 20
4x + 5y + 2z = 20
3x - 2y + 5z = 14


 
Motion ©   (2005-05-02 18:43) [7]

Момент, сейчас решу


 
Motion ©   (2005-05-02 18:47) [8]

Не знаю :( Пытаюсь привести к треугольному виду - ничего не получается.


 
begin...end ©   (2005-05-02 18:58) [9]

> Motion ©   (02.05.05 18:47) [8]

Не может быть. В системе [6] вычтете из второго уравнения первое, умноженное на 2, а из третьего -- первое, умноженное на 3/2. Сообщите о том, какая система получилась.


 
Antonn ©   (2005-05-02 19:00) [10]

2 3 4 | 20
4 5 2 | 20
3 -2 5 | 14
-------------
2  3   4 | 20
0 0.5  3 | 10
3 -2   5 | 14
-------------
2  3   4    | 20
0 0.5  3    | 10
0  0   4,25 | 13,5
-------------
z = 13.5/4.25
-------------
y = (10 - (13.5/4.25)*3 )*2
-------------
x = ( 20 - ((10 - (13.5/4.25)*3 )*2)*3 - (13.5/4.25)*4 )*2


 
Motion ©   (2005-05-02 19:03) [11]

0  - y  - 6z = -20
4x + 6y + 8z = 40
-x - 9y + (15/2-8) = -19


 
Motion ©   (2005-05-02 19:07) [12]

Что-то я не так делаю...


 
begin...end ©   (2005-05-02 19:07) [13]

> Motion ©   (02.05.05 19:03) [11]

Повторяю: из второго уравнения вычесть первое, умноженное на 2, а из третьего уравнения вычесть певрое, умноженное на 3/2.


 
Motion ©   (2005-05-02 19:08) [14]

А какое правило вычитания строк?


 
Antonn ©   (2005-05-02 19:09) [15]

Я вам не мешаю? :)


 
Motion ©   (2005-05-02 19:10) [16]

Да нет, если по теме :)


 
Motion ©   (2005-05-02 19:12) [17]

Умножаю первую строку на 2 и вычитаю из 2-ой?


 
begin...end ©   (2005-05-02 19:13) [18]

> Antonn ©   (02.05.05 19:09) [15]

Нет.

> Motion ©   (02.05.05 19:12) [17]

Да.


 
Motion ©   (2005-05-02 19:14) [19]

Если просто умножаю =>
4  6  8  40
4  5  2  20
3 -2  5  14


 
Motion ©   (2005-05-02 19:14) [20]

Если просто умножаю =>
4  6  8  40
4  5  2  20
3 -2  5  14


 
Motion ©   (2005-05-02 19:16) [21]

Потом от 2-ой отнимаю первую...то есть во второй пишу результат, а первую так и оставляю?...
4  6  8  40
0  -1 -6 -20
3  -2  5  14


 
begin...end ©   (2005-05-02 19:16) [22]

> Motion ©   (02.05.05 19:14) [20]

Вот и хорошо. А теперь нужно вычесть первую строку этой системы из второй: 4 - 4 = 0, 5 - 6 = -1, и т.д.


 
Motion ©   (2005-05-02 19:17) [23]

Я просто ровняюсь на решение Antonn ©, у него получается -
2  3   4 | 20
0 0.5  3 | 10
3 -2   5 | 14


 
begin...end ©   (2005-05-02 19:18) [24]

> Motion ©   (02.05.05 19:16) [21]

Вторую строку Вы преобразовали верно. А теперь восстановите первую строку, как было.


 
Motion ©   (2005-05-02 19:18) [25]

А, он потом 1-у и 2-у строку на 2 поделил...:) Я не заметил сначала


 
Motion ©   (2005-05-02 19:21) [26]

2 3 4 20
0 -1 -6 -20
3 -2 5 14


 
Motion ©   (2005-05-02 19:21) [27]

То есть делю 1-ну на 2


 
begin...end ©   (2005-05-02 19:23) [28]

> Motion ©   (02.05.05 19:21) [26]

Хорошо, но первую и не надо было менять. Нужно было из второй вычесть первую, умноженную на 2, из полученный результат записать на место второй строки. А первая такая же и осталась.

ОК, едем дальше. Теперь приступим к третьей строке: из неё нужно вычесть первую, умноженную на 3/2.


 
Motion ©   (2005-05-02 19:26) [29]

А первая должна была остаться в первоначальном виде или умноженая на 2?


 
begin...end ©   (2005-05-02 19:27) [30]

> Motion ©   (02.05.05 19:26) [29]

Первая должна остаться в первоначальном виде. Просто мы её в уме умножили на 2 и вычли её из второй.


 
Motion ©   (2005-05-02 19:28) [31]

Такое получилось:
3 4.5 6 30
0 -1 -6 -20
0 -6.5 -1 -16


 
Motion ©   (2005-05-02 19:30) [32]

А точнее:
2 3 4 20
0 -1 -6 -20
0 -6.5 -1 -16


 
palva ©   (2005-05-02 19:30) [33]

Извините, что вклиниваюсь, но у меня вопрос
> Рассчитывая полином по МНК, получил СЛАУ
Обычно МНК приводят к симметрической, положительно определенной матрице, которую естественнее решать методом Холецкого. Если матрица не такая, то вопрос снят, а если уравнение можно решать по Холецкому, то почему выбран Гаусс?


 
begin...end ©   (2005-05-02 19:30) [34]

> Motion ©   (02.05.05 19:28) [31]

Только сама первая строка не должна была меняться. Восстановите её на первоначальную.


 
Motion ©   (2005-05-02 19:31) [35]

2 3 4 20
0 -1 -6 -20
0 -6.5 -1 -16


 
begin...end ©   (2005-05-02 19:32) [36]

> Motion ©   (02.05.05 19:30) [32]

Прекрасно. Теперь из третьей строки нужно вычесть вторую, умноженную на 6,5.


 
Motion ©   (2005-05-02 19:34) [37]

То palva © >>
Возможно, судите сами -
Задана функция таблично. Использую МНК - вычислить коэфициенты алгебраического полинома. Я написал программу, которая составляет нормальную СЛАУ в матричном виде. А теперь СЛАУ нужно решить.


 
Motion ©   (2005-05-02 19:37) [38]

Получил -
2  3  4  20
0 -1 -6 -20
0  0 38 114


 
begin...end ©   (2005-05-02 19:38) [39]

> Motion ©   (02.05.05 19:37) [38]

Замечательно. Можем ли мы теперь сказать, чему равен z?


 
Motion ©   (2005-05-02 19:40) [40]

z=3
y=2
x=1


 
begin...end ©   (2005-05-02 19:41) [41]

> Motion ©   (02.05.05 19:40) [40]

Я В Вас верю! Теперь постарайтесь описать алгоритм решения системы [6]. Что, из чего, и в какой последовательности мы вычитали?


 
Motion ©   (2005-05-02 19:42) [42]

Насколько я понял, нужно привести матрицу к триугольному виду...а можно ещё пример - для закрепления?


 
begin...end ©   (2005-05-02 19:45) [43]

> Motion ©   (02.05.05 19:42) [42]

ОК. Я пока подумаю над следующим примером, а Вы всё же постарайтесь сформулировать алгоритм приведения матрицы к треугольному виду. Когда сформулируете -- я сразу же дам следующий пример.


 
Motion ©   (2005-05-02 19:45) [44]

Хорошо, а алгоритм на Delphi?


 
Antonn ©   (2005-05-02 19:48) [45]

Motion ©   (02.05.05 19:45) [44]
:)


 
Motion ©   (2005-05-02 19:51) [46]

Алгоритм решения ЭТОЙ системы уравнения? То есть для частного случая?


 
begin...end ©   (2005-05-02 19:54) [47]

> Motion ©   (02.05.05 19:45) [44]

До "алгоритма на Delphi" -- увы, ещё очень далеко. Вначале нужно осознать, КАК нужно решать без Delphi. Чтобы потом сообщить этой самой Delphi, ЧТО она должна делать. Сама она, к сожалению, решать уравнения не умеет.

Так что жду попытки формулировки алгоритма.

> Motion ©   (02.05.05 19:51) [46]

Да, именно этой. Для системы трёх уравнений.


 
Motion ©   (2005-05-02 19:59) [48]

То есть что за чем я должен делать? Вначале мне нужно получить первый элемент во второй строке равным 0, для этого я умножаю строку 1 на 2 отнимаю от 2-ой


 
begin...end ©   (2005-05-02 20:03) [49]

> Motion ©   (02.05.05 19:59) [48]
> То есть что за чем я должен делать?

Именно так. Начало может быть таким:

1. Из второй строки вычитаем первую, умноженную на ...
2. ...


 
Motion ©   (2005-05-02 20:06) [50]

1. Из второй строки вычитаем первую, умноженую на...
2. Из третей строки отнимаем первую умноженую на...
Так?


 
begin...end ©   (2005-05-02 20:09) [51]

> Motion ©   (02.05.05 20:06) [50]

Только вместо "..." должны быть конкретные числа. А ещё лучше будет, если Вы сообразите, почему мы умножали строки именно на такие числа.


 
Motion ©   (2005-05-02 20:12) [52]

1. Из второй строки вычитаем первую, умноженую на 2
2. Из третей строки отнимаем первую умноженую на 6.5

Первую строку мы умножали на число, чтобы в первом столбце числа первой и второй строки совпали.


 
Motion ©   (2005-05-02 20:17) [53]

А потом первую строку мы умножаем на число, чтобы у нас совпали числа первого и второго столбца первой и третей строки.


 
Motion ©   (2005-05-02 20:19) [54]

И вычтем из 3-ей строки первую


 
Motion ©   (2005-05-02 20:21) [55]

Это и есть алгоритм?


 
begin...end ©   (2005-05-02 20:24) [56]

> Motion ©   (02.05.05 20:21) [55]

Это и есть алгоритм. Правда, пока что не всего решения, а только приведения к треугольному виду. Но и это уже очень неплохо.

Теперь даю обещанный примерчик:

4a + 9b + 2c + 7d = 122
2a + 3b + 4c + 5d = 76
2a - 3b + 4c - 5d = -8
5a - 4b - 3c - 2d = -61


 
Antonn ©   (2005-05-02 20:25) [57]


> Первую строку мы умножали на число, чтобы в первом
> столбце числа первой и второй строки совпали.

что бы их разность равнялась нулю, таким образом, мы "убиваем" одну переменную.


 
Motion ©   (2005-05-02 20:32) [58]

Понял....решаю вторую систему...


 
Motion ©   (2005-05-02 20:38) [59]

Пока получил такое -
0  3  -6  -3  -30
0  6   0  10   84
0 -3.5 13 -10.5 41
5 -4  -3  -2   -61


 
Motion ©   (2005-05-02 20:39) [60]

А дальше нужно обнулить ещё 5 элементов...а как?


 
begin...end ©   (2005-05-02 20:43) [61]

> Motion ©   (02.05.05 20:38) [59]

Из всех строк, кроме первой, нужно вычесть первую строку, умноженную на... ну Вы знаете, какие числа.
После этого во всех строках, кроме первой, коэффициенты перед A станут равными нулю.
А первая строка останется такой же, какой и была.

Делаем...


 
Motion ©   (2005-05-02 20:48) [62]

Момент


 
Motion ©   (2005-05-02 20:50) [63]

То есть постоянно нужно оперировать с 1-ой строкой?


 
begin...end ©   (2005-05-02 20:51) [64]

> Motion ©   (02.05.05 20:50) [63]

Пока -- да.


 
Motion ©   (2005-05-02 20:56) [65]

0  3  -6  -3  -30
0  6   0  10   84
0 -3.5 13 -10.5 41
5 -4  -3  -2   -61

Чтобы обнулить -3.5 я умножаю 3-ю строку на 3, 1-ю на 3.5 и плюсую. В итоге получаю -
0   3  -6   -3  -30
0   6   0   10   84
0   0  18  -42   18
5  -4  -3   -2   -61


 
Motion ©   (2005-05-02 21:01) [66]

Далее первую умножаю на 4 а последнюю на 3 и плюсую
Получаю:
0   3   -6   -3   -30
0   6    0   10    84
0   0   18   -42   18
15  0  -33   -18  -303


 
begin...end ©   (2005-05-02 21:02) [67]

> Motion ©   (02.05.05 20:56) [65]

Не спешите.

> 0  3  -6  -3  -30
> 0  6   0  10   84
> 0 -3.5 13 -10.5 41
> 5 -4  -3  -2   -61

А четвёртую строку почему обидели? С ней поступаем так же, как и со второй и третьей.


 
Motion ©   (2005-05-02 21:07) [68]

Удалено модератором
Примечание: Нарушение пункта 10


 
Motion ©   (2005-05-02 21:08) [69]

Не знаю как дальше


 
Motion ©   (2005-05-02 21:29) [70]

На сегодня, я так понимаю, разговора больше не получится. Ладно, тогда зо завтра. Завтра утром буду здесь где-то в 9-00. Попытаюсь пока на бумаге решить.



Страницы: 1 2 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.04 c
1-1123426043
Demidoff
2005-08-07 18:47
2005.08.28
Из книжной в альбомную в richedit


10-1100616891
MegaLexx
2004-11-16 17:54
2005.08.28
Нетривиальный (то бишь неправильный) импорт ActiveX компонента


14-1123079472
Ega23
2005-08-03 18:31
2005.08.28
Quantum Grid от Developer Express для Delphi 7


14-1123066229
вразлет*
2005-08-03 14:50
2005.08.28
Славянский эсперанто


3-1121409195
DmTT
2005-07-15 10:33
2005.08.28
DBLoolupListBox ..ComboBox