C#使用MathNet生成矩陣并打印矩陣元素
安裝
MathNet.Numerics中提供了線性代數(shù)、微積分、特殊函數(shù)、概率論、隨機(jī)函數(shù)、插值、最優(yōu)化等一系列功能,是.net技術(shù)中首選的數(shù)值計(jì)算包。
其中,線性代數(shù)包LinearAlgebra包提供了向量、矩陣等數(shù)據(jù)結(jié)構(gòu),這些是數(shù)值計(jì)算的前提,故而相比于其他包更加基礎(chǔ)。
下面用VS新建一個(gè)控制臺(tái)項(xiàng)目,并啟用頂級(jí)語(yǔ)句。點(diǎn)擊工具->NuGet包管理器->管理解決方案的NuGet程序包,進(jìn)入瀏覽選項(xiàng)卡,搜索MathNet.Numerics,選中安裝。
創(chuàng)建和顯示矩陣
在使用命名空間之后,可通過(guò)Matrix.Build來(lái)創(chuàng)建矩陣,矩陣中重寫了ToString方法,所以可直接使用$字符串,示例如下
using MathNet.Numerics.LinearAlgebra; Matrix<double> m = Matrix<double>.Build.Random(3,4); Console.WriteLine($"{m}"); /* 輸出結(jié)果如下 DenseMatrix 3x4-Double -1.34532 0.209099 1.64422 0.13664 1.15024 -0.751815 0.242772 -1.90048 0.0985362 -1.02023 0.727527 0.137225 */
即創(chuàng)建的矩陣為
Matrix.Build是MatrixBuilder對(duì)象,后文簡(jiǎn)稱MB,用于生成矩陣,如果需要頻繁創(chuàng)建矩陣,則可創(chuàng)建一個(gè)矩陣生成器,示例如下
var MB = Matrix<double>.Build; m = MB.Random(3, 4); MB.Dense(3, 4); //3x4的全0矩陣 MB.Dense(3, 4, 1.0); //3x4的全1.0矩陣 MB.Dense(3, 4, (i, j) => 100 * i + j); //通過(guò)表達(dá)式生成元素 MB.DenseDiagonal(3, 4, 2.0); //3x4對(duì)角為2.0 MB.DenseIdentity(3); // 3x3的單位陣
矩陣類型
MB支持超多種矩陣的生成方式,其中Dense又是最常用的一種,從上面的示例可知,MB提供了多種Dense重載,但前兩個(gè)輸入?yún)?shù)一般為行數(shù)和列數(shù),第三個(gè)參數(shù)則可以是
- 缺省,則所有元素為0
- 數(shù)值,則所有元素都是這個(gè)數(shù)
- 函數(shù),諸如(i, j) => f(i,j),表示( i , j ) (i,j)(i,j)處的元素,其值為f ( i , j ) f(i,j)f(i,j)
- 數(shù)組,將使用數(shù)組中的值進(jìn)行填充
DenseDiagonal用于生成對(duì)角矩陣,包括三種重載,
- 階數(shù),對(duì)角數(shù)值
- 行數(shù),列數(shù),對(duì)角數(shù)值
- 行數(shù),列數(shù),對(duì)角的生成函數(shù)
這兩種生成方法,囊括了矩陣生成的一些基本邏輯,從矩陣的形狀來(lái)說(shuō),主要有兩種形式,即指定行列數(shù)或者指定階數(shù);而就矩陣的內(nèi)容而言,則有三種方法,一是用某個(gè)值來(lái)填充,二是用某個(gè)數(shù)組中的值來(lái)填充,三則是通過(guò)函數(shù)來(lái)生成。
在建立起這種邏輯之后,對(duì)于其他矩陣生成方法,也可以逐步嘗試
方法 | 說(shuō)明 |
---|---|
DenseIdentity | 單位陣 |
Diagonal | 對(duì)角方陣 |
DiagonalIdentity | 對(duì)角單位陣 |
Random | 隨機(jī)矩陣 |
RandomPositiveDefinite | 每個(gè)元素是兩個(gè)隨機(jī)數(shù)的積 |
其中,隨機(jī)矩陣Random可以指定隨機(jī)數(shù)種子或者具體的分布,如果未指定分布,則默認(rèn)是標(biāo)準(zhǔn)正態(tài)分布。
到此這篇關(guān)于C#使用MathNet生成矩陣并打印矩陣元素的文章就介紹到這了,更多相關(guān)C# MathNet生成并打印矩陣內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)Word轉(zhuǎn)換RTF的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)Word轉(zhuǎn)換RTF,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼
最近在做一個(gè)WEB程序的安裝包;對(duì)一些操作IIS進(jìn)行一個(gè)簡(jiǎn)單的總結(jié);主要包括對(duì)IIS進(jìn)行站點(diǎn)的新建以及新建站點(diǎn)的NET版本的選擇,還有針對(duì)IIS7程序池的托管模式以及版本的操作2013-03-03C#通過(guò)Win32API設(shè)置客戶端系統(tǒng)時(shí)間的方法詳解
在日常工作中,有時(shí)可能會(huì)需要獲取或修改客戶端電腦的系統(tǒng)時(shí)間,比如軟件設(shè)置了Licence有效期,本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)C#獲取和設(shè)置客戶端電腦的系統(tǒng)時(shí)間,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正,需要的朋友可以參考下2024-06-06C#中IList<T>與List<T>的區(qū)別深入解析
本篇文章主要是對(duì)C#中IList<T>與List<T>的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01