Текст подпрограммы и версий ( Фортран ) aln1r.zip |
Тексты тестовых примеров ( Фортран ) taln1r.zip |
Текст подпрограммы и версий ( Си ) aln1r_c.zip |
Тексты тестовых примеров ( Си ) taln1r_c.zip |
Текст подпрограммы и версий ( Паскаль ) aln1r_p.zip |
Тексты тестовых примеров ( Паскаль ) taln1r_p.zip |
Вычисление приближения к псевдорешению системы линейных алгебраических уравнений на множестве неотрицательных векторов
Для системы линейных алгебраических уравнений:
A * X = B
ищется вектор X с неотрицательными компонентами, минимизирующий невязку
|| A * X - B ||
Подробное описание алгоритма смотри в [1] (алгоритм NNLS)
1. | Lawson C.L., Hanson R.J. "Solving Least Squares Problem", Prentice - Hall Inc., Englewood Cliffs, New Jersey, 1974. |
SUBROUTINE ALN1R (A, MDA, M, N, B, X, RNORM, W, ZZ, INDEX, IERR)
Параметры
A - | вещественный двумерный массив размера MDA на N, содержащий при входе в подпрограмму в первых M строках матрицу A (I, J) размерности M на N. По окончании работы подпрограммы содержит произведение матриц Q * A, где Q - ортогональная матрица, размера M на M, вычисленная данной подпрограммой; |
MDA - | число строк массива A (тип: целый); |
M, N - | число строк и столбцов матрицы A, соответственно (тип: целый); |
B - | при входе в подпрограмму содержит вещественный вектор длины M - правую часть уравнения. В результате работы подпрограммы содержит вектор Q * B; |
X - | вещественный вектор длины N - в результате работы подпрограммы содержит решение; |
RNORM - | вещественная переменная, содержащая по окончании работы подпрограммы евклидову норму вектора невязки; |
W - | вещественный рабочий вектор длины N; по окончании работы подпрограммы содержит вектор двойственного решения, удовлетворяющего следующим соотношениям (см.[1]): |
W(I) = 0. - | для всех I из множества P; |
W(I) ≤ 0. - | для всех I из множества Z |
ZZ - | вещественный рабочий вектор длины M; |
INDEX - |
целый рабочий вектор длины N; по окончании работы
подпрограммы определяет множества P и Z следующим образом (см.[1]): INDEX(1) до INDEX(NSETP) = множество P INDEX(IZ1) до INDEX(N) = множество Z IZ1 = NSETP + 1 = NPP1; |
IERR - | диагностический параметр - код завершения программы со значениями: |
IERR= 0 - | решение получено успешно; |
IERR=65 - | неправильная размерность параметров; |
IERR=66 - | требуется более чем 3*N итераций |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
1. | Подпрограмма ALN1R обращается к вспомогательным подпрограммам с именами: ALN1R1, ALN1R2, ALN1R3, ALN1R4. |
Рассмотрим решение системы уравнений:
X + Y + Z = 2 2*X + 2*Y + Z = 4 DIMENSION A(2, 3), B(2), X(3), W(3), ZZ(2), INDEX(3) DATA A /1., 2., 1., 2., 1., 1./ DATA B /2., 4./ CALL ALN1R (A, 2, 2, 3, B, X, RNORM, W, ZZ, INDEX, IERR) Результаты: IERR: 0 Решение: 2.00000E+00 .00000E+00 .00000E+00 Невязка: 8.11612E-08 W: 0.00000E + 00 .00000E + 00 -3.62964E-08 INDEX: 1 2 3 Рассмотрим решение системы уравнений: X + Y + 0 * Z = 1 X - Y + 0 * Z = 3 DIMENSION A(2, 3), B(2), X(3), W(3), ZZ(2), INDEX(3) DATA A /1., 1., 1., -1., 0., 0./ DATA B /1., 3./ CALL ALN1R (A, 2, 2, 3, B, X, RNORM, W, ZZ, INDEX, IERR) Результаты: IERR: 0 Решение: 2.00000E+00 .00000E+00 .00000E+00 Невязка: 1.41421E+00 W: .00000E + 00 -2.00000E + 00 .00000E + 00 INDEX: 1 2 3