IMath.Mqr

Синтаксис Fore

Mqr(Data: Array; Var Q: Array; Var R: Array);

Синтаксис Fore.NET

Mqr(Data: System.Array; Var Q: System.Array; Var R: System.Array);

Параметры

Data. Входной параметр, двумерный массив;

Примечание. Входной двумерный массив может быть размерности n×m (прямоугольная матрица) или n×n (квадратная матрица).

Q. Выходной параметр, двумерный массив размерности n×n;

R. Выходной параметр, двумерный массив размерности n×m.

Описание

Метод Mqr возвращает результат QR-разложения вещественной матрицы.

Комментарии

QR-разложение матрицы - представление матрицы в виде произведения квадратной ортогональной матрицы Q и верхнетреугольной матрицы R. Произведение матриц Q·R дает исходную матрицу.

Для нахождения QR-разложения используется преобразование Хаусхолдера.

Пример Fore

Для выполнения примера добавьте ссылку на системную сборку MathFin.

Sub UserProc;
Var 
    a: Array Of Double;
    Q, R: Array Of Double;
    i,j: Integer;
    str: String;
Begin
    a := New double[2,4];
    // Входная матрица: 
    a[0,0] := 1;    a[0,1] := 1;    a[0,2] := 2;        a[0,3] := 0;
    a[1,0] := 1;    a[1,1] := 0;    a[1,2] := -1.4142;  a[1,3] := 0;
    // QR-разложение:
    math.Mqr(a, Q, R);
    Debug.WriteLine("Q =");
    For i := 0 To Q.GetUpperBound(1Do
        str := "";
        For j := 0 To Q.GetUpperBound(2Do
            str := str + Q[i, j].ToString + "; ";
        End For;
        Debug.WriteLine(str);
    End For;
    Debug.WriteLine("R =");
    For i := 0 To R.GetUpperBound(1Do
        str := "";
        For j := 0 To R.GetUpperBound(2Do
            str := str + R[i, j].ToString + "; ";
        End For;
        Debug.WriteLine(str);
    End For;
End Sub UserProc;

После выполнения примера в окно консоли будет выведено QR-разложение исходной матрицы:

Q =

-0.707106781186547; 0.707106781186547;

-0.707106781186547; -0.707106781186547;

R =

-1.41421356237309; -0.707106781186547; -0.414223152419079; 0;

0; 0.707106781186547; 2.41420397232711; 0;

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.MathFin;

Public Shared Sub Main(Params: StartParams);
Var 
    math: MathClass = New MathClass();
    a: System.Array;
    Q, R: System.Array;
    i,j: Integer;
    str: String;
Begin
    a := New double[4,2];
    // Входная матрица:
    a[0,0] := 1;    a[1,0] := 1;    a[2,0] := 2;        a[3,0] := 0;
    a[0,1] := 1;    a[1,1] := 0;    a[2,1] := -1.4142;  a[3,1] := 0;
    // QR-разложение:
    math.Mqr(a, Var Q, Var R);
    System.Diagnostics.Debug.WriteLine("Q =");
    For i := 0 To Q.GetUpperBound(1Do
        str := "";
        For j := 0 To Q.GetUpperBound(0Do
            str := str + Q[j, i].ToString() + "; ";
        End For;
        System.Diagnostics.Debug.WriteLine(str);
    End For;
    System.Diagnostics.Debug.WriteLine("R =");
    For i := 0 To R.GetUpperBound(1Do
        str := "";
        For j := 0 To R.GetUpperBound(0Do
            str := str + R[j, i].ToString() + "; ";
        End For;
        System.Diagnostics.Debug.WriteLine(str);
    End For;
End Sub;

См. также:

IMath