Все функции писал сам. Надеюсь, кому-нибудь они будут полезны.
//кумулятивная функция нормального распределения
Функция NormCDF(x) Экспорт
Base = 1/2+1/Sqrt(6.283185)*(x-Pow(x,3)/6+Pow(x,5)/40-Pow(x,7)/336+Pow(x,9)/3456-Pow(x,11)/42240);
Если x < 0 Тогда
Возврат 1-Base;
Иначе
Возврат Base;
КонецЕсли;
КонецФункции
//факториал числа
Функция Factor(x) Экспорт
Result = 1;
Для Индекс = 1 По x Цикл
Result = Result*Индекс;
КонецЦикла;
Возврат Result;
КонецФункции
//транспонирование матрицы
Функция TransMatrix(Знач х) Экспорт
r1 = х.Количество();
r2 = х[0].Количество();
Result = Новый Массив(r2,r1);
Для Индекс1 = 0 По r1-1 Цикл
row = х[Индекс1];
Для Индекс2 = 0 По r2-1 Цикл
Result[Индекс2][Индекс1] = row[Индекс2];
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//произведение матриц
Функция ProdMatrix(Знач х,Знач у) Экспорт
кх1 = х.Количество();
кх2 = х[0].Количество();
ку1 = у.Количество();
ку2 = у[0].Количество();
Result = Новый Массив(кх1,ку2);
Для Индекс1 = 0 По кх1-1 Цикл
rowResult = Result[Индекс1];
Для Индекс2 = 0 По ку2-1 Цикл
rowResult[Индекс2] = 0;
Для Индекс3 = 0 По кх2-1 Цикл
rowResult[Индекс2] = rowResult[Индекс2]+х[Индекс1][Индекс3]*у[Индекс3][Индекс2];
КонецЦикла;
rowResult[Индекс2] = Окр(rowResult[Индекс2],12);
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//обратная матрица
Функция InverseMatrix(Знач у) Экспорт
х = CopyMatrix(у);
Ранг = х.Количество();
Result = IdentityMatrix(Ранг);
Для Индекс = 0 По Ранг-1 Цикл
Коэффициент = х[Индекс][Индекс];
Если Коэффициент = 0 Тогда
Поиск1 = Неопределено;
Поиск2 = Неопределено;
Для Индекс1 = Индекс По Ранг-1 Цикл
Для Индекс2 = Индекс По Ранг-1 Цикл
Если х[Индекс2][Индекс1] <> 0 Тогда
Поиск1 = Индекс2;
Поиск2 = Индекс1;
Прервать;
КонецЕсли;
КонецЦикла;
Если Поиск1 <> Неопределено Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Поиск1 = Неопределено Тогда
ВызватьИсключение "Матрица вырождена";
КонецЕсли;
х = MatrixPermutation(х,Индекс,Индекс,Поиск1,Поиск2);
Result = MatrixPermutation(Result,Индекс,Индекс,Поиск1,Поиск2);
КонецЕсли;
rowResult = Result[Индекс];
Для Индекс3 = 0 По Индекс Цикл
rowResult[Индекс3] = Окр(rowResult[Индекс3]/Коэффициент,12);
КонецЦикла;
row = х[Индекс];
Для Индекс3 = Индекс По Ранг-1 Цикл
row[Индекс3] = Окр(row[Индекс3]/Коэффициент,12);
КонецЦикла;
Для Индекс4 = 0 По Ранг-1 Цикл
Если Индекс4 <> Индекс Тогда
Коэффициент = х[Индекс4][Индекс];
Для Индекс5 = 0 По Индекс Цикл
Result[Индекс4][Индекс5] = Окр(Result[Индекс4][Индекс5]-rowResult[Индекс5]*Коэффициент,12);
КонецЦикла;
Для Индекс5 = Индекс По Ранг-1 Цикл
х[Индекс4][Индекс5] = Окр(х[Индекс4][Индекс5]-row[Индекс5]*Коэффициент,12);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//единичная матрица
Функция IdentityMatrix(Знач х) Экспорт
Result = Новый Массив(х,х);
Для Индекс1 = 0 По х-1 Цикл
row=Result[Индекс1];
Для Индекс2 = 0 По х-1 Цикл
row[Индекс2] = ?(Индекс1 = Индекс2,1,0);
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//перемещение строк и колонок внутри матрицы
Функция MatrixPermutation(Знач х,Строка0,Столбец0,Строка1,Столбец1) Экспорт
Result = CopyMatrix(х);
кх1 = х.Количество();
кх2 = х[0].Количество();
Для Индекс1 = 0 По кх1-1 Цикл
Для Индекс2 = 0 По кх2-1 Цикл
Строка = Индекс1;
Столбец = Индекс2;
Если Строка = Строка0 Тогда
Строка = Строка1;
ИначеЕсли Строка = Строка1 Тогда
Строка = Строка0;
КонецЕсли;
Если Столбец = Столбец0 Тогда
Столбец = Столбец1;
ИначеЕсли Столбец = Столбец1 Тогда
Столбец = Столбец0;
КонецЕсли;
Result = х[Строка][Столбец];
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//копия матрицы
Функция CopyMatrix(Знач х) Экспорт
r1 = х.Количество();
r2 = х[0].Количество();
Result = Новый Массив(r2,r1);
Для Индекс1 = 0 По r1-1 Цикл
Для Индекс2 = 0 По r2-1 Цикл
Result[Индекс2][Индекс1] = х[Индекс2][Индекс1];
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//метод наименьших квадратов
Функция MNK(Знач Matrix,Знач Value) Экспорт
Trans = TransMatrix(Matrix);
F1 = ProdMatrix(Trans,Matrix);
F2 = InverseMatrix(F1);
F3 = ProdMatrix(F2,Trans);
Weights = ProdMatrix(F3,Value);
Отклонения = SumMatrix(ProdMatrix(Matrix,Weights),OppositeMatrix(Value));
Детерминация = 1-ProdMatrix(TransMatrix(Отклонения),Отклонения)[0][0]/ProdMatrix(TransMatrix(Value),Value)[0][0];
Возврат Новый Структура("Коэффициенты,Детерминация",Weights,Детерминация);
КонецФункции
//матрица плюс скаляр
Процедура MatrixPlusScalar(Matrix,Scalar) Экспорт
r1 = Matrix.Количество();
r2 = Matrix[0].Количество();
Для Индекс1 = 0 По r1-1 Цикл
row = Matrix[Индекс1];
Для Индекс2 = 0 По r2-1 Цикл
row[Индекс2] = row[Индекс2]+Scalar;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//минус матрица
Функция OppositeMatrix(Знач х) Экспорт
r1 = х.Количество();
r2 = х[0].Количество();
Result = Новый Массив(r1,r2);
Для Индекс1 = 0 По r1-1 Цикл
rowResult = Result[Индекс1];
row = х[Индекс1];
Для Индекс2 = 0 По r2-1 Цикл
rowResult[Индекс2] = -row[Индекс2];
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//сумма матриц
Функция SumMatrix(Знач х,Знач у) Экспорт
r1 = х.Количество();
r2 = х[0].Количество();
Result = Новый Массив(r1,r2);
Для Индекс1 = 0 По r1-1 Цикл
rowResult = Result[Индекс1];
rowх = х[Индекс1];
rowу = у[Индекс1];
Для Индекс2 = 0 По r2-1 Цикл
rowResult[Индекс2] = rowх[Индекс2]+rowу[Индекс2];
КонецЦикла;
КонецЦикла;
Возврат Result;
КонецФункции
//десятичное число в двоичное
Функция DecimalToBinary(х) Экспорт
Остаток = х;
Индекс = 0;
Результат = 0;
Пока Остаток > 0 Цикл
Знак = Остаток%2;
Остаток = (Остаток-Знак)/2;
Результат = Результат+Знак*Pow(10,Индекс);
Индекс = Индекс+1;
КонецЦикла;
Возврат Результат;
КонецФункции
//коэффициент отклонения двух чисел
Функция RelativeDeviation(х,у,Num = 4) Экспорт
Возврат Окр(?(х >= у,х/у,у/х),Num)-1;
КонецФункции
//модуль числа
Функция AbsValue(х) Экспорт
Возврат Макс(х,-х);
КонецФункции
//округление вверх
Функция RoundUp(x,Num = 1) Экспорт
z = x/Num;
res = Цел(z);
Если z <> res Тогда
z = res+1;
КонецЕсли;
Возврат z*Num;
КонецФункции