|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ Про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 или Издателю Глагола:
|
|