Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/161: Рейтинг темы: голосов - 161, средняя оценка - 4.62
Stramg

Определитель матрицы. Метод Гаусса.

25.04.2006, 09:02. Показов 30043. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Админ привет. это vanHalen с вашего бывшего форума. :-)
Задание:
Найдите определитеь матрицы n-ого порядка методом Гаусса. Я понимаю что вроде не сложно, но я сам ещё в Паскале не дошёл до матриц, поэтому для меня это пока нерешаемо. Помогите бедному студенту.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2006, 09:02
Ответы с готовыми решениями:

Определитель методом Гаусса
Доброе время суток , хочу попросить вас помочь мне в написании алгоритма и программы вычисления определителя методом Гауса . Матрица 5*5 и...

Метод Гаусса
Помогите плз, не знаю как решать задачи такого типа: Решить систему линейных алгебраических уравнений методом Гаусса ...

Метод Гаусса
Нужно запрограммировать метод Гаусса,я как только начинаю понимать-пытаюсь решить и тут же сразу запутываюсь

10
 Аватар для Himkil
1 / 1 / 0
Регистрация: 24.04.2006
Сообщений: 10
25.04.2006, 09:02
Краткий курс "матриц в паскале":
1. Объявление 2-х мерного массива (матрицы):
var
A: array [1..N, 1..M] of integer;
А - матрица NxM. Вместо integer можешь писать что угодно (real, boolean, ...).
2. Доступ к элементу:
A[i, j] или A[i][j] - элемент матрицы, где 1=i=N, 1=j=M.

Пример: создать таблицу умножения:

Pascal
1
2
3
4
5
6
7
8
9
var
  A: array[1..10][1..10] of integer;
  i, j: integer;
 
begin
  for i:=1 to 10 do
    for j:=1 to 10 do
      A[i, j]:=i*j;
end.
0
 Аватар для Himkil
1 / 1 / 0
Регистрация: 24.04.2006
Сообщений: 10
25.04.2006, 09:02
Вот и все
0
 Аватар для hellboy
0 / 0 / 0
Регистрация: 09.07.2008
Сообщений: 5
09.07.2008, 13:33
Может поможете вычислить собственные векторы для симметрических матриц
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.07.2008, 15:14
Если не работали с матрицами, да еще и математику плохо знаете, то вряд ли разберетесь, но код выкладываю, вдруг пригодится.
Если вдруг не будет работать вышлю программу, вдруu при копировании что упустил.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
uses crt;
type
  Tmatr=array [1..20,1..20] of real;
var n:integer;
   a,a1:Tmatr;
   det,det1:real;
   i,j,k1,k2:integer;
procedure Per(i1,i2:integer;var a:Tmatr);
{процедура перестановка нужна когда главный элемент равен 0, а делить на него нельзя, переставляются строки так, чтобы главный элемент был максимальный по модулю}
var z:real;
begin
for j:=1 to n do
  begin
    z:=a[i1,j];a[i1,j]:=a[i2,j];a[i2,j]:=z;
    end;
end;
function znak(p:integer):integer;
{при перестановке строк изменяется знак определителя, поэтому нужно это учитывать}
begin
if p mod 2=0 then
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);
{собственно нахождение определителя, алгоритм читайте в книгах, рассказывать не умею}
var k,i,j,p:integer;
r:real;
begin
det:=1;
for k:=1 to n do
  begin
    det:=det*a[k,k];
    for j:=k+1 to n do
      begin
        r:=a[j,k]/a[k,k];
        for i:=k to n do
          begin
            a[j,i]:=a[j,i]-r*a[k,i];
          end;
      end;
  end;
end;
begin
clrscr;
write('n=');readln(n);
writeln('Ischodnaia matritsha A:');
randomize;
for i:=1 to n do
 begin
   for j:=1 to n do
     begin
       a[i,j]:=random(10)+random;
       write(a[i,j]:6:2);
     end;
 writeln;
 end;
