Метод Гаусса решения системы линейных уравненийDelphi , Синтаксис , Математика
Автор: Mystic { **** UBPFD *********** by delphibase.endimus.com **** >> Рещение системы линейных уравнений (возможно переопределенной) методом Гаусса. Определяется ситуация, что система не имеет рещений. Ситуация, когда система имеет более чем одно решение не рассматривается. В случае удачного завершения возвращает нуль. Зависимости: System Автор: Mystic, mystic2000@newmail.ru, ICQ:125905046, Харьков Copyright: (C) Mystic Дата: 25 апреля 2002 г. ***************************************************** } function LinGauss(M, N: Integer; Data: PExtended; X: PExtended): Cardinal; var PtrData: PExtended; PtrData1, PtrData2: PExtended; Temp: Extended; I, J, Row: Integer; Max: Extended; MaxR: Integer; begin Assert(M >= N, 'Invalid start data'); for I := 0 to N - 1 do // Для каждой переменной begin // 1. Поиск максимального элемента PChar(PtrData) := PChar(Data) + I * (N + 2) * SizeOf(Extended); MaxR := I; Max := PtrData^; for J := I + 1 to M - 1 do begin PChar(PtrData) := PChar(PtrData) + (N + 1) * SizeOf(Extended); if Abs(PtrData^) > Abs(Max) then begin Max := PtrData^; MaxR := J; end; end; // 2. А вдруг неразрешима? if Abs(Max) < 1.0E-10 then begin Result := $FFFFFFFF; Exit; end; // 3. Меняем местами строки if MaxR <> I then begin PChar(PtrData1) := PChar(Data) + MaxR * (N + 1) * SizeOf(Extended); PChar(PtrData2) := PChar(Data) + I * (N + 1) * SizeOf(Extended); for J := 0 to N do begin Temp := PtrData1^; PtrData1^ := PtrData2^; PtrData2^ := Temp; PChar(PtrData1) := PChar(PtrData1) + SizeOf(Extended); PChar(PtrData2) := PChar(PtrData2) + SizeOf(Extended); end; end; // 4. Пересчет направляющей строки PChar(PtrData) := PChar(Data) + I * (N + 1) * SizeOf(Extended); for J := 0 to N do begin PtrData^ := PtrData^ / Max; PChar(PtrData) := PChar(PtrData) + SizeOf(Extended); end; // 5. Пересчет всей оставшйся части таблицы PtrData1 := Data; for Row := 0 to M - 1 do begin if Row = I then begin PChar(PtrData1) := PChar(PtrData1) + (N + 1) * SizeOf(Extended); Continue; end; PChar(PtrData2) := PChar(Data) + I * (N + 1) * SizeOf(Extended); Temp := PExtended(PChar(PtrData1) + I * SizeOf(Extended))^; for J := 0 to N do begin PtrData1^ := PtrData1^ - Temp * PtrData2^; PChar(PtrData1) := PChar(PtrData1) + SizeOf(Extended); PChar(PtrData2) := PChar(PtrData2) + SizeOf(Extended); end; end; end; // 6. Проверка того, что система переопределена PChar(PtrData) := PChar(Data) + N * (N + 1) * SizeOf(Extended); for I := N to M - 1 do for J := 0 to N do begin if Abs(PtrData^) > 1.0E-10 then begin Result := $FFFFFFFF; Exit; end; PChar(PtrData) := PChar(PtrData) + SizeOf(Extended); end; // Все ОК PChar(PtrData) := PChar(Data) + N * SizeOf(Extended); for I := 0 to N - 1 do begin X^ := PtrData^; PChar(X) := PChar(X) + SizeOf(Extended); PChar(PtrData) := PChar(PtrData) + (N + 1) * SizeOf(Extended); end; Result := 0; end; Это реализация метода Гаусса для решения системы линейных уравнений в языке программирования Delphi, разработанном Borland. Вот разбивка кода: Переменные и объявления
Основной логик Функция проходит по каждой строке матрицы коэффициентов и выполняет следующие шаги:
Конечные проверки После завершения итерации выполните две конечные проверки:
Возвращаемое значение Функция возвращает ноль, если система успешно решена, или код ошибки, если возникла проблема. Некоторые примечания к коду:
В целом, этот код appears to be функциональной реализацией метода Гаусса для решения системы линейных уравнений в Delphi. Однако он может потребовать обновлений для модернизации языковых функций и обработки ошибок. Метод Гаусса - это алгоритм решения системы линейных уравнений, который использует процесс eliminirovaniya элементов матрицы для получения решений. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |