Проба LU.
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ПроLU+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: 
 *   решение систем линейных уравнений (A*x=b) методом LU-разложения
 *
 * ПРИМЕЧАНИЯ: 
 *     Система уравнений записана в файле "ПроМатр2.дан".
 *     В этом файле 1-я строка содержит размер матрицы A
 *   (число строк и столбцов), в следующих строках записанны значения элементов
 *   матрицы A, потом на отдельной строке размер матрицы свободных членов B
 *   (число векторов b и их размер), а далее значения элементов матрицы B, 
 *   в которой строки являются векторами b.
 *
 *     Квадратная матрица A (N на N) раскладывается на два сомножителя (A=L*U),
 *   где L это нижняя треугольная матрица с единичной главной диагональю,
 *   а U верхняя треугольная матрица. Затем решаются две системы уравнений
 *   L*z=b и U*x=z с использованием того преимущества, что матрицы этих систем
 *   являются треугольными. 
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Матр   ИЗ "...\Отделы\Числа\",
  МатрВВ ИЗ "...\Отделы\Числа\",
  Читать ИЗ "...\Отделы\Обмен\",
  Вывод  ИЗ "...\Отделы\Обмен\";

(******************************************************************************)
ЗАДАЧА Голова;
ПЕР
  n:ЦЕЛ;  (* размер вектора свободных членов *)
  nv:ЦЕЛ; (* число векторов свободных членов *)
  A:Матр.Доступ; (* матрица системы *)
  B:Матр.Доступ; (* вектора свободных членов *)
  X:Матр.Доступ; (* вектора решения *)
  p:Матр.Перестановки; (* перестановки для обратного хода *)
  i:ЦЕЛ; 
  п:Читать.Поток;
УКАЗ
  п:=МатрВВ.ОткрытьПоток("ПроМатр2.дан");
  A:=МатрВВ.ЧитатьМатр(п);
  B:=МатрВВ.ЧитатьМатр(п);
  Читать.Закрыть(п);
  nv:=РАЗМЕР(B^,0);
  n:=РАЗМЕР(B^,1);
  СОЗДАТЬ(X,nv,n);
  Вывод.Цепь("^Исходная матрица:^");
  МатрВВ.ВыводМатр("%10.5f",A^);
  Вывод.Цепь("^Вектора свободных членов:^");
  ОТ i:=0 ДО nv-1 ВЫП
    МатрВВ.ВыводВект("%10.5f",B[i])
  КОН;
(* После выполнения РазложитьНаLU матрицы L и U оказываются на месте матрицы A *)
  ЕСЛИ Матр.РазложитьНаLU(A^,p) = 0 ТО
    (* решаем систему для каждого вектора свободных членов b *)
    Вывод.Цепь("^Вектора решения:^");
    ОТ i:=0 ДО nv-1 ВЫП
      Матр.РешитьИзLU(A^,B[i],p,X[i]); 
      МатрВВ.ВыводВект("%10.5f",X[i])
    КОН
  ИНАЧЕ
    Вывод.Цепь("^Вырожденная матрица!^")
  КОН
КОН Голова;

(******************************************************************************)
УКАЗ
  Голова
КОН ПроLU.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы