矩阵算法入门- 算法解析- 拼吾爱程序人生- {zx1}编程技术的学习网站
摘要

介绍矩阵的编程表示,矩阵的初等变换,化阶梯矩阵及求方阵的行列式。

矩阵介绍


矩阵就是一个M×N平面的表格,用一个两维数组就可以表示,为了输入方便,我们用一个特殊格式的字符串对矩阵进行初始化,用"|"分割每一行,用","分割每一列,并增加一个Show的方法打印出矩阵,为了测试及调试的需要,还重写了ToString()方法。
  1. public class Matrix {
  2.   public int M { get; private set; }
  3.   public int N { get; private set; }
  4.   private readonly double[,] num = null;

  5.   #region 构造函数/Show
  6.   public Matrix(int m, int n, string input) {
  7.       M = m;
  8.       N = n;
  9.       num = new double[m, n];
  10.       if (!string.IsNullOrEmpty(input))
  11.           parseInput(input);
  12.   }

  13.   private void parseInput(string input) {
  14.       string[] rows = input.Split(new[] { '|' });
  15.       if (rows.Length != M)
  16.           throw new ArgumentException("row count err");
  17.       for (int i = 0; i < M; i++) {
  18.           string row = rows;
  19.           string[] cells = row.Split(new[] { ',' });
  20.           if (cells.Length != N)
  21.               throw new ArgumentException(string.Format("cells counte err:{0}", row));
  22.           for (int j = 0; j < N; j++) {
  23.               int cellValue;
  24.               if (!int.TryParse(cells[j], out cellValue))
  25.                   throw new ArgumentException(string.Format("cell error:{0}", cells[j]));
  26.               num[i, j] = cellValue;
  27.           }
  28.       }
  29.   }

  30.   public void Show() {
  31.       for (int i = 0; i < M; i++) {
  32.           for (int j = 0; j < N; j++)
  33.               Console.Write("{0}\t", num[i, j]);
  34.           Console.WriteLine();
  35.       }
  36.   }

  37.   public override string ToString() {
  38.     StringBuilder sb = new StringBuilder();
  39.     for (int i = 0; i < M; i++) {
  40.         for (int j = 0; j < N; j++) {
  41.             sb.Append(num[i, j]);
  42.             if (j != N - 1)
  43.                 sb.Append(',');
  44.         }
  45.         if (i != M - 1)
  46.             sb.Append('|');
  47.     }
  48.     return sb.ToString();
  49.     }
  50. }
复制代码
先对这些代码进行单元测试,为了让代码块覆盖率达到{bfb},对构造函数的测试要故意模拟错误的输入,以便覆盖抛出异常的语句。
  1. [TestMethod()]
  2. public void MatrixConstructorTest() {
  3.     Matrix m;
  4.     try
  5.     {
  6.       m = new Matrix(2,2,"1,2|3,4|5,6");
  7.       Assert.Fail();
  8.     }
  9.     catch{}
  10.     try {
  11.         m = new Matrix(2, 2, "1,2|3,4,5");
  12.         Assert.Fail();
  13.     }
  14.     catch { }
  15.     try {
  16.         m = new Matrix(2, 2, "1,2|3,a");
  17.         Assert.Fail();
  18.     }
  19.     catch { }
  20. }

  21. [TestMethod]
  22. public void toStringTest()
  23. {
  24.     Matrix matrix = new Matrix(3, 3, "1,2,3|4,5,6|7,8,9");
  25.     Assert.IsTrue(matrix.ToString() == "1,2,3|4,5,6|7,8,9");
  26. }

  27. [TestMethod()]
  28. public void ShowTest() {
  29.     Matrix matrix = new Matrix(2, 2, "1,2|3,4");
  30.     matrix.Show();
  31.     //这玩意还真没法儿测,不出错就算成功
  32. }
复制代码

• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
郑重声明:资讯 【矩阵算法入门- 算法解析- 拼吾爱程序人生- {zx1}编程技术的学习网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——