MyMathLib系列(向量及矩阵--准备工作)
来源:互联网 发布:大数据 政府治理 编辑:程序博客网 时间:2024/05/16 21:22
因为向量和矩阵的计算工作量比较大,为了更好的书写代码,这里增加了几个定义类,这些定义或者扩展方法将在以后的代码中应用到:
1、公共枚举类型
/* 文件:PublicEnums.cs * 目的:定义公共枚举类型. */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMathLib{ /// <summary> /// 初等变换类型(课本上是加,这里是减,仅仅是个系数符号的区别. /// </summary> public enum BasicTransMethod { /// <summary> /// 交换i< == >j /// </summary> Swap, /// <summary> /// 乘以非零数:i=i*M /// </summary> Multipler, /// <summary> /// 第i行减去第j行乘以一个系数:i=i-j*M /// </summary> CoPlus1, /// <summary> /// 第i行乘以系数减去第j行乘以一个系数:i=i*M1 - j*M2 /// </summary> CoPlus2 } /// <summary> /// 行变换还是列变换. /// </summary> public enum TransRowOrCol { /// <summary> /// 行 /// </summary> Row, /// <summary> /// 列 /// </summary> Col } public static class ConstDef { public const int Decimals = 15; } public enum SolutionType { /// <summary> /// 无解 /// </summary> None, /// <summary> /// 只有零解 /// </summary> OnlyZero, //仅有一个非零解 OnlyOne, /// <summary> /// 有很多解. /// </summary> Many }}
2、方程求解结果
/* * SolutionOfEquation.cs * Added by Hawksoft. */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMathLib{ /// <summary> /// 方程解结果,用于方程组求解后的结果存放. /// </summary> public class SolutionOfEquation { /// <summary> /// 解类型 /// </summary> public SolutionType SolutionType{ get; set; } /// <summary> /// 解向量 /// </summary> public List<double[]> SolutionVectors { get; set; } /// <summary> /// 基本未知量 /// </summary> public List<int> PrimaryUnknownVariations { get; set; } /// <summary> /// 自由未知量. /// </summary> public List<int> FreeUnknownVariations { get; set; } public SolutionOfEquation() { SolutionVectors = new List<double[]>(); PrimaryUnknownVariations = new List<int>(); FreeUnknownVariations = new List<int>(); } }}
3、初等变换记录项
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMathLib{ /// <summary> /// 初等变换记录项,用于矩阵初等变换的过程演示和矩阵求逆. /// </summary> public class TransformItem { public BasicTransMethod TransMethod { get; set; } public int i { get; set; } public int j { get; set; } public double M1 { get; set; } public double M2 { get; set; } public TransRowOrCol RowOrCol { get; set; } public static TransformItem CreateEleTransRow1(int i, int j) { return new TransformItem() { i = i, j = j, M1 = 1, TransMethod = BasicTransMethod.Swap, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransRow2(int i,double Multipler) { return new TransformItem() { i = i, j = i, M1 = Multipler, M2 = Multipler, TransMethod = BasicTransMethod.Multipler, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransRow3(int i, int j,double Multipler) { return new TransformItem() { i = i, j = j, M1 = Multipler, M2 = Multipler, TransMethod = BasicTransMethod.CoPlus1, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransRow4(int i, int j, double M1,double M2) { return new TransformItem() { i = i, j = j, M1 = M1, M2 = M2, TransMethod = BasicTransMethod.CoPlus2, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransCol1(int i, int j) { return new TransformItem() { i = i, j = j, M1 = 1, M2 = 1, TransMethod = BasicTransMethod.Swap, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransCol2(int i, double Multipler) { return new TransformItem() { i = i, j = i, M1 = Multipler, M2 = Multipler, TransMethod = BasicTransMethod.Multipler, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransCol3(int i, int j, double Multipler) { return new TransformItem() { i = i, j = j, M1 = 1, M2 = Multipler, TransMethod = BasicTransMethod.CoPlus1, RowOrCol = TransRowOrCol.Row }; } public static TransformItem CreateEleTransCol4(int i, int j, double M1,double M2) { return new TransformItem() { i = i, j = j, M1 = M1, M2 = M2, TransMethod = BasicTransMethod.CoPlus2, RowOrCol = TransRowOrCol.Row }; } }
另外说明一下:原来一直用decimal来计算,但在矩阵计算测试中发现,decimal很容易爆仓,所以改用double类型,其实decimal的位数比double多很多,但由于其特殊性,其表达的范围要比double小,所以后面改成了double.
0 0
- MyMathLib系列(向量及矩阵--准备工作)
- MyMathLib系列(向量运算--1)
- MyMathLib系列(矩阵算法--2)
- MyMathLib系列(行列式计算4--向量部分)
- MyMathLib系列(行列式计算)
- MyMathLib系列(线性空间)
- MyMathLib系列(行列式计算2)
- MyMathLib系列(行列式计算3)
- MyMathLib系列(订正两个函数)
- MyMathLib系列(一元多项式-准备)
- matlab特殊矩阵及向量创建
- 向量的表示及协方差矩阵
- 向量的表示及协方差矩阵
- 024 正交向量 正交矩阵及性质
- 旋转矩阵及旋转向量相互转化 Rodrigues矩阵
- MyMathLib系列(一元多项式运算求初等因子等)
- 3D向量及矩阵变换简单剖析(1)
- 向量的表示及协方差矩阵 (PCA的理论基础)
- 黑马程序员-多线程学习总结
- JAVA多线程
- CocoaPods安装和使用教程
- linux启动脚本和service、chkconfig
- python数据持久存储:pickle模块的基本使用
- MyMathLib系列(向量及矩阵--准备工作)
- mac使用
- ORA-01950: 对表空间 'USERS' 无权限
- Hello world
- 编译时:virtual memory exhausted: Cannot allocate memory
- qemu-kvm配置文件
- Linux学习笔记(3)-Linux引导流程
- VMWare虚拟机提供的桥接、nat和主机模式的区别
- screen和tmux管理shell会话