- 浏览: 75518 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
/// 矩阵的乘 public bool MatrixMultiply(double[,] a, double[,] b, ref double[,] c) { if (a.GetLength(1) != b.GetLength(0)) return false; if (a.GetLength(0) != c.GetLength(0) || b.GetLength(1) != c.GetLength(1)) return false; for (int i = 0; i < a.GetLength(0); i++) { for (int j = 0; j < b.GetLength(1); j++) { c[i, j] = 0; for (int k = 0; k < b.GetLength(0); k++) { c[i, j] += a[i, k] * b[k, j]; } } } return true; } /// 矩阵的加 public bool MatrixAdd(double[,] a, double[,] b, ref double[,] c) { if (a.GetLength(0) != b.GetLength(0) || a.GetLength(1) != b.GetLength(1) || a.GetLength(0) != c.GetLength(0) || a.GetLength(1) != c.GetLength(1)) return false; for (int i = 0; i < a.GetLength(0); i++) { for (int j = 0; j < a.GetLength(1); j++) { c[i, j] = a[i, j] + b[i, j]; } } return true; } /// 矩阵的减 public bool MatrixSubtration(double[,] a, double[,] b, ref double[,] c) { if (a.GetLength(0) != b.GetLength(0) || a.GetLength(1) != b.GetLength(1) || a.GetLength(0) != c.GetLength(0) || a.GetLength(1) != c.GetLength(1)) return false; for (int i = 0; i < a.GetLength(0); i++) { for (int j = 0; j < a.GetLength(1); j++) { c[i, j] = a[i, j] - b[i, j]; } } return true; } /// 矩阵的行列式的值 public double MatrixSurplus(double[,] a) { int i, j, k, p, r, m, n; m = a.GetLength(0); n = a.GetLength(1); double X, temp = 1, temp1 = 1, s = 0,s1 = 0; if(n == 2) { for (i = 0; i < m; i++) for (j = 0; j < n; j++) if ((i + j) % 2 > 0) temp1 *= a[i, j]; else temp *= a[i, j]; X=temp-temp1; } else { for (k = 0; k < n; k++) { for (i = 0, j = k; i < m && j < n; i++, j++) temp *= a[i, j]; if (m - i > 0) { for (p = m - i, r = m - 1; p > 0; p--, r--) temp *= a[r, p - 1]; } s += temp; temp = 1; } for (k = n - 1; k >= 0; k--) { for (i = 0, j = k; i < m && j >= 0; i++, j--) temp1 *= a[i, j]; if (m - i > 0) { for (p = m - 1, r = i; r < m; p--, r++) temp1 *= a[r, p]; } s1 += temp1; temp1 = 1; } X = s - s1; } return X; } /// 矩阵的转置 public bool MatrixInver(double[,] a, ref double[,] b) { if (a.GetLength(0) != b.GetLength(1) || a.GetLength(1) != b.GetLength(0)) return false; for (int i = 0; i < a.GetLength(1); i++) for (int j = 0; j < a.GetLength(0); j++) b[i, j] = a[j, i]; return true; } /// 矩阵的逆 public bool MatrixOpp(double[,] a, ref double[,] b) { double X = MatrixSurplus(a); if (X == 0) return false; X = 1 / X; double[,] B = new double[a.GetLength(0), a.GetLength(1)]; double[,] SP = new double[a.GetLength(0), a.GetLength(1)]; double[,] AB = new double[a.GetLength(0), a.GetLength(1)]; for (int i = 0; i < a.GetLength(0); i++) for (int j = 0; j < a.GetLength(1); j++) { for (int m = 0; m < a.GetLength(0); m++) for (int n = 0; n < a.GetLength(1); n++) B[m, n] = a[m, n]; { for (int x = 0; x < a.GetLength(1); x++) B[i, x] = 0; for (int y = 0; y < a.GetLength(0); y++) B[y, j] = 0; B[i, j] = 1; SP[i, j] = MatrixSurplus(B); AB[i, j] = X * SP[i, j]; } } MatrixInver(AB, ref b); return true; }
转自:http://young.xh.blog.163.com/blog/static/956253200761310247675/
该博客值得学习
发表评论
-
C#数组
2010-12-15 14:29 938数组的索引从零开始。 声明数组 int[] table; 注 ... -
关于static
2010-12-14 17:55 783在类的前面加上static可以直接调用类的方法,而不用再实例化 ... -
C#读、写txt文件
2010-12-14 16:50 1571static void Main(string[] arg ... -
索引器
2010-11-25 16:40 798索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类 ... -
字符串截取函数
2010-11-05 21:42 1086一种使用C#语言的split()函数,返回类型是字符串数组,字 ... -
在类中用 Session& 清空session
2010-11-04 10:10 843在类中用 Session public class Me ... -
命名空间
2010-09-08 10:59 1120命名空间: 一种组织类的机制,例如:我们可以把功能相近的类(如 ... -
委托与事件
2010-09-08 10:16 764提到委托就要想到事件。 关于委托 1)委托是一种类型。但是委 ... -
object
2010-09-08 10:04 862所有类的最高的父类:object object也有成成员方法, ... -
参数(ref,out,params)
2010-07-22 16:09 824参数:类的成员方法中的参数。 值参数:不能改变实参。无关键字 ... -
关于泛型类
2010-07-20 17:31 711泛型类:带有参数的类,这里的参数代表类型。 //定义一个泛 ... -
C#中接口与类与抽象类的区别(转)
2010-07-20 17:14 10341、接口类似于类,但接 ... -
C#中List与IList的区别(转)
2010-07-19 16:33 6718List<T>类:表示可通过索引访问的对象的强类型 ... -
C#中as与is的用法(转)
2010-05-19 16:49 1892一、类型转换 1.任何类型都可以转换为其基类类型,用隐式转换 ...
相关推荐
本类库专注于矩阵运算,提供了丰富的功能,如矩阵的创建、加法、减法、乘法、求逆、求行列式、特征值、特征向量等。以下是对这个矩阵运算类库的详细介绍: 1. **矩阵创建**:类库支持动态创建不同大小的矩阵,可以...
在C#编程中,矩阵运算是一种常见的操作,特别是在科学计算、图像处理以及机器学习等领域。本文将深入探讨如何使用一维数组实现一个高效的C#矩阵类,并结合WPF4.0构建测试应用程序。 首先,一维数组是存储矩阵数据的...
1. **矩阵和向量操作**:支持创建、初始化、复制、转置、缩放、加减、乘法、逆、求行列式、特征值和特征向量等基本矩阵和向量运算。 2. **线性代数**:提供了高效率的线性系统求解器,如高斯消元法、LU分解、QR分解...
这包括但不限于矩阵的乘法、加法、减法、求逆、求行列式、特征值、特征向量等。在C#中,这些操作可能通过多线程或者SIMD(单指令多数据)指令集来加速,以提高并行计算性能。例如,库可能利用.NET框架的System....
这些类提供了加法、减法、乘法和转置等基本操作,以及求逆、行列式和特征值等高级计算。 3. **数值解法**: C#中解决非线性方程的数值方法通常包括牛顿法、二分法和迭代法等。例如,`System.Numerics.RootFinding`...