opr(n,a,det); {вызов процедуры нахождения определителя}
writeln('opr=',det:4:2);
readln
end.
1
-12 / 1 / 0
Регистрация: 27.12.2010
Сообщений: 9
28.12.2010, 00:03
а как в последней програме сделать так чтоб матрицю вводить?
0
-12 / 1 / 0
Регистрация: 27.12.2010
Сообщений: 9
11.01.2011, 17:44
Люди помогите срочно как в последней програме вводить свою матрицу???
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
11.01.2011, 18:47
Puporev, прошу прощения, код ваш, но человеку срочно, да и минутка есть)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
uses crt;
type
  Tmatr=array [1..20,1..20] of real;
var n:integer;
   a,a1:Tmatr;
   det,det1:real;
   i,j,k1,k2:integer;
procedure Per(i1,i2:integer;var a:Tmatr);
{процедура перестановка нужна когда главный элемент равен 0, а делить на него нельзя, переставляются строки так, чтобы главный элемент был максимальный по модулю}
var z:real;
begin
for j:=1 to n do
  begin
    z:=a[i1,j];a[i1,j]:=a[i2,j];a[i2,j]:=z;
    end;
end;
function znak(p:integer):integer;
{при перестановке строк изменяется знак определителя, поэтому нужно это учитывать}
begin
if p mod 2=0 then
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);
{собственно нахождение определителя, алгоритм читайте в книгах, рассказывать не умею}
var k,i,j,p:integer;
r:real;
begin
det:=1;
for k:=1 to n do
  begin
    det:=det*a[k,k];
    for j:=k+1 to n do
      begin
        r:=a[j,k]/a[k,k];
        for i:=k to n do
          begin
            a[j,i]:=a[j,i]-r*a[k,i];
          end;
      end;
  end;
end;
begin
clrscr;
write('n=');readln(n);
for i:=1 to n do
 for j:=1 to n do
  begin
    write ('mas[',i,'][',j,']=');
    readln (mas[i][j]);
  end;
writeln;
writeln('Ischodnaia matritsha A:');
for i:=1 to n do
 begin
   for j:=1 to n do
    write(a[i,j]:6:2);
 writeln;
 end;
opr(n,a,det); {вызов процедуры нахождения определителя}
writeln('opr=',det:4:2);
readln
end.
1
-12 / 1 / 0
Регистрация: 27.12.2010
Сообщений: 9
12.01.2011, 01:33
Народ спасибо со всех тем сделал отличную прогу всем большое спасибо!!!!могу выкласть код!

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
program determinant;
uses crt;
type
  Tmatr=array [1..20,1..20] of real;
var n:integer;
   a,a1:Tmatr;
   det,det1:real;
   i,j,k1,k2,q:integer;
procedure Per(i1,i2:integer;var a:Tmatr);
var z:real;
begin
for j:=1 to n do
  begin
    z:=a[i1,j];a[i1,j]:=a[i2,j];a[i2,j]:=z;
    end;
end;
function znak(p:integer):integer;
begin
if p mod 2=0 then
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);
var k,i,j,p:integer;
r:real;
begin
det:=1;
for k:=1 to n do
  begin
    det:=det*a[k,k];
    for j:=k+1 to n do
      begin
        r:=a[j,k]/a[k,k];
        for i:=k to n do
          begin
            a[j,i]:=a[j,i]-r*a[k,i];
          end;
      end;
  end;
end;
begin
clrscr;
repeat
write('n=');readln(n);
randomize;
for i:=1 to n do
 begin
   for j:=1 to n do
     begin
     write ('‚Введите елемент матрицы a[',i,'][',j,']=');
       readln(a[i,j]);
 
     end;
 writeln;
 end;
opr(n,a,det);
writeln('opr=',det:4:2);
writeln('Если хотите продолжыть введите 1, если нет то -1');
read(q)
until(q=-1)
end.
Добавлено через 19 минут
Еще срочно помогите как в моей програме сделать так чтоб было видно ход ришения?
1
1 / 1 / 0
Регистрация: 19.11.2010
Сообщений: 10
16.12.2011, 14:21
Это какой метод вычисления определителя??? Элементарными преобразованиями???
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
09.04.2013, 07:34
Как известно определитель по Гауссу находиться путем перемножения элементов по диагонали, которые лежат ВЫШЕ нулей, получившиеся после ПРЯМОГО ХОДА. Помогите в этот код добавить вычисления определителя и вывести ответ:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
program gauss;
uses crt;
const num=5;
var a: array [1..num,1..num] of real;
    b, x: array [1..num] of real;
    n, i, j, k: integer;
       delenie: real;
begin
 clrscr;
 writeln('Введите колич-во неизвестных величин и нажмите ENTER:');
 readln(n);
 writeln;
 
 writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        read(a[i,j]);
   end;
   writeln;
   writeln('Введите вектоp В свободных членов нажимая ENTER:');
    for i:=1 to n do
        read (b[i]);
 
  writeln;
  writeln('Расширеная матрица:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        write (a[i, j]:5:3,' ':2); {Вывод матрицы с отступами}
        write (b[i]:5:3,' ':2); {Вывод вектора с отступами}
        writeln;
   end;
    writeln;
 
    writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do 
     begin
      for k:=i+1 to n do
       begin
        delenie:= -1*(a[k,i] / a[i,i]);
         for j:=1 to n do
             a[k,j]:= a[k,j] + a[i,j] * delenie;
             b[k]:= b[k] + b[i] * delenie;
       end;
    end;
    writeln('Вычисляю...');
    writeln;
    writeln('Результат прямого хода:');
    for i:=1 to n do
      begin
       for j:=1 to n do
        write (a[i, j]:5:3,' ':2); {Выводим на экран...}
        write (b[i]:5:3,' ':2); {прямого хода}
        writeln;
      end;
    writeln;
    writeln('---------ВЫЧИСЛЕНИЕ  ОПРЕДЕЛИТЕЛЯ---------');
 
 ТУТ ДОЛЖЕН БЫТЬ КОД ВЫЧ. ОПРЕД-ЛЯ!
 
    writeln('ОТВЕТ:');
 ТУТ ОТВЕТ!
 
   readkey;
end.
Добавлено через 10 часов 37 минут

Не можите? Тогда я сам! :

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    writeln('---------ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ ПО МЕТОДУ ГАУССА---------');
    for k:=1 to n do
     for i:=k+1 to n do
      for j:=k+1 to n do
       begin
        a[i,j]:=a[i,j]-a[i,k] * a[k,j] / a[k,k];
        det:=a[1,1];
       end;
      for i:=2 to n do
       det:=det*a[i,i];
    writeln('Вычисляю...');
    writeln;
    writeln('ОТВЕТ:');
    writeln ('det=', det:2:3); {Вывод ответа}
Добавлено через 6 минут
Вот только det всегда выводится округленным до целых, хотя я его объявил как real. Впрочем, если не ошибаюсь, определитель всегда целое число.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2013, 07:34
Помогаю со студенческими работами здесь

Метод Гаусса
1. Нужно сделать вывод промежуточных матриц до вывода корней. uses crt; var a:arrayof real; b:array of real; x:array of real; ...

Метод Гаусса
ПОМОГИТЕЕ пожалуйста разобраться с программой! Я новичок в этом деле. Нужно защитить программу в преподавателя, а я не понимаю, что...

Определитель матрицы
Привет ребят, решите задачу плиз каму не сложно. Задача. Вычислить определитель матрицы ( рекурсия ).очень нужна.Спасибо.

Определитель матрицы
Написать программу вычисления определителя матрицы к-го порядка. k

Определитель матрицы
Народ помогите,не пойму почему прога не работает: program fav; const n=3; var i,j,k:integer; A:array of real; detA:real; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru