Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расчетное задание / КМ1 / Расчетка (неисправленная).docx
Скачиваний:
7
Добавлен:
16.05.2024
Размер:
836.74 Кб
Скачать
  1. N — Число уравнений.

  2. A — комплексная матрица размерностью NxN, содержащая матрицу коэффициентов Эрмитовой линейной системы. Указана ссылка только на верхний треугольник A.

  3. LDA — начальное измерение A в точности так, как указано в инструкции измерения вызывающей программы.

  4. FAC — Комплексная матрица размерностью NxN, содержащая разложение матрицы коэффициентов A в качестве выходных данных процедуры LFCHF/DLFCHF или LFTHF/DLFTHTHF. Используется только верхний треугольник FAC.

  5. Ldfac — ведущее измерение fac в точности так, как указано в инструкции измерения вызывающей программы.

  6. Ipvt — вектор длины n, содержащий сводную информацию для факторизации a в качестве выходных данных из процедуры lfchf/dlfchf или lfthf/dlfththf.

  7. B — комплексный вектор длины N, содержащий правую часть линейной системы.

Выходные параметры подпрограммы:

  1. X — комплексный вектор длины N, содержащий решение.

  2. RES — комплексный вектор длины N, содержащий остаточный вектор при улучшенном решении.

Алгоритм.

Процедура LFIHF вычисляет решение системы линейных алгебраических уравнений, имеющих сложную Эрмитову матрицу неопределенных коэффициентов. Для повышения точности выполняется итерационное уточнение вектора решения. Обычно почти все значения в решении точны, даже если матрица несколько некорректна. Чтобы вычислить решение, матрица коэффициентов должна сначала подвергнуться разложению на множители вида U∙DUH. Это можно сделать, вызвав либо LFCHF, либо LFTHF. Итерационное уточнение завершается неудачей только в том случае, если матрица плохо обусловлена. LFIHF и LFSHF оба решают линейную систему с учетом ее U∙DUH факторизации. LFIHF обычно занимает больше времени и дает более точный ответ, чем FSHF. Каждая итерация алгоритма итеративного уточнения, используемого LFIHF, вызывает LFSHF.

Пример решения.

Перенесем пример из библиотеки IMSL в систему программирования Fortran и сравним результаты описанные в IMSL и полученные в программе.

Последовательно решается набор линейных систем. Вектор правой части возмущается после решения системы каждый из первых двух раз путем добавления 0,2 + 0,2i ко второму элементу.

Линкинг – 0 ошибок, 0 предупреждений.

Компиляция – 0 ошибок, 0 предупреждений.

Для наглядности сравним результаты из программы и примера в IMSL.

IMSL:

Fortran:

Результаты совпадают.

Подпрограмма №3: Compute determinant after factoring (Вычислить определитель после разложения на множители).

Задача: Вычислить определитель комплексной Эрмитовой матрицы с учетом разложения вида U∙DUH.

Для этого используем: CALL LFDHF (N, FAC, LDFAC, IPVT, DET1, DET2)

Входные параметры подпрограммы:

  1. N — Число уравнений.

  2. FAC — Комплексная матрица размерностью NxN, содержащая разложение матрицы коэффициентов A в качестве выходных данных процедуры LFCHF/DLFCHF или LFTHF/DLFTHTHF. Используется только верхний треугольник FAC.

  3. Ldfac — ведущее измерение fac в точности так, как указано в инструкции измерения вызывающей программы.

  4. Ipvt — вектор длины n, содержащий сводную информацию для факторизации a в качестве выходных данных из процедуры lfchf/dlfchf или lfthf/dlfththf.

Выходные параметры подпрограммы:

  1. DET1 — скалярный параметр, содержащий мантиссу определителя. Значение, установленное в 1, нормализуется таким образом, что 1.0 = |DET1| < 10.0 или DET 1 = 0.0.

  2. DET2 — скалярный параметр, содержащий показатель степени определителя. Определитель возвращается в виде det(A) = DET1∙10DET2.

Алгоритм.

Процедура LFDHF вычисляет определитель комплексной Эрмитовой матрицы неопределенных коэффициентов. Чтобы вычислить определитель, матрица коэффициентов должна сначала подвергнуться разложению вида U∙DUH. Это можно сделать, вызвав либо LFCHF, либо LFТHF. Поскольку det U = ±1, для вычисления определителя используется формула det A = det U det D det UH = det D. Det D вычисляется как произведение определителей его блоков.

Пример решения.

Перенесем пример из библиотеки IMSL в систему программирования Fortran и сравним результаты описанные в IMSL и полученные в программе.

Компиляция – 0 ошибок, 0 предупреждений.

Линкинг – 0 ошибок, о предупреждений.

Для наглядности сравним результаты из программы и примера в IMSL.

IMSL:

Fortran:

Результаты совпадают.