MathNet使用笔记(2019/12/3)

前言

转载至:https://blog.csdn.net/c914620529/article/details/50393223
本人在学习过程中发现,随着MathNet的版本更新,很多代码已经失效了,或者是换了个名字,因此写下笔记供大家分享
注意下面大部分代码已经经过验证,可以运行

可能会更新下去?

一、安装方法

直接输入安装
PS:该安装方法只适用于当前项目,也就是说创建了新的项目,还需再次安装

Install-Package MathNet.Numerics

在这里插入图片描述

二、学习笔记

1.矩阵的定义和初始化

		//3维方阵
		var matrix2 = new DenseMatrix(3);
		//2*3矩阵
		var matrix3 = new DenseMatrix(2, 3);
		//5维单位矩阵
        var matrixI = DenseMatrix.CreateIdentity(5);
        
        richTextBox1.AppendText(matrixI.ToMatrixString());//直接输出矩阵
        richTextBox1.AppendText(matrixI.ToString());//在矩阵输出之前会有一段描述
        
        //可以利用C#中的double[,]创建=====》对应着下图1
        double[,] d_matrix =
        {
            {11,12,13,14,15,16 },
            {21,22,23,24,25,26 },
            {31,32,33,34,35,36 },
            {41,42,43,44,45,46 },
            {51,52,53,54,55,56 },
            {61,62,63,64,65,66 }
        };
        var matrix1 = DenseMatrix.OfArray(d_matrix);
        richTextBox1.AppendText(matrix1.ToString());

图1

2.矩阵操作

        //取第2行开始的2行,第3列开始的3列子矩阵
        var m0 = matrix.SubMatrix(2, 2, 3, 3);

在这里插入图片描述

        //取从第2行第3列开始的3个行元素
        var row = matrix.Row(2, 3, 3);

在这里插入图片描述

        //取从第2列第3行开始的3个列元素
        var col = matrix.Column(2, 3, 3);

在这里插入图片描述

        //取矩阵的对角线元素向量
        var m4 = matrix.Diagonal();

在这里插入图片描述

        double[] d_vector = { 0, 0, 0, 0, 0, 0};
        var vector = new DenseVector(d_vector);

        //将向量vector插入到指定的行 / 列,原有的行列顺延
        var result = matrix.InsertColumn(3, vector);
        var result = matrix.InsertRow(3, vector);

PS:插入的向量长度必须和矩阵的行数或列数一样
在这里插入图片描述

        //用vector替换指定的行 / 列
        matrix.SetColumn(2, (Vector)vector);
        matrix.SetRow(3, (double[])vector);

在这里插入图片描述

        //用矩阵替换指定位置的块矩阵
        matrix.SetSubMatrix(1, 3, 1, 3, DenseMatrix.CreateIdentity(3));

在这里插入图片描述

        //替换矩阵的对角线元素
        matrix.SetDiagonal(new[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 });
        
        //将matrixB扩展到matrix的右方 / 上方,将结果保存在result中
        matrix.Append(matrixB, result);
        matrix.Stack(matrixB, result);

PS:矩阵的大小必须严格设置,matrixB的行数或列数必须和matrix的也一样

        //互换矩阵的3,4行
        var permutations = new MathNet.Numerics.Permutation(new[] { 0, 1, 3, 2, 4,5 });
        matrix.PermuteRows(permutations);

        //互换矩阵的1、2列,3、5列
        var permutations = new MathNet.Numerics.Permutation(new[] { 1, 0, 4, 3, 2, 5 });
        matrix.PermuteColumns(permutations);

3.矩阵的运算

        //点乘
        var result = mA.PointwiseMultiply(mB); 

		//求逆
		var mB = mA.Inverse();

        //求解线性方程组,其中m1对应系数矩阵
        var m = m1.LU().Solve(m2);

		//PS:以下代码只作记录,还未验证!
		//行列式
        var m = m1.Determinant()
		//秩
        var m = m1.Rank();
		//条件数
        var m = m1.ConditionNumber();
		//Trace
        var m = m1.Trace();
		//范数
        var m = m1.L1Norm()/L2Norm()/FrobeniusNorm()/InfinityNorm();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值