// An example main, showcasing some of the features
 static void Main(string[] args)
 {
     Matrix A = new Matrix(new double[,] { { 77, 2, 3 }, { 5, -6, 7 }, { 9, 10, 15 } });
     Matrix B = new Matrix(new double[,] { { -1, 2, 0 }, { 1, -2, -1 }, { 1, 0, 3 } });
     Console.WriteLine("A:\n" + A);
     Console.WriteLine("A Trasposed:\n" + ~A);
     Console.WriteLine("A Minor(1,1):\n" + A.Minor(1, 1));
     Console.WriteLine("B:\n" + B);
     Console.WriteLine("B Determinant: " + B.Determinant() + "\n");
     Console.WriteLine("B Inverse: \n" + !B);
     Console.WriteLine("A+B:\n" + (A + B));
     Console.WriteLine("B*A:\n" + B * A);
     Vector V1 = new Vector(new double[] { 1, 2, 3 });
     Vector V2 = new Vector(new double[] { 4, -2, -1 });
     Console.WriteLine("V1: " + V1);
     Console.WriteLine("V2: " + V2 + "\n");
     Console.WriteLine("V1 + V2: " + (V1 + V2) + "\n");
     Console.WriteLine("V1xV2: " + (V1 ^ V2) + "\n");
 }
 public static Vector operator /(Vector A, double b)
 {
     Vector V = new Vector(A);
     for (int i = 0; i < V.DimensionCount; i++)
     {
         V[i] /= b;
     }
     return V;
 }
 public Vector(Vector V)
 {
     if (V == null) throw new ArgumentNullException("Can't use null for copy constructor");
     DimensionCount = V.DimensionCount;
     Coordinates = V.Coordinates;
 }
 public static Vector operator -(Vector A, Vector B)
 {
     Vector V = new Vector(Math.Max(A.DimensionCount, B.DimensionCount));
     for (int i = 0; i < A.DimensionCount; i++)
     {
         V[i] += A[i];
     }
     for (int i = 0; i < B.DimensionCount; i++)
     {
         V[i] -= B[i];
     }
     return V;
 }