private void btnHitung_Click(object sender, EventArgs e) { var cekKosong = this.Controls.OfType <TextBox>().Where((txt) => txt.Text.Length == 0 && txt.Visible == true); listBox1.Items.Clear(); if (cekKosong.Any()) { MessageBox.Show("Harap masukkan semua input"); } else { int jlh = Convert.ToInt16(comboBox2.Text); double has = Convert.ToDouble(textBox11.Text); string kata; if (comboBox1.Text == "Newton") { double[] x = new double[jlh]; double[] y = new double[jlh]; //MessageBox.Show(jlh.ToString()); if (jlh == 5) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); x[4] = Convert.ToDouble(textBox5.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); y[4] = Convert.ToDouble(textBox10.Text); } else if (jlh == 4) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); } else if (jlh == 3) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); } double[,] st = new double[jlh, jlh]; for (int i = 0; i < jlh; i++) { st[i, 0] = y[i]; } for (int k = 1; k < jlh; k++) { for (int i = 0; i < (jlh - k); i++) { st[i, k] = (st[i + 1, k - 1] - st[i, k - 1]) / (x[i + k] - x[i]); //kata = string.Format("st[{0},{1}] = {2}", i, k, st[i, k]); //MessageBox.Show(kata); } } double jumlah = 0; for (int i = 0; i < jlh; i++) { double suku = st[0, i]; for (int k = 0; k <= i - 1; k++) { suku = suku * (has - x[k]); } jumlah += suku; kata = string.Format("b{0} = {1}", i, st[0, i]); listBox1.Items.Add(kata); } kata = string.Format("Hasil = {0}", jumlah); listBox1.Items.Add(kata); } else if (comboBox1.Text == "Lagrange") { var cek = this.Controls.OfType <CheckBox>().Count((ck) => ck.Checked) > 1; if (cek) { //double [] x = new double[0]; //double[] y = new double[0]; int n = 0; int m = -1; double[] x = new double[jlh]; double[] y = new double[jlh]; if (jlh == 5) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); x[4] = Convert.ToDouble(textBox5.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); y[4] = Convert.ToDouble(textBox10.Text); } else if (jlh == 4) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); } else if (jlh == 3) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); } if (checkBox1.Checked) { n++; //Array.Resize(ref x, x.Length + 1); //Array.Resize(ref y, y.Length + 1); //x[x.GetUpperBound(0)] = Convert.ToDouble(textBox1.Text); //y[y.GetUpperBound(0)] = Convert.ToDouble(textBox6.Text); m = 0; } if (checkBox2.Checked) { n++; //Array.Resize(ref x, x.Length + 1); //Array.Resize(ref y, y.Length + 1); //x[x.GetUpperBound(0)] = Convert.ToDouble(textBox2.Text); //y[y.GetUpperBound(0)] = Convert.ToDouble(textBox7.Text); if (m < 0) { m = 1; } } if (checkBox3.Checked) { n++; //Array.Resize(ref x, x.Length + 1); //Array.Resize(ref y, y.Length + 1); //x[x.GetUpperBound(0)] = Convert.ToDouble(textBox3.Text); //y[y.GetUpperBound(0)] = Convert.ToDouble(textBox8.Text); if (m < 0) { m = 2; } } if (checkBox4.Checked) { n++; //Array.Resize(ref x, x.Length + 1); //Array.Resize(ref y, y.Length + 1); //x[x.GetUpperBound(0)] = Convert.ToDouble(textBox4.Text); //y[y.GetUpperBound(0)] = Convert.ToDouble(textBox9.Text); if (m < 0) { m = 3; } } if (checkBox5.Checked) { n++; //Array.Resize(ref x, x.Length + 1); //Array.Resize(ref y, y.Length + 1); //x[x.GetUpperBound(0)] = Convert.ToDouble(textBox5.Text); //y[y.GetUpperBound(0)] = Convert.ToDouble(textBox10.Text); if (m < 0) { m = 4; } } if ((checkBox3.Checked && !checkBox2.Checked && checkBox1.Checked) || (checkBox4.Checked && !checkBox3.Checked && (checkBox2.Checked || checkBox1.Checked)) || (checkBox5.Checked && !checkBox4.Checked && (checkBox3.Checked || checkBox2.Checked || checkBox1.Checked))) { listBox1.Items.Add("Mohon centang yang berurut"); } else { kata = "f(x) = "; double[] hasil = new double[n]; double[] yAksen = new double[jlh]; double[] error = new double[jlh]; for (int i = 0; i < n; i++) { if (i == n - 1) { kata += string.Format("L{0}f(x{0})", i); } else { kata += string.Format("L{0}f(x{0}) + ", i); } yAksen[i] = 0; } listBox1.Items.Add(kata); for (int i = 0; i < jlh; i++) { for (int j = m; j < n + m; j++) { /* n=3 * l0 = x-x1/x0-x1 * x-x2/x0-x2 */ hasil[j - m] = 1; for (int k = m; k < n + m; k++) { if (j == k) { continue; } else { hasil[j - m] *= (x[i] - x[k]) / (x[j] - x[k]); } } yAksen[i] += hasil[j - m] * y[j]; } error[i] = yAksen[i] - y[i]; } for (int j = m; j < n + m; j++) { kata = string.Format("L{0} = {1}", j - m, hasil[j - m]); listBox1.Items.Add(kata); } double totError = 0; for (int i = 0; i < jlh; i++) { kata = string.Format("{0,-20:F6} {1,-20:F6} {2,-20:F6} {3,-20:F6} ", x[i], y[i], yAksen[i], error[i]); listBox1.Items.Add(kata); totError += error[i]; yAksen[i] = 0; } kata = string.Format("Total error = {0}", totError); for (int j = m; j < n + m; j++) { /* n=3 * l0 = x-x1/x0-x1 * x-x2/x0-x2 */ hasil[j - m] = 1; for (int k = m; k < n + m; k++) { if (j == k) { continue; } else { hasil[j - m] *= (has - x[k]) / (x[j] - x[k]); } } yAksen[j] += hasil[j - m] * y[j]; } double jum = 0; for (int i = 0; i < jlh; i++) { jum += yAksen[i]; } kata = string.Format("f({0}) = {1}", has, jum); listBox1.Items.Add(kata); } } else { MessageBox.Show("Centang minimal 2"); } } else if (comboBox1.Text == "Langsung") { var cek = this.Controls.OfType <CheckBox>().Count((ck) => ck.Checked) > 1; if (cek) { double[] x = new double[0]; double[] y = new double[0]; int n = 0; //pengecekan fungsi yang mau di ambil if (checkBox1.Checked) { n++; Array.Resize(ref x, x.Length + 1); Array.Resize(ref y, y.Length + 1); x[x.GetUpperBound(0)] = Convert.ToDouble(textBox1.Text); y[y.GetUpperBound(0)] = Convert.ToDouble(textBox6.Text); } if (checkBox2.Checked) { n++; Array.Resize(ref x, x.Length + 1); Array.Resize(ref y, y.Length + 1); x[x.GetUpperBound(0)] = Convert.ToDouble(textBox2.Text); y[y.GetUpperBound(0)] = Convert.ToDouble(textBox7.Text); } if (checkBox3.Checked) { n++; Array.Resize(ref x, x.Length + 1); Array.Resize(ref y, y.Length + 1); x[x.GetUpperBound(0)] = Convert.ToDouble(textBox3.Text); y[y.GetUpperBound(0)] = Convert.ToDouble(textBox8.Text); } if (checkBox4.Checked) { n++; Array.Resize(ref x, x.Length + 1); Array.Resize(ref y, y.Length + 1); x[x.GetUpperBound(0)] = Convert.ToDouble(textBox4.Text); y[y.GetUpperBound(0)] = Convert.ToDouble(textBox9.Text); } if (checkBox5.Checked) { n++; Array.Resize(ref x, x.Length + 1); Array.Resize(ref y, y.Length + 1); x[x.GetUpperBound(0)] = Convert.ToDouble(textBox5.Text); y[y.GetUpperBound(0)] = Convert.ToDouble(textBox10.Text); } //end pengecekan fungsi kata = string.Format("Matriks {0} x {1} :", n, n); listBox1.Items.Add(kata); double[,] xB = new double[n, n]; //pembuatan matriks nxn for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { xB[i, j] = Math.Pow(x[i], j); } } //end pembuatan matriks nxn kata = ""; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { kata += String.Format("{0,-20:F6} ", xB[i, j]); } listBox1.Items.Add(kata); kata = ""; } frmAwal.fungsi func = new fungsi(); xB = func.invers(xB, n); kata = string.Format("Matriks Inverse {0} x {1} :", n, n); listBox1.Items.Add(kata); kata = ""; double[] a = new double[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { kata += String.Format("{0,-20:F6} ", xB[i, j]); } listBox1.Items.Add(kata); kata = ""; a[i] = 0; } listBox1.Items.Add("Nilai variabel a setelah matriks inverse dikali dengan y"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a[i] += xB[i, j] * y[j]; } kata = string.Format("a{0} = {1}", i, a[i]); } double hasil = 0; for (int i = 0; i < n; i++) { hasil += a[i] * Math.Pow(has, i); } kata = string.Format("f({0}) = {1}", has, hasil); listBox1.Items.Add(kata); } else { MessageBox.Show("Centang minimal 2"); } } else if (comboBox1.Text == "Spline") { double[] x = new double[jlh]; double[] y = new double[jlh]; int pangkat = Convert.ToInt16(comboBox3.Text); if (jlh == 5) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); x[4] = Convert.ToDouble(textBox5.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); y[4] = Convert.ToDouble(textBox10.Text); } else if (jlh == 4) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); x[3] = Convert.ToDouble(textBox4.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); y[3] = Convert.ToDouble(textBox9.Text); } else if (jlh == 3) { x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); x[2] = Convert.ToDouble(textBox3.Text); y[0] = Convert.ToDouble(textBox6.Text); y[1] = Convert.ToDouble(textBox7.Text); y[2] = Convert.ToDouble(textBox8.Text); } if (pangkat == 1) { double linSpline = 0; for (int i = 0; i < jlh - 1; i++) { //rumus if (x[i] <= has && x[i + 1] >= has) { kata = string.Format("Nilai {0} berada pada range {1} dan {2}", has, x[i], x[i + 1]); listBox1.Items.Add(kata); linSpline += y[i] + ((y[i + 1] - y[i]) * (has - x[i]) / (x[i + 1] - x[i])); break; } //end rumus linear spline } kata = string.Format("f({0}) = {1}", has, linSpline); listBox1.Items.Add(kata); } else if (pangkat == 2) { double[,] arr = new double[(jlh - 1) * 3, (jlh - 1) * 3]; int i = 0, j = 0, k = 0; //deklarasi arr while (j <= (jlh - 1) * 3 - 3) { arr[i, j] = Math.Pow(x[k], 2); arr[i, j + 1] = x[k]; arr[i, j + 2] = 1; i++; if (i % 2 == 0) { j += 3; } else { k += 1; } } j = 0; k = 1; while (j < (jlh - 1) * 3 - 3) { arr[i, j] = 2 * x[k]; arr[i, j + 1] = 1; arr[i, j + 3] = arr[i, j] * -1; arr[i, j + 4] = -1; i++; j += 3; k += 1; } arr[arr.GetUpperBound(0), 0] = 1; //end deklarasi arr //cetak listBox1.Items.Add("Persamaan yang di dapat : "); for (i = 0; i < (jlh - 1) * 3; i++) { kata = ""; for (j = 0; j < (jlh - 1) * 3; j++) { if (j == ((jlh - 1) * 3) - 1) { kata += string.Format("|{0,-15:F3}", arr[i, j]); } else { if (arr[i, j] > 9) { kata += string.Format("{0,-14:F3}", arr[i, j]); } else { kata += string.Format("{0,-15:F3}", arr[i, j]); } } } listBox1.Items.Add(kata); } //end cetak //rumus penyelesaian double[] tab = new double[(jlh - 1) * 3]; double[] hsl = new double[(jlh - 1) * 3]; k = 0; int trip = (jlh - 1) * 3; int min = jlh - 2; for (i = 0; i < trip - min - 1; i++) { hsl[i] = y[k]; if (i % 2 == 0) { k++; } } tab[0] = 0; tab[1] = (hsl[0] - hsl[1]) / (arr[0, 1] - arr[1, 1]); tab[2] = (hsl[0] - arr[0, 0] * tab[0]); tab[2] += arr[0, 1] * tab[1]; int start = 3; int xi = trip - min - 1; k = 3; for (i = 2; i < trip - min - 3; i += 2) { tab[start] = (hsl[i] - hsl[i + 1]) - ((arr[xi, k] * tab[k - 3] + arr[xi, k + 1] * tab[k - 2]) * (-1 * (arr[i, k + 1] - arr[i + 1, k + 1]))) / (arr[i, k] - arr[i + 1, k]) - (arr[xi, k] * (-1 * (arr[i, k + 1] - arr[i + 1, k + 1]))); tab[start + 1] = ((hsl[i] - hsl[i + 1]) - ((arr[i, k] - arr[i + 1, k]) * tab[start])) / (arr[i, k + 1] - arr[i + 1, k + 1]); tab[start + 2] = hsl[i] - arr[i, k] * tab[start] - arr[i, k + 1] * tab[start + 1]; start += 3; xi += 1; k += 3; } double quadSpline = 0; for (i = 0; i < jlh - 1; i++) { if (x[i] <= has && x[i + 1] >= has) { double a = tab[i * 3]; double b = tab[i * 3 + 1]; double c = tab[i * 3 + 2]; quadSpline = a * has * has + b * has + c; } } listBox1.Items.Add("Tabel Koefisien"); listBox1.Items.Add(" a[i] b[i] c[i] "); listBox1.Items.Add("------------------------------------"); for (i = 0; i < trip - 2; i++) { if (i % 3 == 0) { kata = string.Format("{0,8:f3}{1,9:f3}{2,9:f3}", tab[i], tab[i + 1], tab[i + 2]); listBox1.Items.Add(kata); } } kata = string.Format("F({0}) = {1}", has, quadSpline); listBox1.Items.Add(kata); } } } }