Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 188

/ вопрос открыт /

Где взять исходный код на Delphi или на Pascal для расчета NхN-размерных матриц методом Гаусcа?

Петров-559 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Петров-559 (статус: Посетитель)
Вопрос отправлен: 7 декабря 2006, 17:08
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Alex Van Glukhman

Здравствуйте, Петров!
Наверное надо войти в Delphi и попытаться ручками написать реализацию решения. Голая математика почти как калькулятор. Ну ежели с Pascal так всё сложно то - поиск по Yandex. Google и т.д.

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 7 декабря 2006, 20:48

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Петров!
Взято из справочника DelphiWorld
www.delphiworld.narod.ru

Приложение:
  1. { **** UBPFD *********** by delphibase.endimus.com ****
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11. Copyright: (C) Mystic
  12.  
  13. ***************************************************** }
  14.  
  15. function LinGauss(M, N: Integer; Data: PExtended; X: PExtended): Cardinal;
  16. var
  17. PtrData: PExtended;
  18. PtrData1, PtrData2: PExtended;
  19. Temp: Extended;
  20. I, J, Row: Integer;
  21. Max: Extended;
  22. MaxR: Integer;
  23. begin
  24. Assert(M >= N, 'Invalid start data');
  25.  
  26. begin
  27.  
  28.  
  29. PChar(PtrData) := PChar(Data) + I * (N + 2) * SizeOf(Extended);
  30. MaxR := I;
  31. Max := PtrData^;
  32. for J := I + 1 to M - 1 do
  33. begin
  34. PChar(PtrData) := PChar(PtrData) + (N + 1) * SizeOf(Extended);
  35. if Abs(PtrData^) > Abs(Max) then
  36. begin
  37. Max := PtrData^;
  38. MaxR := J;
  39. end;
  40. end;
  41.  
  42.  
  43. if Abs(Max) < 1.0E-10 then
  44. begin
  45. Result := $FFFFFFFF;
  46. Exit;
  47. end;
  48.  
  49.  
  50. if MaxR <> I then
  51. begin
  52. PChar(PtrData1) := PChar(Data) + MaxR * (N + 1) * SizeOf(Extended);
  53. PChar(PtrData2) := PChar(Data) + I * (N + 1) * SizeOf(Extended);
  54. for J := 0 to N do
  55. begin
  56. Temp := PtrData1^;
  57. PtrData1^ := PtrData2^;
  58. PtrData2^ := Temp;
  59. PChar(PtrData1) := PChar(PtrData1) + SizeOf(Extended);
  60. PChar(PtrData2) := PChar(PtrData2) + SizeOf(Extended);
  61. end;
  62. end;
  63.  
  64.  
  65. PChar(PtrData) := PChar(Data) + I * (N + 1) * SizeOf(Extended);
  66. for J := 0 to N do
  67. begin
  68. PtrData^ := PtrData^ / Max;
  69. PChar(PtrData) := PChar(PtrData) + SizeOf(Extended);
  70. end;
  71.  
  72.  
  73. PtrData1 := Data;
  74. for Row := 0 to M - 1 do
  75. begin
  76. if Row = I then
  77. begin
  78. PChar(PtrData1) := PChar(PtrData1) + (N + 1) * SizeOf(Extended);
  79. Continue;
  80. end;
  81. PChar(PtrData2) := PChar(Data) + I * (N + 1) * SizeOf(Extended);
  82. Temp := PExtended(PChar(PtrData1) + I * SizeOf(Extended))^;
  83. for J := 0 to N do
  84. begin
  85. PtrData1^ := PtrData1^ - Temp * PtrData2^;
  86. PChar(PtrData1) := PChar(PtrData1) + SizeOf(Extended);
  87. PChar(PtrData2) := PChar(PtrData2) + SizeOf(Extended);
  88. end;
  89. end;
  90. end;
  91.  
  92.  
  93. PChar(PtrData) := PChar(Data) + N * (N + 1) * SizeOf(Extended);
  94. for I := N to M - 1 do
  95. for J := 0 to N do
  96. begin
  97. if Abs(PtrData^) > 1.0E-10 then
  98. begin
  99. Result := $FFFFFFFF;
  100. Exit;
  101. end;
  102. PChar(PtrData) := PChar(PtrData) + SizeOf(Extended);
  103. end;
  104.  
  105.  
  106. PChar(PtrData) := PChar(Data) + N * SizeOf(Extended);
  107. for I := 0 to N - 1 do
  108. begin
  109. X^ := PtrData^;
  110. PChar(X) := PChar(X) + SizeOf(Extended);
  111. PChar(PtrData) := PChar(PtrData) + (N + 1) * SizeOf(Extended);
  112. end;
  113. Result := 0;
  114. end;
  115.  


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 8 декабря 2006, 01:39


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 7 декабря 2006, 18:19; участников в обсуждении: 1.
Dron

Dron (статус: Студент), 7 декабря 2006, 18:19 [#1]:

Наверное, вы имеете ввиду решение системы линейных уравнений методом Гаусса?
С уважением.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.