日期:2014-05-18 浏览次数:21242 次
转载请注明出处: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&