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

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

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

 

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

(******************************************************************************)
ЗАДАЧА Перемножить(L-,A+:Матр.Вид); (* A=L*L' *)
ПЕР
  i,j,k,n:ЦЕЛ;
  m:Матем.Вещ;
УКАЗ
  n:=РАЗМЕР(L);
  ОТ i:=0 ДО n-1 ВЫП
    ОТ j:=0 ДО i ВЫП
      m:=0;
      ОТ k:=0 ДО j ВЫП
        m:=m+L[i,k]*L[j,k]
      КОН;
      A[i,j]:=m;
      ЕСЛИ i # j ТО
        A[j,i]:=m 
      КОН
    КОН 
  КОН
КОН Перемножить;

(******************************************************************************)
ЗАДАЧА Голова;
ПЕР
  n:ЦЕЛ;         (* размер матрицы *)
  A:Матр.Доступ; (* исходная матрица *)
  L:Матр.Доступ; (* матрица L *)
  п:Читать.Поток;
УКАЗ
  п:=МатрВВ.ОткрытьПоток("ПроМатр4.дан");
  A:=МатрВВ.ЧитатьМатр(п);
  Читать.Закрыть(п);
  n:=РАЗМЕР(A^);
  СОЗДАТЬ(L,n,n);
  Вывод.Цепь("^Исходная матрица:^");
  МатрВВ.ВыводМатр("%10.5f",A^);
  ЕСЛИ Матр.РазложитьНаLL(A^,L^) = 0 ТО
    Вывод.Цепь("^L матрица:^");
    МатрВВ.ВыводМатр("%10.5f",L^);
    Перемножить(L^,A^);
    Вывод.Цепь("^L*L' матрица:^");
    МатрВВ.ВыводМатр("%10.5f",A^)
  ИНАЧЕ
    Вывод.Цепь("^Матрица не является положительно определённой!^")
  КОН
КОН Голова;

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




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