Расчет Величины Гамма по закону распределения СВ Фишера - C#
Формулировка задачи:
Добрый день.
Я ниже создавал тему про нахождение дробной части числа. Это мне нужно было для закона распределения СВ Фишера. Я уже где-то неделю немогу решить во такую проблему:
Выполненные условия:
-Есть СВ распределенная по закону Фишера (распределение сделано правильно и соответствует почти теории)
-Есть такая рассчитываемая величина, называемая частотой попадание в заданные интервалы (Расчитывается правильно и их сумма равна 1); кол.интервалов задаются (изначально > 10).
-Проблема:
1. Рассчитана частота попаданий (практическая). Чтобы ее проверить нужно сделать почти такуюжу, но теоретическую.
-Эта величина (ЧастТеоретическая), рассчитывается по формуле:
Параметры К1 и К2 задаются пользователем. С формулой проблем нет при условии что К1 и К2 кратны двум.
Проблема в следующем:
Вот те буковки Г и есть Гамма которую я не могу правильно рассчитать при условии что К1 и К2 не кратны двум.
В коде я решил рассчитать Гаммы(3 штуки нужно) так:
Вот.
Формула для расчета фактариала, если не крато двум следующая (вот с ней то у меня проблемы походу):
-Допустим К1=3, К2=5, то
Г1(3/2) = Г(1+1/2)...Г(a+1/2)=,
а двойной фактариал (2a-1)!! равен - 1*3*5*7......(2a-1)
Вот такая проблема.
Если, кто-то с этим уже сталкивался, помогите пжста.
Спасибо.
public void Funcf_F() { // //Этот метод предназначен для рассчета величины Гамма с параметрами //К1 и К2 // arG_a = new double[3]; arG = new double[3]; //Параметры Гаммы, та величина что в скобке в формуле arG_a[0] = (K1 + K2) / 2; //G1_a arG_a[1] = K1 / 2; //G2_a arG_a[2] = K2 / 2; //G3_a //Унивирсальный метод рассчета Гаммы for (int i = 0; i < 3; i++) { arG[i] = 1; int G_shag = 1; // Изначальный шаг фактариала double G_fakt = 1; //Величина фактариала if ((arG_a[i] - Math.Floor(arG_a[i])) == 0) //услови, что если крато двум { for (int G_i = 1; G_i < (int)Math.Floor(arG_a[i]); G_i++) { arG[i] *= G_i; } } else { //если нет, то: for (int G_i = 1; G_i < (int)(2 * Math.Floor(arG_a[i])); G_i++) { G_shag += 2; G_fakt *= G_shag; } arG[i] = (Math.Sqrt(Math.PI) * G_fakt) / Math.Pow(2, Math.Floor(arG_a[i])); } } }
Решение задачи: «Расчет Величины Гамма по закону распределения СВ Фишера»
textual
Листинг программы
for (int a = 0; a < fF._Ntb; a++) { this.datResult.Rows[a].Cells[0].Value = fF._arTable[a, 0]; //N this.datResult.Rows[a].Cells[1].Value = Math.Round(fF._arTable[a, 1], 4); //интервалы this.datResult.Rows[a].Cells[2].Value = fF._arTable[a, 2]; //попадания this.datResult.Rows[a].Cells[3].Value = Math.Round(fF._arTable[a, 3], 2); //теор попадания this.datResult.Rows[a].Cells[4].Value = Math.Round(fF._arTable[a, 4], 4); //хи2 this.datResult.Rows[a].Cells[5].Value = Math.Round(fF._arTable[a, 5], 4); //частота this.datResult.Rows[a].Cells[6].Value = Math.Round(fF._arTable[a, 6], 4); //вероятность }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д