Mqr(Data: Array; Var Q: Array; Var R: Array);
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-разложения используется преобразование Хаусхолдера.
Для выполнения примера добавьте ссылку на системную сборку 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(1) Do
str := "";
For j := 0 To Q.GetUpperBound(2) Do
str := str + Q[i, j].ToString + "; ";
End For;
Debug.WriteLine(str);
End For;
Debug.WriteLine("R =");
For i := 0 To R.GetUpperBound(1) Do
str := "";
For j := 0 To R.GetUpperBound(2) Do
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.
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(1) Do
str := "";
For j := 0 To Q.GetUpperBound(0) Do
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(1) Do
str := "";
For j := 0 To R.GetUpperBound(0) Do
str := str + R[j, i].ToString() + "; ";
End For;
System.Diagnostics.Debug.WriteLine(str);
End For;
End Sub;
См. также: