/// <summary> /// получиь параметр распределения вейбулла бета /// </summary> /// <returns></returns> private static double getVeybullBeta(double v0, double veybullGamma) { double arg = 1d + 1d / veybullGamma; double G = SpecialFunction.gamma(arg); return(v0 / G); }
public double kappa(double lambdaL, double lambdaS, double aL, double time) { //double temp = Math.Sqrt(Math.PI) * (lambdaL - lambdaS) / (2 * aL * Math.Sqrt(time)); double temp = SpecialFunction.gamma(0.2) * (lambdaL - lambdaS) / (5 * aL * Math.Pow(time, 0.2)); //double temp = Math.Sqrt(Math.PI) * (lambdaL - lambdaS) / (2 * aL * Math.Sqrt(time)); return(temp); }
private double density(double x) { double fx2 = 0; if (x <= 0) { fx2 = 0; } else { fx2 = (Math.Pow(2, -(size_segs) / 2.0) / SpecialFunction.gamma(size_segs / 2.0)) * Math.Pow(x, (size_segs) / 2.0 - 1) * Math.Exp(-x / 2.0); } return(fx2); }
private double f(double x) // плотность вероятности { double res = 0; if (x <= 0) { res = 0; } else { res = (Math.Pow(2, -((double)k_intervals - 1.0) / 2.0) / SpecialFunction.gamma(((double)k_intervals - 1.0) / 2.0)) * Math.Pow(x, (((double)k_intervals - 1.0) / 2.0) - 1.0) * Math.Exp(-x / 2.0); } //res = (Math.Pow(2, -((double)k_intervals - 1.0) / 2.0) / SpecialFunction.gamma(((double)k_intervals - 1.0) / 2.0)) * Math.Pow(x, ((double)k_intervals - 1.0) / 2.0 - 1.0) * Math.Exp(-x / 2.0); return(res); }
/// <summary> /// возвращает экстремальную скорость ветра за 50 лет /// </summary> /// <param name="v0"></param> /// <param name="veybullGamma"></param> /// <returns></returns> private static double getExtremalSpeed(double v0, double veybullGamma) { double k; if (veybullGamma <= 1.77) { double T = 50d; double n = 23037d; double a, b, d; a = SpecialFunction.gamma(1d + 1d / veybullGamma); d = 1 - Math.Exp(Math.Log(1d - 1d / T) / n); b = -1 * Math.Log(d); k = (1 / a) * Math.Pow(b, 1 / veybullGamma); } else { k = 5; } return(v0 * k); }
static void Main(string[] args) { //double cS= 1000, cL= 1290, roS= 2679, roL= 2380, L= 390000, tempKrzep= 930, u0= 1213, uI= 298, lambdaL=104,lambdaS= 240; //double cS = 690, cL = 800, roS = 7500, roL = 7000, L = 270000, tempKrzep = 1773, u0 = 2213, uI = 323, lambdaL = 33, lambdaS = 30; double cS = 25, cL = 26, roS = 10, roL = 10, tempKrzep = 1, u0, uI, /*u0 = 1573, uI =973,*/ lambdaL = 130, lambdaS = 125; //double cS = 4217, cL = 4182, roS = 999.82, roL = 998.29, L = 334000, tempKrzep = 273, u0=293, uI=263, /*u0 = 1573, uI =973,*/ lambdaL = 0.6, lambdaS = 0.569; int lbIteracji = 200; double a, stalaA, stalaSigma; double aL = lambdaL / (roL * cL); //double entalpiaL = 3536280000, entalpiaS = 2491470000; //double entalpiaL = 11200275000, entalpiaS = 9175275000; //double entalpiaL = 500, entalpiaS = 250; double entalpiaS, entalpiaL; double b = 2; double alfa = 0.8; int granica = 0; int n = 1000; double deltaX = b / n, deltaT = 0.01; //double[] temp0= { 50,50,50,50,50}; //int n = temp0.Length; double[] temp0 = new double[n + 1]; for (int i = 0; i <= n; i++) { //temp0[i] = tempKrzep-i*dT; //temp0[i] = uI; //temp0[i] =Math.Exp(-deltaX*i); /*warunek początkowy T0 */ temp0[i] = Math.Exp(-deltaX * i); } double[] aVec = new double[n + 1]; double[] bVec = new double[n + 1]; double[] cVec = new double[n + 1]; double[] dVec = new double[n + 1]; double[,] tabH = new double[lbIteracji + 1, n + 1]; double[,] tabHKreska = new double[lbIteracji + 1, n + 1]; double[,] tabHDaszek = new double[lbIteracji + 1, n + 1]; double[,] tabH2Kreska = new double[lbIteracji + 1, n + 1]; double[,] tabH2Daszek = new double[lbIteracji + 1, n + 1]; int[] tabTx = new int[n + 1]; /*tablica, w której zapisane są czasy tx topnienia dla danego punktu x*/ double suma = 0; int j = 1; int l = 990; double[] temperatury = new double[n + 1]; funkcje.MetodaThomasa thomas = new funkcje.MetodaThomasa(); /* obiekt klasy MetodaThomasa do rozwiązania układu równań */ double[] wynikThomas; funkcje.Temperatura tempZEntalpii = new funkcje.Temperatura(); /* obiekt klasy Temperatura do wyznaczenia temperatury na podstawie entalpii */ double temp; funkcje.FunkcjaG funkcjaG = new funkcje.FunkcjaG(); /* obiekt klasy funkcjaG */ double wynikG; funkcje.Entalpia entZtemp = new funkcje.Entalpia(); double ent; funkcje.Kappa kap = new funkcje.Kappa(); double kappa; for (int i = 0; i <= n; i++) { tabTx[i] = lbIteracji; /* ustawiamy czas topnienia dla punktu x na lbIteracji */ } kappa = kap.kappa(lambdaL, lambdaS, aL, 1); entalpiaS = cS * roS * tempKrzep; entalpiaL = entalpiaS + kappa; for (int i = 0; i < temp0.Length; i++) { if (temp0[i] > tempKrzep) { tabH[0, i] = entZtemp.entalpia(temp0[i], tempKrzep, cL, roL, cS, roS, kappa); /* Etap 1: wyznaczamy entalpie w chwili 0 na podstawie T0*/ } else { tabH[0, i] = entZtemp.entalpia(temp0[i], tempKrzep, cL, roL, cS, roS, kappa); } } //Console.Write("tabH0[n-1]: {0}", tabH[0, 0]); /*Console.Write("tabH0: "); * for (int i = 0; i < n; i++) * Console.Write("{0} ", tabH[0, i]);*/ stalaSigma = 1 / (SpecialFunction.gamma(1 - alfa) * (1 - alfa) * Math.Pow(deltaT, alfa)); /* wartość funkcji sigma */ //for (int j = 1; j < lbIteracji; j++) while (granica < l && j <= lbIteracji) { a = lambdaL / (cL * roL); /* Etap 2a: sprowadzamy całość do fazy ciekłej */ stalaA = a / (Math.Pow(deltaX, 2)); kappa = kap.kappa(lambdaL, lambdaS, aL, deltaT * j); entalpiaS = cS * roS * tempKrzep; entalpiaL = entalpiaS + kappa; for (int i = 0; i < temp0.Length; i++) { tabHKreska[j - 1, i] = Math.Max(tabH[j - 1, i], entalpiaL); } //Console.WriteLine(" "); //Console.Write("tabHKreska: "); //for (int i = 0; i < n; i++) // Console.Write("{0} ", tabHKreska[j-1, i]); //Console.Write("tabHKreska[n-1]: {0}", tabHKreska[j-1, 0]); aVec[0] = 0; for (int i = 1; i < n; i++) { aVec[i] = -stalaA; } aVec[n] = -2 * stalaA; bVec[0] = 1; for (int i = 1; i < n + 1; i++) { bVec[i] = stalaSigma + 2 * stalaA; } cVec[0] = 0; for (int i = 1; i < n; i++) { cVec[i] = -stalaA; } cVec[n] = 0; //u0 = Math.Exp(a*(j)*deltaT); u0 = Math.Exp(a * (j) * deltaT); dVec[0] = entZtemp.entalpia(u0, tempKrzep, cL, roL, cS, roS, kappa); /* obliczenie entalpii dla brzegowej temperatury u0 */ Console.WriteLine(dVec[0] > entalpiaL); for (int i = 1; i <= n; i++) { suma = 0; for (int it = 2; it <= j; it++) { suma = suma + (Math.Pow(it, 1 - alfa) - Math.Pow(it - 1, 1 - alfa)) * (tabHKreska[j - it + 1, i] - tabHKreska[j - it, i]); } dVec[i] = stalaSigma * tabHKreska[j - 1, i] - stalaSigma * suma + cL * roL * funkcjaG.g(i, tabTx[i], tabHKreska, j, stalaSigma, alfa, cL, cS, roL, roS, tempKrzep, entalpiaL, entalpiaS, kappa); } wynikThomas = thomas.nowa(aVec, bVec, cVec, dVec); /* rozwiązanie układu równań metodą Thomasa */ for (int i = 0; i <= n; i++) { tabHDaszek[j, i] = wynikThomas[i]; } //Console.Write("tabHDaszek[n-1]: {0}", tabHDaszek[j, 0]); //Console.WriteLine(" "); //Console.Write("tabHDaszek wyznaczone z Thomasa: "); //for (int i = 0; i < n; i++) // Console.Write("{0} ", tabHDaszek[j, i]); for (int i = 0; i <= n; i++) { tabHKreska[j, i] = tabHDaszek[j, i] + (tabH[j - 1, i] - tabHKreska[j - 1, i]); /* korekta entalpii */ } //Console.Write("tabHKreska[n-1]: {0}", tabHKreska[j, 0]); /* Console.WriteLine(" "); * Console.Write("tabHKreska po korekcie: "); * for (int i = 0; i < n; i++) * Console.Write("{0} ", tabHKreska[j, i]); */ a = lambdaS / (cS * roS); /* Etap 2b: sprowadzamy całość do fazy stałej */ stalaA = a / (Math.Pow(deltaX, 2)); for (int i = 0; i <= n; i++) { tabH2Kreska[j - 1, i] = Math.Min(tabHKreska[j, i], entalpiaS); } //Console.Write("tabH2Kreska[n-1]: {0}", tabH2Kreska[j-1, 0]); //Console.WriteLine(" "); //Console.Write("tabH2Kreska (minimum): "); //for (int i = 0; i < n; i++) // Console.Write("{0} ", tabH2Kreska[j-1, i]); aVec[0] = 0; for (int i = 1; i < n; i++) { aVec[i] = -stalaA; } aVec[n] = 0; for (int i = 0; i < n; i++) { bVec[i] = stalaSigma + 2 * stalaA; } bVec[n] = 1; cVec[0] = -2 * stalaA; for (int i = 1; i < n; i++) { cVec[i] = -stalaA; } cVec[n] = 0; for (int i = 0; i < n; i++) { suma = 0; for (int it = 2; it <= j; it++) { suma = suma + (Math.Pow(it, 1 - alfa) - Math.Pow(it - 1, 1 - alfa)) * (tabH2Kreska[j - it + 1, i] - tabH2Kreska[j - it, i]); } dVec[i] = stalaSigma * tabH2Kreska[j - 1, i] - stalaSigma * suma + cL * roL * funkcjaG.g(i, tabTx[i], tabH2Kreska, j, stalaSigma, alfa, cL, cS, roL, roS, tempKrzep, entalpiaL, entalpiaS, kappa);; } uI = Math.Exp(a * (j) * deltaT - 2); //uI =Math.Exp(a*(j)*deltaT-1); dVec[n] = entZtemp.entalpia(uI, tempKrzep, cL, roL, cS, roS, kappa); Console.WriteLine(uI); wynikThomas = thomas.nowa(aVec, bVec, cVec, dVec); /* rozwiązanie układu równań metodą Thomasa */ for (int i = 0; i <= n; i++) { tabH2Daszek[j, i] = wynikThomas[i]; } //Console.Write("tabH2Daszek[n-1]: {0}", tabH2Daszek[j, 0]); //Console.WriteLine(" "); // Console.Write("tabH2Daszek z thomasa: "); // for (int i = 0; i < n; i++) // Console.Write("{0} ", tabH2Daszek[j, i]); for (int i = 0; i <= n; i++) { tabH[j, i] = tabH2Daszek[j, i] + (tabHKreska[j, i] - tabH2Kreska[j - 1, i]); /* korekta */ } //Console.Write("tabH[n-1]: {0}", tabH[j, 0]); //Console.WriteLine(" "); //Console.Write("tabH po korekcie: "); //for (int i = 0; i < n; i++) //{ // Console.Write("{0} ", tabH[j, i]); //} //Console.WriteLine(" "); //Console.Write("temp tabH: "); //for (int i = 0; i < n; i++) //{ // Console.Write("{0} ", tempZEntalpii.temperatura(tabH[j, i])); //} //Console.WriteLine(" "); for (int i = 0; i <= n; i++) { if (tabH[j, i] > entalpiaS && tabH[j - 1, i] <= entalpiaS) { tabTx[i] = j; } } for (int i = 1; i < n; i++) { if (tabH[j, i] <= entalpiaS && tabH[j, i + 1] <= entalpiaS && tabH[j, i - 1] > entalpiaS) { granica = i; } } Console.WriteLine("{0}", j); j++; } Console.Write("tabH: "); for (int i = 0; i <= n; i++) { Console.Write("{0} ", tabH[j - 1, i]); } string path = @"C:\Users\agata.chmielowska\Desktop\AlgorytmC1zestawDanych\Wyniki\entalpie.csv"; System.IO.StreamWriter str = new System.IO.StreamWriter(path, false); for (int i = 0; i <= n; i++) { str.WriteLine("{0} ", tabH[j - 1, i]); } str.Close(); Console.WriteLine(""); Console.Write("temp tabH: "); for (int i = 0; i <= n; i++) { temperatury[i] = tempZEntalpii.temperatura(tabH[j - 1, i], tempKrzep, cL, roL, cS, roS, kappa, entalpiaL, entalpiaS); Console.Write("{0} ", temperatury[i]); } path = @"C:\Users\agata.chmielowska\Desktop\AlgorytmC1zestawDanych\Wyniki\temperatury.csv"; str = new System.IO.StreamWriter(path, false); for (int i = 0; i <= n; i++) { str.WriteLine("{0} ", temperatury[i]); } str.Close(); Console.WriteLine(""); Console.Write("Wartość tabTx:"); for (int i = 0; i <= n; i++) { Console.Write("{0} ", tabTx[i]); } path = @"C:\Users\agata.chmielowska\Desktop\AlgorytmC1zestawDanych\Wyniki\granica.csv"; str = new System.IO.StreamWriter(path, false); for (int i = 0; i <= n; i++) { str.WriteLine("{0} ", tabTx[i] * deltaT); } str.Close(); Console.WriteLine(""); Console.WriteLine("Program zakończył działanie po {0} iteracjach", j - 1); Console.WriteLine(""); Console.WriteLine("Granica znajduje sie w punkcie: {0}", granica); temp = tempZEntalpii.temperatura(entalpiaL, tempKrzep, cL, roL, cS, roS, kappa, entalpiaL, entalpiaS); Console.WriteLine("Wartosc temperatury: {0}", temp); wynikG = funkcjaG.g(5, tabTx[5], tabH, 20, stalaSigma, alfa, cL, cS, roL, roS, tempKrzep, entalpiaL, entalpiaS, kappa); Console.WriteLine("Wartość g: {0} ", wynikG); Console.WriteLine("Wartość funkcji gamma: {0} ", SpecialFunction.gamma(0.5)); Console.ReadKey(); return; }
private void button2_Click(object sender, EventArgs e) { alfa = Convert.ToDouble(textBox4.Text); st_sv = size - 1; for (int j = 0; j < size; ++j) { ni[j] = 0; } dataGridView2.Rows.Clear(); dataGridView3.Rows.Clear(); dataGridView2.RowCount = size; dataGridView2.ColumnCount = 1; dataGridView3.ColumnCount = size + 2; dataGridView3.RowCount = 4; dataGridView2.Rows[0].Cells[0].Value = Convert.ToString(Int64.MinValue); for (int j = 1; j < size; ++j) { dataGridView2.Rows.Add(); board[j] = (min + ((max - min) / size) * j); dataGridView2.Rows[j].Cells[0].Value = Convert.ToString(board[j]); } dataGridView2.Rows[size].Cells[0].Value = Convert.ToString(Int64.MaxValue); for (int j = 0; j < size + 1; ++j) { zi[j] = (Convert.ToDouble(dataGridView2.Rows[j].Cells[0].Value)); dataGridView3.Rows[0].Cells[j + 1].Value = Convert.ToString(zi[j]); } Refresh(); for (int i = 0; i < n; i++) { for (int j = 1; j < size + 1; j++) { if ((ksi[i] <= zi[j]) && (ksi[i] >= zi[j - 1])) { ni[j - 1]++; break; } } } double R0 = 0; double tt = 0; double pp = 0; dataGridView3.Rows[1].Cells[0].Value = Convert.ToString("nj"); dataGridView3.Rows[2].Cells[0].Value = Convert.ToString("qj"); dataGridView3.Rows[3].Cells[0].Value = Convert.ToString("R0"); for (int j = 0; j < size; j++) { dataGridView3.Rows[1].Cells[j + 2].Value = Convert.ToString(ni[j]); if (zi[j] < 0) { tt = 1 - Math.Pow(Math.E, 0); } else { tt = 1 - Math.Pow(Math.E, -lambda * (zi[j])); } if (zi[j + 1] < 0) { pp = 1 - Math.Pow(Math.E, 0); } else { pp = 1 - Math.Pow(Math.E, -lambda * (zi[j + 1])); } dataGridView3.Rows[2].Cells[j + 2].Value = (pp - tt); R0 += Math.Pow(ni[j] - n * (pp - tt), 2) / (n * (pp - tt)); dataGridView3.Rows[3].Cells[j + 2].Value = R0; } label5.Text = Convert.ToString(R0); double FR0 = 0; double xi2 = 0; double R0_ = R0; R0 = 0; int jj = 0; chart1.Series["Series1"].Points.Clear(); while (R0 < R0_) { R0 = jj * 0.2; for (int i = 1; i < n; i++) { xi2 += R0 / (2 * n) * Math.Pow(2, -st_sv / 2) * Math.Pow(SpecialFunction.gamma(st_sv / 2), -1) * (Math.Pow(Math.E, -(R0 * (i - 1) / n) / 2) * Math.Pow((R0 * (i - 1) / n), st_sv / 2 - 1) + Math.Pow(Math.E, -(R0 * i / n) / 2) * Math.Pow((R0 * i / n), st_sv / 2 - 1)); } chart1.Series["Series1"].Points.AddXY(R0, xi2); xi2 = 0; jj++; } for (int i = 1; i < n; i++) { xi2 += R0_ / (2 * n) * Math.Pow(2, -st_sv / 2) * Math.Pow(SpecialFunction.gamma(st_sv / 2), -1) * (Math.Pow(Math.E, -(R0_ * (i - 1) / n) / 2) * Math.Pow((R0_ * (i - 1) / n), st_sv / 2 - 1) + Math.Pow(Math.E, -(R0_ * i / n) / 2) * Math.Pow((R0_ * i / n), st_sv / 2 - 1)); } FR0 = 1 - xi2; label8.Text = Convert.ToString(FR0); if (FR0 > alfa) { label9.Text = Convert.ToString("Гипотеза принята"); } else { label9.Text = Convert.ToString("Гипотеза отвержена"); } R0 = 0; }