|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ ПроКомплLU+; (****************************************************************************** * НАЗНАЧЕНИЕ: * решение систем линейных уравнений (A*x=b) методом LU разложения для * комплексных чисел * * ПРИМЕЧАНИЯ: * Система уравнений записана в файле "ПроМатр3.дан". * В этом файле 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:ЦЕЛ; п:Читать.Поток; УКАЗ п:=МатрВВ.ОткрытьПоток("ПроКомплLU.дан"); A:=МатрВВ.ЧитатьКомплМатр(п); B:=МатрВВ.ЧитатьКомплМатр(п); Читать.Закрыть(п); nv:=РАЗМЕР(B^,0); n:=РАЗМЕР(B^,1); СОЗДАТЬ(X,nv,n); Вывод.Цепь("^Исходная матрица:^"); МатрВВ.ВыводКомплМатр(" (%5.2f;%5.2f)",A^); Вывод.Цепь("^Вектора свободных членов:^"); ОТ i:=0 ДО nv-1 ВЫП МатрВВ.ВыводКомплВект(" (%5.2f;%5.2f)",B[i]) КОН; (* После выполнения РазложитьНаLU матрицы L и U оказываются на месте матрицы A *) ЕСЛИ КомплМатр.РазложитьНаLU(A^,p) = 0 ТО (* решаем систему для каждого вектора свободных членов b *) Вывод.Цепь("^Вектора решения:^"); ОТ i:=0 ДО nv-1 ВЫП КомплМатр.РешитьИзLU(A^,B[i],p,X[i]); МатрВВ.ВыводКомплВект(" (%5.2f;%5.2f)",X[i]) КОН ИНАЧЕ Вывод.Цепь("^Вырожденная матрица!^") КОН КОН Голова; (******************************************************************************) УКАЗ Голова КОН ПроКомплLU. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|