private void button4_Click(object sender, EventArgs e) { double[,] m1 ={{Convert.ToDouble(textBox5.Text),Convert.ToDouble(textBox6.Text),Convert.ToDouble(textBox8.Text),Convert.ToDouble(textBox7.Text),Convert.ToDouble(textBox12.Text),Convert.ToDouble(textBox11.Text),Convert.ToDouble(textBox10.Text),Convert.ToDouble(textBox9.Text)}, {Convert.ToDouble(textBox20.Text),Convert.ToDouble(textBox19.Text),Convert.ToDouble(textBox18.Text),Convert.ToDouble(textBox17.Text),Convert.ToDouble(textBox16.Text),Convert.ToDouble(textBox15.Text),Convert.ToDouble(textBox14.Text),Convert.ToDouble(textBox13.Text)}, {Convert.ToDouble(textBox36.Text),Convert.ToDouble(textBox35.Text),Convert.ToDouble(textBox34.Text),Convert.ToDouble(textBox33.Text),Convert.ToDouble(textBox32.Text),Convert.ToDouble(textBox31.Text),Convert.ToDouble(textBox30.Text),Convert.ToDouble(textBox29.Text)}, {Convert.ToDouble(textBox28.Text),Convert.ToDouble(textBox27.Text),Convert.ToDouble(textBox26.Text),Convert.ToDouble(textBox25.Text),Convert.ToDouble(textBox24.Text),Convert.ToDouble(textBox23.Text),Convert.ToDouble(textBox22.Text),Convert.ToDouble(textBox21.Text)}, {Convert.ToDouble(textBox68.Text),Convert.ToDouble(textBox67.Text),Convert.ToDouble(textBox66.Text),Convert.ToDouble(textBox65.Text),Convert.ToDouble(textBox64.Text),Convert.ToDouble(textBox63.Text),Convert.ToDouble(textBox62.Text),Convert.ToDouble(textBox61.Text)}, {Convert.ToDouble(textBox60.Text),Convert.ToDouble(textBox59.Text),Convert.ToDouble(textBox58.Text),Convert.ToDouble(textBox57.Text),Convert.ToDouble(textBox56.Text),Convert.ToDouble(textBox55.Text),Convert.ToDouble(textBox54.Text),Convert.ToDouble(textBox53.Text)}, {Convert.ToDouble(textBox52.Text),Convert.ToDouble(textBox51.Text),Convert.ToDouble(textBox50.Text),Convert.ToDouble(textBox49.Text),Convert.ToDouble(textBox48.Text),Convert.ToDouble(textBox47.Text),Convert.ToDouble(textBox46.Text),Convert.ToDouble(textBox45.Text)}, {Convert.ToDouble(textBox44.Text),Convert.ToDouble(textBox43.Text),Convert.ToDouble(textBox42.Text),Convert.ToDouble(textBox41.Text),Convert.ToDouble(textBox40.Text),Convert.ToDouble(textBox39.Text),Convert.ToDouble(textBox38.Text),Convert.ToDouble(textBox37.Text)}}; double[,] m2 ={{Convert.ToDouble(textBox132.Text),Convert.ToDouble(textBox131.Text),Convert.ToDouble(textBox130.Text),Convert.ToDouble(textBox129.Text),Convert.ToDouble(textBox128.Text),Convert.ToDouble(textBox127.Text),Convert.ToDouble(textBox126.Text),Convert.ToDouble(textBox125.Text)}, {Convert.ToDouble(textBox124.Text),Convert.ToDouble(textBox123.Text),Convert.ToDouble(textBox122.Text),Convert.ToDouble(textBox121.Text),Convert.ToDouble(textBox120.Text),Convert.ToDouble(textBox119.Text),Convert.ToDouble(textBox118.Text),Convert.ToDouble(textBox117.Text)}, {Convert.ToDouble(textBox116.Text),Convert.ToDouble(textBox115.Text),Convert.ToDouble(textBox114.Text),Convert.ToDouble(textBox113.Text),Convert.ToDouble(textBox112.Text),Convert.ToDouble(textBox111.Text),Convert.ToDouble(textBox110.Text),Convert.ToDouble(textBox109.Text)}, {Convert.ToDouble(textBox108.Text),Convert.ToDouble(textBox107.Text),Convert.ToDouble(textBox106.Text),Convert.ToDouble(textBox105.Text),Convert.ToDouble(textBox104.Text),Convert.ToDouble(textBox103.Text),Convert.ToDouble(textBox102.Text),Convert.ToDouble(textBox101.Text)}, {Convert.ToDouble(textBox100.Text),Convert.ToDouble(textBox99.Text),Convert.ToDouble(textBox98.Text),Convert.ToDouble(textBox97.Text),Convert.ToDouble(textBox96.Text),Convert.ToDouble(textBox95.Text),Convert.ToDouble(textBox94.Text),Convert.ToDouble(textBox93.Text)}, {Convert.ToDouble(textBox92.Text),Convert.ToDouble(textBox91.Text),Convert.ToDouble(textBox90.Text),Convert.ToDouble(textBox89.Text),Convert.ToDouble(textBox88.Text),Convert.ToDouble(textBox87.Text),Convert.ToDouble(textBox86.Text),Convert.ToDouble(textBox85.Text)}, {Convert.ToDouble(textBox84.Text),Convert.ToDouble(textBox83.Text),Convert.ToDouble(textBox82.Text),Convert.ToDouble(textBox81.Text),Convert.ToDouble(textBox80.Text),Convert.ToDouble(textBox79.Text),Convert.ToDouble(textBox78.Text),Convert.ToDouble(textBox77.Text)}, {Convert.ToDouble(textBox76.Text),Convert.ToDouble(textBox75.Text),Convert.ToDouble(textBox74.Text),Convert.ToDouble(textBox73.Text),Convert.ToDouble(textBox72.Text),Convert.ToDouble(textBox71.Text),Convert.ToDouble(textBox70.Text),Convert.ToDouble(textBox69.Text)}}; matp M1 = new matp(m1); matp M2 = new matp(m2); mul.Clear(); mulStrass.Clear(); mul.AppendText(opr.mul(M1, M2).ToString()); mulStrass.AppendText(P3.mulStrass(M1, M2, 4).ToString()); }
private void button4_Click(object sender, EventArgs e) { double[,] m1 = { { Convert.ToDouble(textBox5.Text), Convert.ToDouble(textBox6.Text), Convert.ToDouble(textBox8.Text), Convert.ToDouble(textBox7.Text), Convert.ToDouble(textBox12.Text), Convert.ToDouble(textBox11.Text), Convert.ToDouble(textBox10.Text), Convert.ToDouble(textBox9.Text) }, { Convert.ToDouble(textBox20.Text), Convert.ToDouble(textBox19.Text), Convert.ToDouble(textBox18.Text), Convert.ToDouble(textBox17.Text), Convert.ToDouble(textBox16.Text), Convert.ToDouble(textBox15.Text), Convert.ToDouble(textBox14.Text), Convert.ToDouble(textBox13.Text) }, { Convert.ToDouble(textBox36.Text), Convert.ToDouble(textBox35.Text), Convert.ToDouble(textBox34.Text), Convert.ToDouble(textBox33.Text), Convert.ToDouble(textBox32.Text), Convert.ToDouble(textBox31.Text), Convert.ToDouble(textBox30.Text), Convert.ToDouble(textBox29.Text) }, { Convert.ToDouble(textBox28.Text), Convert.ToDouble(textBox27.Text), Convert.ToDouble(textBox26.Text), Convert.ToDouble(textBox25.Text), Convert.ToDouble(textBox24.Text), Convert.ToDouble(textBox23.Text), Convert.ToDouble(textBox22.Text), Convert.ToDouble(textBox21.Text) }, { Convert.ToDouble(textBox68.Text), Convert.ToDouble(textBox67.Text), Convert.ToDouble(textBox66.Text), Convert.ToDouble(textBox65.Text), Convert.ToDouble(textBox64.Text), Convert.ToDouble(textBox63.Text), Convert.ToDouble(textBox62.Text), Convert.ToDouble(textBox61.Text) }, { Convert.ToDouble(textBox60.Text), Convert.ToDouble(textBox59.Text), Convert.ToDouble(textBox58.Text), Convert.ToDouble(textBox57.Text), Convert.ToDouble(textBox56.Text), Convert.ToDouble(textBox55.Text), Convert.ToDouble(textBox54.Text), Convert.ToDouble(textBox53.Text) }, { Convert.ToDouble(textBox52.Text), Convert.ToDouble(textBox51.Text), Convert.ToDouble(textBox50.Text), Convert.ToDouble(textBox49.Text), Convert.ToDouble(textBox48.Text), Convert.ToDouble(textBox47.Text), Convert.ToDouble(textBox46.Text), Convert.ToDouble(textBox45.Text) }, { Convert.ToDouble(textBox44.Text), Convert.ToDouble(textBox43.Text), Convert.ToDouble(textBox42.Text), Convert.ToDouble(textBox41.Text), Convert.ToDouble(textBox40.Text), Convert.ToDouble(textBox39.Text), Convert.ToDouble(textBox38.Text), Convert.ToDouble(textBox37.Text) } }; double[,] m2 = { { Convert.ToDouble(textBox132.Text), Convert.ToDouble(textBox131.Text), Convert.ToDouble(textBox130.Text), Convert.ToDouble(textBox129.Text), Convert.ToDouble(textBox128.Text), Convert.ToDouble(textBox127.Text), Convert.ToDouble(textBox126.Text), Convert.ToDouble(textBox125.Text) }, { Convert.ToDouble(textBox124.Text), Convert.ToDouble(textBox123.Text), Convert.ToDouble(textBox122.Text), Convert.ToDouble(textBox121.Text), Convert.ToDouble(textBox120.Text), Convert.ToDouble(textBox119.Text), Convert.ToDouble(textBox118.Text), Convert.ToDouble(textBox117.Text) }, { Convert.ToDouble(textBox116.Text), Convert.ToDouble(textBox115.Text), Convert.ToDouble(textBox114.Text), Convert.ToDouble(textBox113.Text), Convert.ToDouble(textBox112.Text), Convert.ToDouble(textBox111.Text), Convert.ToDouble(textBox110.Text), Convert.ToDouble(textBox109.Text) }, { Convert.ToDouble(textBox108.Text), Convert.ToDouble(textBox107.Text), Convert.ToDouble(textBox106.Text), Convert.ToDouble(textBox105.Text), Convert.ToDouble(textBox104.Text), Convert.ToDouble(textBox103.Text), Convert.ToDouble(textBox102.Text), Convert.ToDouble(textBox101.Text) }, { Convert.ToDouble(textBox100.Text), Convert.ToDouble(textBox99.Text), Convert.ToDouble(textBox98.Text), Convert.ToDouble(textBox97.Text), Convert.ToDouble(textBox96.Text), Convert.ToDouble(textBox95.Text), Convert.ToDouble(textBox94.Text), Convert.ToDouble(textBox93.Text) }, { Convert.ToDouble(textBox92.Text), Convert.ToDouble(textBox91.Text), Convert.ToDouble(textBox90.Text), Convert.ToDouble(textBox89.Text), Convert.ToDouble(textBox88.Text), Convert.ToDouble(textBox87.Text), Convert.ToDouble(textBox86.Text), Convert.ToDouble(textBox85.Text) }, { Convert.ToDouble(textBox84.Text), Convert.ToDouble(textBox83.Text), Convert.ToDouble(textBox82.Text), Convert.ToDouble(textBox81.Text), Convert.ToDouble(textBox80.Text), Convert.ToDouble(textBox79.Text), Convert.ToDouble(textBox78.Text), Convert.ToDouble(textBox77.Text) }, { Convert.ToDouble(textBox76.Text), Convert.ToDouble(textBox75.Text), Convert.ToDouble(textBox74.Text), Convert.ToDouble(textBox73.Text), Convert.ToDouble(textBox72.Text), Convert.ToDouble(textBox71.Text), Convert.ToDouble(textBox70.Text), Convert.ToDouble(textBox69.Text) } }; matp M1 = new matp(m1); matp M2 = new matp(m2); mul.Clear(); mulStrass.Clear(); mul.AppendText(opr.mul(M1, M2).ToString()); mulStrass.AppendText(P3.mulStrass(M1, M2, 4).ToString()); }
static public matp[] genC(matp[] P) { matp[] C = new matp[4]; C[0] = opr.add(opr.sub(opr.add(P[0], P[3]), P[4]), P[6]); C[1] = opr.add(P[2], P[4]); C[2] = opr.add(P[1], P[3]); C[3] = opr.add(opr.sub(opr.add(P[0], P[2]), P[1]), P[5]); return(C); }
static public matp[] genC(matp[] P) { matp[] C = new matp[4]; C[0] = opr.add(opr.sub(opr.add(P[0], P[3]), P[4]), P[6]); C[1] = opr.add(P[2], P[4]); C[2] = opr.add(P[1], P[3]); C[3] = opr.add(opr.sub(opr.add(P[0], P[2]), P[1]), P[5]); return C; }
static public matp mulStrass(matp m1, matp m2,int n_min) { if (n_min > m1.n || n_min < 1) { Console.WriteLine("Wrong n-min !"); return new matp(1); } if (m1.n <= n_min) return opr.mul(m1, m2); matp[] P = genP(m1, m2, n_min); matp[] C = genC(P); matp rez = opr.remake(C); return rez; }
static public matp mul(matp m1, matp m2) { if (m1.n != m2.n) { Console.WriteLine("Wrong mul!"); return new matp(1); } int n = m1.n; matp rez = new matp(n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) rez.m[i, j] += (m1.m[i, k] * m2.m[k, j]); return rez; }
public matp[] section() { matp[] blocs = new matp[4]; for (int i = 0; i < 4; i++) blocs[i] = new matp(this.n / 2); for (int i = 0; i < n / 2; i++) for (int j = 0; j < n / 2; j++) { blocs[0].m[i, j] = this.m[i, j]; blocs[1].m[i, j] = this.m[i, j + n / 2]; blocs[2].m[i, j] = this.m[i + n / 2, j]; blocs[3].m[i, j] = this.m[i + n / 2, j + n / 2]; } return blocs; }
static public matp[] genP(matp m1, matp m2, int n_min) { matp[] m1bl = m1.section(); matp[] m2bl = m2.section(); matp[] P = new matp[7]; P[0] = mulStrass(opr.add(m1bl[0], m1bl[3]), opr.add(m2bl[0], m2bl[3]), n_min); P[1] = mulStrass(opr.add(m1bl[2], m1bl[3]), m2bl[0], n_min); P[2] = mulStrass(m1bl[0], opr.sub(m2bl[1], m2bl[3]), n_min); P[3] = mulStrass(m1bl[3], opr.sub(m2bl[2], m2bl[0]), n_min); P[4] = mulStrass(opr.add(m1bl[0], m1bl[1]), m2bl[3], n_min); P[5] = mulStrass(opr.sub(m1bl[2], m1bl[0]), opr.add(m2bl[0], m2bl[1]), n_min); P[6] = mulStrass(opr.sub(m1bl[1], m1bl[3]), opr.add(m2bl[2], m2bl[3]), n_min); return(P); }
static public matp remake(matp[] ms) { int n = ms[0].n * 2; matp mr = new matp(n); for (int i = 0; i < n / 2; i++) { for (int j = 0; j < n / 2; j++) { mr.m[i, j] = ms[0].m[i, j]; mr.m[i, j + n / 2] = ms[1].m[i, j]; mr.m[i + n / 2, j] = ms[2].m[i, j]; mr.m[i + n / 2, j + n / 2] = ms[3].m[i, j]; } } return(mr); }
static public matp[] genP(matp m1, matp m2,int n_min) { matp[] m1bl = m1.section(); matp[] m2bl = m2.section(); matp[] P = new matp[7]; P[0] = mulStrass(opr.add(m1bl[0], m1bl[3]), opr.add(m2bl[0], m2bl[3]),n_min); P[1] = mulStrass(opr.add(m1bl[2], m1bl[3]), m2bl[0], n_min); P[2] = mulStrass(m1bl[0], opr.sub(m2bl[1], m2bl[3]), n_min); P[3] = mulStrass(m1bl[3], opr.sub(m2bl[2], m2bl[0]), n_min); P[4] = mulStrass(opr.add(m1bl[0], m1bl[1]), m2bl[3], n_min); P[5] = mulStrass(opr.sub(m1bl[2], m1bl[0]), opr.add(m2bl[0], m2bl[1]), n_min); P[6] = mulStrass(opr.sub(m1bl[1], m1bl[3]), opr.add(m2bl[2], m2bl[3]), n_min); return P; }
static public matp mulStrass(matp m1, matp m2, int n_min) { if (n_min > m1.n || n_min < 1) { Console.WriteLine("Wrong n-min !"); return(new matp(1)); } if (m1.n <= n_min) { return(opr.mul(m1, m2)); } matp[] P = genP(m1, m2, n_min); matp[] C = genC(P); matp rez = opr.remake(C); return(rez); }
static public matp sub(matp m1, matp m2) { if (m1.n != m2.n) { Console.WriteLine("Wrong sub!"); return(new matp(1)); } int n = m1.n; matp rez = new matp(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { rez.m[i, j] = m1.m[i, j] - m2.m[i, j]; } } return(rez); }
public matp[] section() { matp[] blocs = new matp[4]; for (int i = 0; i < 4; i++) { blocs[i] = new matp(this.n / 2); } for (int i = 0; i < n / 2; i++) { for (int j = 0; j < n / 2; j++) { blocs[0].m[i, j] = this.m[i, j]; blocs[1].m[i, j] = this.m[i, j + n / 2]; blocs[2].m[i, j] = this.m[i + n / 2, j]; blocs[3].m[i, j] = this.m[i + n / 2, j + n / 2]; } } return(blocs); }
static public matp mul(matp m1, matp m2) { if (m1.n != m2.n) { Console.WriteLine("Wrong mul!"); return(new matp(1)); } int n = m1.n; matp rez = new matp(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { rez.m[i, j] += (m1.m[i, k] * m2.m[k, j]); } } } return(rez); }
static public matp add(matp m1, matp m2) { if (m1.n != m2.n) { Console.WriteLine("Wrong add!"); return new matp(1); } int n = m1.n; matp rez = new matp(n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) rez.m[i, j] = m1.m[i, j] + m2.m[i, j]; return rez; }
static public matp remake(matp[] ms) { int n = ms[0].n * 2; matp mr = new matp(n); for (int i = 0; i < n / 2; i++) for (int j = 0; j < n / 2; j++) { mr.m[i, j] = ms[0].m[i, j]; mr.m[i, j + n / 2] = ms[1].m[i, j]; mr.m[i + n / 2, j] = ms[2].m[i, j]; mr.m[i + n / 2, j + n / 2] = ms[3].m[i, j]; } return mr; }