Форум программистов, компьютерный форум CyberForum.ru

Обратная матрица - C++

Восстановить пароль Регистрация
 
Guzl
 Аватар для Guzl
34 / 34 / 2
Регистрация: 19.10.2010
Сообщений: 70
30.10.2012, 22:36     Обратная матрица #1
Здравствуйте)Помогите пожалуйста разобраться, у меня программа не правильно считает обратную матрицу
Delphi
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
procedure Obr(n:Integer; var d:Matrix);
var A:Matrix; i,j,h:Integer;
begin
 SetLength(A, n + 1, n + 1);
      for i := 0 to n-1 do
      begin
         for j := 0 to n-1 do
         begin
          A[i,j]:=StrToFloat(sgA.Cells[j, i]);
         end;
         end;
         SetLength(d,n+1,n+1);
          For h:=0 to n-1 do      // обратная матрица;
     begin
     For i:=0 to n-1 do
     For j:=0 to n-1 do
      Begin
    If (i=h) and (j=h) then
    d[i,j]:=1/a[i,j];
    If (i=h) and (j<>h) then
    d[i,j]:=-a[i,j]/a[h,h];
    If (i<>h) and (j=h) then
    d[i,j]:=a[i,h]/a[h,h];
    If (i<>h) and (j<>h) then
    d[i,j]:=a[i,j]-a[h,j]*a[i,h]/a[h,h];
    End;
     For i:=0 to n-1 do
      For j:=0 to n-1 do
    a[i,j]:=d[i,j];
   end;
   SetLength(d,0,0);
   end;
 
Procedure Proverka( n:integer;var c:Matrix);//проверка - умножение прямой матрицы на обратную
var k,j,i:integer;
    z:double; a,d:Matrix;
begin
  SetLength(c,n+1,n+1);
for k:=0 to n-1 do
for j:=0 to n-1 do
  begin
    c[k,j]:=0;
    for i:=0 to n-1 do
      begin
        z:=c[k,j]+a[i,j]*d[k,i];
        c[k,j]:=c[k,j]+z;
      end;
   end;
 
   begin
   for k:=0 to n-1 do
   for j:=0 to n-1 do
   SGPr.Cells[j,k]:=FloatToStr(c[k,j]);
   end;
   SetLength(c,0,0);
 end;
 
var
   A,d,c: Matrix;
   B, X : Vector;i1, j1: integer;
   err : Double; det,det1:Real;
   i, j, n ,p,k: Integer; f:Byte;//признак несуществования обратной матрицы
begin
   n := StrToInt(edt1.Text);
   SetLength(A, n + 1, n + 1);
   SetLength(B, n + 1);
   for i := 0 to n - 1 do
   begin
      for j := 0 to n - 1 do
      begin
         A[i, j] := StrToFloat(sgA.Cells[j, i]);
      end;
      B[i] := StrToFloat(sgB.Cells[0, i]);
   end;
 
   SetLength(X, n + 1);
   Holetsky(n,A,B,X,err);
   Opr(n,p,A,det,f);
 
 
   for i := 0 to n-1 do
      sgRes.Cells[0, i] := FloatToStr(X[i]);
   ShowMessage(Format('Error = %f', [Err]));
 
   SetLength(d,n+1,n+1);
 
 
 
 Obr(n,d);
 for i:= 0 to n - 1 do
  for j:= 0 to n - 1 do
    SG2.Cells[j,i]:= FloatToStr(Round(1000*a[j, i])/1000);
 
 
 
   SetLength(c,n+1,n+1);
   Proverka(n,c);
 
 
 
   SetLength(X, 0);
   SetLength(B, 0);
   SetLength(A, 0, 0);
   SetLength(d,0,0);
   setlength(c,0,0);
end;
и на 45-м шаге выдает ошибку. Заранее благодарна за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 22:36     Обратная матрица
Посмотрите здесь:

C++ Обратная матрица на С
C++ Обратная матрица
C++ Обратная матрица
C++ Обратная матрица
Обратная матрица C++
C++ Обобщенная обратная матрица
Обратная матрица методом отражения C++
C++ Обратная матрица

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru