//方程组求解
 public static CzMatrix Solve(LinearEquations equation)
 {
     if ((CzSquareMatrix.Determinant(equation.m)) == 0)
     {
         throw new ArithmeticException("系数矩阵不可逆");
     }
     else
     {
         return (CzSquareMatrix.Inverse(equation.m) * equation.c);
     }
 }
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("欢迎使用MiniMatLab,Ver1.0.0\n" + "===========================================================\n" + "Copyright (c) 2014\n" + "2014 CarRicky Software Foundation.  All rights reserved.\n" + "Arthor:\nCarRicky www.renren.com/siyuangao\n===========================================================\n");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("该程序可以实现基本的矩阵运算以及有唯一解的线性方程组的求解\n");
            Console.ForegroundColor = ConsoleColor.Gray;
            while (true)
            {
                Console.WriteLine("请问您想进行的操作是?");
                Console.WriteLine("1.矩阵运算      2.方程组求解      3.退出        4.清屏\n" + "===========================================================\n");
                string a = Console.ReadLine();
                if (a == "1")
                {
                    Console.WriteLine("请问您想进行哪种矩阵运算?");
                    Console.WriteLine("1.矩阵加法\n2.矩阵减法\n3.矩阵乘法\n4.矩阵求逆\n5.矩阵转置\n6.矩阵行列式求值(行列变换求解)\n7.矩阵行列式求值(拉普拉斯变换求值)\n8.计算矩阵元素代数余子式\n9.幂法求矩阵绝对值最大的特征值\n10.返回\n" + "===========================================================\n");
                    string b = Console.ReadLine();
                    switch (b)
                    {
                        case "1":
                            {
                                CzMatrix m1, m2;
                                Console.WriteLine("请按照要求输入相应信息:(保证两矩阵维数相同)");
                                Console.WriteLine("请输入矩阵1的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m1))
                                Console.WriteLine("输入错误,请重新输入!");
                                Console.WriteLine("请输入矩阵2的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m2))
                                    Console.WriteLine("输入错误,请重新输入!");

                                    Console.WriteLine("两矩阵和为\n" + "===========================================================\n" + (m1 + m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "2":
                            {
                                CzMatrix m1, m2;
                                Console.WriteLine("请按照要求输入相应信息:(保证两矩阵维数相同)");
                                Console.WriteLine("请输入矩阵1的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                Console.WriteLine("请输入矩阵2的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m2))
                                    Console.WriteLine("输入错误,请重新输入!");

                                    Console.WriteLine("两矩阵差为\n" + "===========================================================\n" + (m1 - m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "3":
                            {
                                CzMatrix m1, m2;
                                Console.WriteLine("请按照要求输入相应信息:(保证第一个矩阵列数与第二个矩阵行数对应)");
                                Console.WriteLine("请输入矩阵1的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                Console.WriteLine("请输入矩阵2的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                while (!CzMatrix.TryParse(Console.ReadLine(), out m2))
                                    Console.WriteLine("输入错误,请重新输入!");
                                    Console.WriteLine("两矩阵积为\n" + "===========================================================\n" + (m1 * m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "4":
                            {
                                CzSquareMatrix m2;
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息:(保证矩阵是方阵且可逆)");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                     m2 = new CzSquareMatrix(m1.row);
                                    Console.WriteLine("逆矩阵为\n" + "===========================================================\n" + CzSquareMatrix.Inverse(m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "5":
                            {
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息:(保证矩阵是方阵且可逆)");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");

                                    Console.WriteLine("逆矩阵为\n" + "===========================================================\n" + CzMatrix.transposition(m1));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "6":
                            {
                                CzSquareMatrix m2;
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息:(保证矩阵是方阵)");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                    m2 = new CzSquareMatrix(m1.row);
                                    Console.WriteLine("逆矩阵为\n" + "===========================================================\n" + CzSquareMatrix.Determinant(m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "7":
                            {
                                CzSquareMatrix m2;
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息:(保证矩阵是方阵)");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                    m2 = new CzSquareMatrix(m1.row);
                                    Console.WriteLine("逆矩阵为\n" + "===========================================================\n" + CzSquareMatrix.Det(m2));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "8":
                            {
                                int i, j;
                                CzSquareMatrix m2;
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                    Console.WriteLine("输入错误,请重新输入!");
                                while (true)
                                {
                                    Console.WriteLine("请输入待求代数余子式元素的位置坐标,实例:0,2,表示第0行第2列元素,上例中的'3'\n" + "===========================================================\n");
                                    string s = Console.ReadLine();
                                    string[] ss = s.Split(',');
                                    if (ss.Length == 2)
                                        if (!int.TryParse(ss[0], out i) || !int.TryParse(ss[1], out j))
                                            Console.WriteLine("输入错误!");
                                        else
                                            break;
                                    else
                                        Console.WriteLine("输入错误!");
                                }

                                    m2 = new CzSquareMatrix(m1.row);
                                    Console.WriteLine("代数余子式为\n" + "===========================================================\n" + CzSquareMatrix.CoDet(m2, i, j));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }
                            }
                            break;
                        case "9":
                            {
                                double eps=0;
                                int N=0;
                                CzSquareMatrix m2;
                                CzMatrix m1;
                                Console.WriteLine("请按照要求输入相应信息");
                                Console.WriteLine("请输入矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                                try
                                {
                                    while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                        Console.WriteLine("输入错误,请重新输入!");
                                    while(true)
                                    {
                                    Console.WriteLine("请输入允许误差和最大迭代步数,以逗号分隔,输入完成后按回车\n" + "===========================================================\n");
                                    string s = Console.ReadLine();
                                    string[] ss = s.Split(',');
                                    if (ss.Length == 2)
                                        if (!double.TryParse(ss[0], out eps) || !int.TryParse(ss[1], out N))
                                            Console.WriteLine("输入错误!");
                                        else
                                            break;
                                    else
                                        Console.WriteLine("输入错误!");
                                    }
                                    m2 = new CzSquareMatrix(m1.row);
                                    Console.WriteLine("矩阵绝对值最大的特征值为\n" + CzSquareMatrix.Characteristic(m2, eps, N));
                                }
                                catch (Exception exp)
                                {
                                    Console.WriteLine("运算过程中出错 " + exp.Message);
                                }

                                break;
                            }
                        case "10":
                            break;
                        default:
                            {
                                Console.WriteLine("指令错误!");
                                break;
                            }
                    }
                }
                else
                    if (a == "2")
                    {
                        CzSquareMatrix m2;
                        CzMatrix m1;
                        CzVector m3;
                        Console.WriteLine("请按照要求输入相应信息:(保证系数矩阵是方阵,非齐次项为列向量)");
                        Console.WriteLine("请输入系数矩阵的元素,实例:1 2 3;1 2 3;1 2 3这是一个行元素全为1 2 3的3*3矩阵\n" + "===========================================================\n");
                        try
                        {
                            while (!CzSquareMatrix.TryParse(Console.ReadLine(), out m1))
                                Console.WriteLine("输入错误,请重新输入!");
                            m2 = new CzSquareMatrix(m1.row);
                            Console.WriteLine("请按照要求输入相应信息:(保证系数矩阵是方阵,非齐次项为列向量)");
                            Console.WriteLine("请输入非齐次项列向量的元素,实例:1 2 3这是一个元素为1 2 3的列向量\n" + "===========================================================\n");
                            while (!CzVector.TryParse(Console.ReadLine(), out m3))
                                Console.WriteLine("输入错误,请重新输入!");
                            LinearEquations  l1 = new LinearEquations(m2, m3);
                            Console.WriteLine("该方程解为\n" + "===========================================================\n" + LinearEquations.Solve(l1));
                        }
                        catch (Exception exp)
                        {
                            Console.WriteLine("求解过程中出错 " + exp.Message);
                        }
                    }
                    else
                        if (a == "3")
                            break;
                        else
                            if (a == "4")
                                Console.Clear();
                            else
                            Console.WriteLine("请输入正确指令!");
            }
        }