日期:2014-05-18  浏览次数:21107 次

【基础代码】C# 矩阵类

转载请注明出处: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&