Здравствуйте, гость ( Вход | Регистрация )
| otherside |
26.3.2008, 13:47
Сообщение
#1
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 98 Регистрация: 29.2.2008 Город: красноярск Учебное заведение: КрижтИрГупс Вы: студент |
помогите пожалуйста написать такую программу : написать массив, который вычисляет определитель матрицы 3х3 по методу Гаусса. Значения в матрице запрашиваются случайно.
|
![]() ![]() |
| tig81 |
26.3.2008, 13:57
Сообщение
#2
|
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель |
помогите пожалуйста написать такую программу : написать массив, который вычисляет определитель матрицы 3х3 по методу Гаусса. Значения в матрице запрашиваются случайно. Простите, а что это за метод Гауссса для вычисления определителей третьего порядка!? Первый раз о таком слышу. |
| otherside |
26.3.2008, 14:03
Сообщение
#3
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 98 Регистрация: 29.2.2008 Город: красноярск Учебное заведение: КрижтИрГупс Вы: студент |
Простите, а что это за метод Гауссса для вычисления определителей третьего порядка!? Первый раз о таком слышу. как нам говорил препод нужно по методу Гаусса избавиться от чисел в верхнем треугольнике и в нижнем (то есть обнулить их) и тогда остается одна главная диагональ по которой можно посчитать определитель... |
| tig81 |
26.3.2008, 14:19
Сообщение
#4
|
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель |
как нам говорил препод нужно по методу Гаусса избавиться от чисел в верхнем треугольнике и в нижнем (то есть обнулить их) и тогда остается одна главная диагональ по которой можно посчитать определитель... ясно, спасибо. Т.е. приведение определителя к верхне- или нижнетреугольному виду. Тогда определитель равен произведению элементов главной диагонали. Чтобы, например, сделать нули в первом столбце (кроме элемента а11) поступаем следующим образом: a[i,j]-a[i,j]/a[1,1], где a[i,j] - элемент в первом столбце. Т.е. от второй строки отнимаем первую, умноженную на a[2,1]/a[1,1] |
| otherside |
26.3.2008, 14:32
Сообщение
#5
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 98 Регистрация: 29.2.2008 Город: красноярск Учебное заведение: КрижтИрГупс Вы: студент |
ясно, спасибо. Т.е. приведение определителя к верхне- или нижнетреугольному виду. Тогда определитель равен произведению элементов главной диагонали. Чтобы, например, сделать нули в первом столбце (кроме элемента а11) поступаем следующим образом: a[i,j]-a[i,j]/a[1,1], где a[i,j] - элемент в первом столбце. Т.е. от второй строки отнимаем первую, умноженную на a[2,1]/a[1,1] а как написать что от второй строки отнимается первая? |
| tig81 |
26.3.2008, 14:40
Сообщение
#6
|
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель |
а как написать что от второй строки отнимается первая? Вот есть программка на Паскале метод Гаусса для СЛАУ Код Program Metod_Gaussa; const R=6; A:array [1..R,1..R+1] of extended = (( 2.1, 1.3, -5.2, 1.4, 3.3, 4.6, 14.35), ( 6.3, -0.4, -14.4, 7.8, 14.0, 21.0, 90.95), ( 2.1, -3.0, -1.7, 9.2, 7.8, 24.6, 129.28), ( 4.2, -1.7, -6.9, 10.6, 11.1, 29.2, 143.63), (-2.1, 3.0, -0.6, -13.4, -0.5, 0.0, -65.30), ( 4.2, 2.6, -15.0, -5.6, 13.5, 0.6, -43.71)); var i,j,k:byte; X:array [1..R] of extended; C:extended; BEGIN writeln; for i:=1 to R-1 do begin k:=i; for j:=i+1 to R do if abs(A[j,i])>abs(A[k,i]) then k:=j; if k<>i then for j:=i to R+1 do begin C:=A[i,j]; A[i,j]:=A[k,j]; A[k,j]:=C; end; for j:=i+1 to R do begin C:=A[i,i]/A[j,i]; for k:=i+1 to R+1 do A[j,k]:=A[j,k]*C-A[i,k]; end; end; for i:=R downto 1 do begin C:=0; for j:=i+1 to R do C:=C+A[i,j]*X[j]; X[i]:=(A[i,R+1]-C)/A[i,i]; end; for i:=1 to R do writeln('X',i,'=',X[i]:10:6); writeln; END. посмотрите, может разберетесь. |
| otherside |
26.3.2008, 15:35
Сообщение
#7
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 98 Регистрация: 29.2.2008 Город: красноярск Учебное заведение: КрижтИрГупс Вы: студент |
Вот есть программка на Паскале метод Гаусса для СЛАУ Посмотрите, может разберетесь. спасибо... попробую разобраться... (IMG:style_emoticons/default/smile.gif) |
| tig81 |
26.3.2008, 15:41
Сообщение
#8
|
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель |
|
| otherside |
3.4.2008, 12:56
Сообщение
#9
|
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 98 Регистрация: 29.2.2008 Город: красноярск Учебное заведение: КрижтИрГупс Вы: студент |
у меня вопрос. я все-таки не могу разобраться, программа начинает не выполняться уже с самого начала.. когда я только объявляю переменные... Program Metod_Gaussa; const R=6; var A:array [1..R,1..R+1]of integer; i,j,k:integer; X:array [1..R] of integer; C:integer; если здесь поставить real то паскаль пишет что "попытка присвоить переменной типа integer выражение типа real", но если ставишь integer, то в C:=A[i,j]/A[j,i]; он пишет такую же ошибку BEGIN writeln; for i:=1 to R-1 do begin k:=i; for j:=i+1 to R do if abs(A[j,i])>abs(A[k,i]) then k:=j; if k<>i then for j:=i to R+1 do begin C:=A[i,j]; A[i,j]:=A[k,j]; A[k,j]:=C; end; for j:=i+1 to R do begin C:=A[i,j]/A[j,i]; for k:=i+1 to R+1 do A[j,k]:=A[j,k]*C-A[i,k]; end; end; for i:=R downto 1 do begin C:=0; for j:=i+1 to R do C:=C+A[i,j]*X[j]; X[i]:=(A[i,R+1]-C)/A[i,i]; end; for i:=1 to R do writeln('X',i,'=',X[i]:10:6); writeln; END. |
otherside массив в Паскале 26.3.2008, 13:47
creer Лучше использовать real при задании массивов (если... 3.4.2008, 13:11
otherside
Лучше использовать real при задании массивов (есл... 3.4.2008, 14:15
creer Массив должен быть заполнен перед решением, иначе ... 3.4.2008, 14:44
otherside
Массив должен быть заполнен перед решением, иначе... 3.4.2008, 15:21
creer Удачи, но это не слишком простая программа. 3.4.2008, 15:28
otherside
Удачи, но это не слишком простая программа.
в то... 3.4.2008, 15:32
creer Матрица всего 3x3. Может быть проще написать свое ... 3.4.2008, 16:00
otherside
Матрица всего 3x3. Может быть проще написать свое... 3.4.2008, 16:47
creer Вот, скажем, мы прошли второй ряд. В a[2,1] будет ... 3.4.2008, 17:17![]() ![]() |
|
Текстовая версия | Сейчас: 19.4.2026, 6:45 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru