0 / 0 / 1
Регистрация: 01.11.2012
Сообщений: 26
1

Процедура перестановки строк в методе Гаусса

25.11.2012, 01:32. Показов 1831. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужно написать программу решения СЛАУ методом Гаусса. Программу то я написал, а вот как добавить процедуру для перестановки строк, если главный элемент равен 0 не могу((( Помогите пожалуйста!!!!!!!
Вот моя программа.

Модуль
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
unit algebra;
 
interface
 
type
  matr = array[1..10, 1..10] of real;
  vectr =  array[1..10] of real;
 
var
  a: matr; 
  b, x: vectr;
  F1: text;
  n, i, j, k: integer;
  r, g: real;
 
procedure vvod_matr(var F1: text; n: integer; var a: matr; var b: vectr );
procedure gaus(a: matr; b: vectr; n: integer; var x: vectr );
procedure zapis(var F2: text; n: integer; var x: vectr);
implementation
procedure gaus;
var
  k, i, j: integer;
  r, g: real;
begin
  for k := 1 to n do
  begin
    for j := k + 1 to n do
    begin
      r := a[j, k] / a[k, k];
      for i := k to n do
        a[j, i] := a[j, i] - r * a[k, i];
      b[j] := b[j] - r * b[k];
    end;
  end;
  for k := n downto 1 do
  begin
    r := 0;
    for j := k + 1 to n do
    begin
      g := a[k, j] * x[j];
      r := r + g;
    end;
    x[k] := (b[k] - r) / a[k, k];
  end;
end;
 
procedure vvod_matr;
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to n do
      read(F1, a[i, j]);
  for i := 1 to n do
    read(F1, b[i]);
end;
 
procedure zapis;
var i: integer;
begin
writeln(F2,'korni sistemi:');
  for i := 1 to n do
  write(F2,'x[', i, ']=', x[i]:0:2, '   ');
  close (F2);
  end;
end.
И сама программа

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
program GAUS1;
 
uses
  algebra;
 
var
  F1, F2: text;
  n, i, j: integer;
 
begin
  assign(F1, 'C:\Users\Alekx\Desktop\xx.txt');
  assign(F2, 'C:\Users\Alekx\Desktop\yy.txt');
  reset(F1); 
  rewrite(F2);
  read(F1, n);
  vvod_matr(F1, n, a, b);
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]:7:2);
    writeln(b[i]:9:2);
  end;
  close(F1);
  gaus(a, b, n, x);  
  zapis(F2, n, x);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2012, 01:32
Ответы с готовыми решениями:

Процедура перестановки строк матрицы
Написать процедуру перестановки iй и jй строк в двумерном целочисленном массиве

Найти решение СЛАУ методом Гаусса (без перестановки строк)
Итак, требуется найти решение СЛАУ методом Гаусса (без перестановки строк). Проще говоря, есть...

проверка в методе гаусса
Дан код программы, которая решает систему линейный уравнений методом гаусса!! Осталось сделать...

Размерность матриц в методе Гаусса
Работает для любого порядка, кроме 100, для 3 я даже проверил - все сходится. Но при 100 выдает...

1
Почетный модератор
64303 / 47598 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.11.2012, 09:40 2
Вот собственно решение, в том числе и перестановка строк.
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
procedure Gauss(a:matrix; b:vector;var x:vector);
var  i,j,k:integer;
     c,d,f :real;
begin
for k:=1 to n-1 do
 begin
  {Если главный элемент=0,  делаем перестановку}
  if a[k,k]=0 then
  for i:=k+1 to n do{ищем в этом столбце ниже не нулевой}
  if a[i,k]<>0 then
   begin
    for j:=1 to n do{коэффициентов}
     begin
      c:=a[k,j];
      a[k,j]:=a[i,j];
      a[i,j]:=c;
     end;
    c:=b[k]; {свободных членов}
    b[k]:=b[i];
    b[i]:=c;
    break;{нашли больше не ищем}
   end;
  for i:=k+1 to n do {прямой ход}
   begin
    c:=-a[i,k]/a[k,k];
    for j:=1 to n do
    a[i,j]:=a[i,j]+c*a[k,j];
    b[i]:=b[i]+c*b[k];
   end;
 end;
for k:=n downto 2 do{обратный ход}
for i:=k-1 downto 1 do
 begin
  c:=-a[i,k]/a[k,k];
  for j:=1 to n do
  a[i,j]:=a[i,j]+c*a[k,j];
  b[i]:=b[i]+c*b[k];
 end;
for k:=1 to n do x[k]:=b[k]/a[k,k];
end;
1
25.11.2012, 09:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2012, 09:40
Помогаю со студенческими работами здесь

Обратная подстановка в методе Гаусса
http://prog-cpp.ru/wp-content/uploads/2015/01/gauss171.png как найти x1, x2, x3?

выводит ошибку в методе гаусса
Здравствуйте! помогите пожалуйста! решаю систему методом гаусса, но при запуске выдается вот такая...

Ошибка в вводе коэффициентов в методе Гаусса
Я нашел готовый проект с методом Гаусса, но там ввод коэффициентов производится прямо в коде...

Трудоёмкость вычисления обратной матрицы в методе Гаусса
Есть какая-нибудь инфа или литература по этому? Заранее спасибо :)


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru