Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.036 c
4-1120472561
Pearled
2005-07-04 14:22
2005.08.28
SID Well-known группы


3-1121682484
S_s
2005-07-18 14:28
2005.08.28
QuickRepotr: составление отчета


6-1116075803
Stype
2005-05-14 17:03
2005.08.28
Программа для пересылки по сети


3-1121418159
vigo
2005-07-15 13:02
2005.08.28
Подключение к Oracle


14-1122959574
Ega23
2005-08-02 09:12
2005.08.28
С днем рождения! 2 августа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский