Реализации алгоритмов/Разложение Холецкого: различия между версиями
Содержимое удалено Содержимое добавлено
м Откат правок 92.46.30.210 (обс.) к версии 77.47.218.103 Метка: откат |
DannyS712 (обсуждение | вклад) м <source> -> <syntaxhighlight> (phab:T237267) |
||
Строка 3: | Строка 3: | ||
== c# == |
== c# == |
||
< |
<syntaxhighlight lang="csharp"> |
||
public static double[][] CholeskyDecomposition(double[][] A) |
public static double[][] CholeskyDecomposition(double[][] A) |
||
{ |
{ |
||
Строка 35: | Строка 35: | ||
return L; |
return L; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
{{BookCat}} |
{{BookCat}} |
Текущая версия от 16:01, 16 апреля 2020
c#[править]
public static double[][] CholeskyDecomposition(double[][] A)
{
double[][] L = new double[A.Length][];
for (int i = 0; i < A.Length; i++)
{
L[i] = new double[i + 1]; //L - треугольная матрица, поэтому в i-ой строке i+1 элементов
double temp;
//Сначала вычисляем значения элементов слева от диагонального элемента,
//так как эти значения используются при вычислении диагонального элемента.
for (int j = 0; j < i; j++)
{
temp = 0;
for (int k = 0; k < j; k++)
{
temp += L[i][k] * L[j][k];
}
L[i][j] = (A[i][j] - temp) / L[j][j];
}
//Находим значение диагонального элемента
temp = A[i][i];
for (int k = 0; k < i; k++)
{
temp -= L[i][k] * L[i][k];
}
L[i][i] = Math.Sqrt(temp);
}
return L;
}