日期:2014-05-18 浏览次数:21107 次
转载请注明出处:http://blog.csdn.net/CyberZHG
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace ZMatrix { /// <summary> /// 类名:ZMatrix /// 日期:2012年8月19日 /// 作者:ZHG /// 说明:矩阵类,提供基本运算和统计运算。 /// 已有矩阵操作: /// 矩阵加减、乘系数、矩阵乘法、转置、增广、余子阵 /// 高斯消元、秩、行列式、逆矩阵 /// 已有统计操作: /// 求和、平均值、方差、协方差、相关系数 /// </summary> class ZMatrix { private const double eps = 1e-8; private double[,] m; private int h, w; /// <summary> /// 创建矩阵,默认为1*1的矩阵。 /// </summary> public ZMatrix() { this.setSize(1, 1); } /// <summary> /// 创建一个指定大小的矩阵。 /// </summary> /// <param name="h">矩阵的行数</param> /// <param name="w">矩阵的列数</param> public ZMatrix(int h, int w) { this.setSize(h, w); } /// <summary> /// 从已有矩阵创建矩阵,完全复制矩阵的内容。 /// </summary> /// <param name="mat">被复制的矩阵</param> public ZMatrix(ZMatrix mat) { this.setSize(mat.getHeight(), mat.getWidth()); for (int i = 0; i < this.h; ++i) { for (int j = 0; j < this.w; ++j) { this.m[i, j] = mat.m[i, j]; } } } /// <summary> /// 由数组中的数据创建矩阵 /// </summary> /// <param name="value">要设置的数据</param> public ZMatrix(double[,] value) { this.setValue(value); } /// <summary> /// 设置矩阵大小,将清空原有的数据。 /// </summary> /// <param name="h">矩阵的行数</param> /// <param name="w">矩阵的列数</param> public void setSize(int h, int w) { Trace.Assert(h > 0, "矩阵行数必须为正整数"); Trace.Assert(w > 0, "矩阵列数必须为正整数"); this.h = h; this.w = w; this.m = new double[h, w]; } /// <summary> /// 获取行的数目,和getHeight()等效。 /// </summary> /// <returns&