Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2015, 20:25   #1
Loqwer78rus
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 60
По умолчанию Delphi решение СЛАУ методом Гаусса

Есть программа на delphi. Решение СЛАУ методом Гаусса с выбором главного элемента. Но есть проблема. Не учитывается то что система уравнений не имеет решений.
Например матрица вида
4 4 7 |12
8 8 14 |1
3 -6 2 |7
Не имеет решения.
Где мне указать это условие ? И какое оно должно быть ? Помогите кто может
Код:
Var a:array[1..3,1..3] of real;
    a1:array[1..3,1..3] of real;
    b:array [1..1,1..3] of real;
    b1:array [1..1,1..3] of real;
    X:array [1..1,1..3] of real;
    M,Sum,Buf:real;
    i,j,p,k:integer;

begin
  M:=0;
  p:=0;     //Номер строки
  Sum:=0;

    for i:=1 to 3 do
      begin
        b[1,i]:=StrToFloat(strngrd2.Cells[1,i])
      end;

    for i:=1 to 3 do
      for j:=1 to 3 do
        begin
          a[i,j]:=StrToFloat(strngrd1.Cells[j,i]);
        end;

//Поиск главного элемента 
  for k:=1 to 2 do
    begin
      for i:=k to 3 do
        if M<abs(a[i,k]) then
          begin
            M:=abs(a[i,k]);
            p:=i;
          end;

//Замена строк 
    if(p<>k) then
      begin
        for i:=k to 3 do
          begin
            Buf:=a[k,i];
            a[k,i]:=a[p,i];
            a[p,i]:=Buf;
          end;

          Buf:=b[1,p];
          b[1,p]:=b[1,k];
          b[1,k]:=Buf;
      end;

//Алгоритм 
    for i:=k+1 to 3 do
      begin
        a[k,i]:=a[k,i]/a[k,k];
      end;
        b[1,k]:=b[1,k]/a[k,k];

    for i:=k+1 to 3 do
      begin
        for j:=k+1 to 3 do
          begin
            a[i,j]:=a[i,j]-a[i,k]*a[k,j];
          end;
            b[1,i]:=b[1,i]-a[i,k]*b[1,k];
      end;

     M:=0;
  end;

  x[1,3]:=b[1,3]/a[3,3];

//Обратный ход
  for k:=2 downto 1 do
    begin
      for i:=(k+1) to 3 do
        Sum:=Sum+a[k,i]*x[1,i];
        x[1,k]:=b[1,k]-Sum;
        Sum:=0;
    end;


    strngrd3.Cells[1,1]:=FloatToStr(x[1,1]);
    strngrd3.Cells[1,2]:=FloatToStr(x[1,2]);
    strngrd3.Cells[1,3]:=FloatToStr(x[1,3]);

end;

Последний раз редактировалось Аватар; 24.11.2015 в 20:57.
Loqwer78rus вне форума Ответить с цитированием
Старый 24.11.2015, 21:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Loqwer78rus Посмотреть сообщение
Но есть проблема. Не учитывается то что система уравнений не имеет решений.
Например матрица вида
...
Не имеет решения.
Напомните, каким образом (по какому критерию) проверяется имеет матрица решение или нет?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2015, 22:03   #3
Loqwer78rus
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Напомните, каким образом (по какому критерию) проверяется имеет матрица решение или нет?
По теореме Кронекера-Капелли. Мы приводим нашу матрицу к треугольному виду. И если у нас на главной диагонали все 0 в третей строке то уравнение не имеет решения. Ну мой алгоритм какой-то странный(Судя по нему, он не приводит матрицу к треугольному виду)
Вложения
Тип файла: docx Метод.docx (43.0 Кб, 16 просмотров)
Loqwer78rus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом Гаусса (Delphi 7) FrostGeaR Помощь студентам 5 27.09.2015 09:24
решение СЛАУ методом гаусса al172 Помощь студентам 0 12.11.2013 17:08
Решение СЛАУ методом Гаусса и методом Крамера. R1k1 Помощь студентам 0 24.03.2012 19:17
Решение СЛАУ методом Гаусса Денис999 Помощь студентам 2 27.11.2011 18:31
Решение СЛАУ методом Гаусса Medvedko0116 Помощь студентам 0 27.06.2011 11:15