|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.srcc.msu.ru/num_anal/lib_na/cat/al/aln1r.htm
Дата изменения: Fri Jun 17 09:13:58 2011 Дата индексирования: Mon Feb 4 02:11:29 2013 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ( Фортран ) 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