NMath矩阵分解的两种方式

概述:本教程为您介绍.Net唯一的数学与统计学运算库NMath,实现矩阵分解的两种方法。

  Nmath中包括用于构造和操作矩阵QR和奇异值分解的分解类。QR分解如下表示:


1

AP=QR

  其中P是一个可置换矩阵,Q是正交的,且R为上梯形。矩阵A的奇异值分解(SVD)的形式表示为:


1

A=USV*

  其中U和V是正交的,S是对角的,和V *表示一个真正的矩阵V或一个复杂的矩阵V的条目沿对角线S的共轭转置的奇异值。

  接下来带来一个矩阵分解类的实例,下面代码示例为从FloatMatrix创建FloatQRDecomp这个分解类:


1

2

3


FloatMatrix A =

  
new
FloatMatrix( 
"5x3 [ 1 2 3  4 5 6  7 8 9  0 1 2  3 4 5 ]"
);

FloatQRDecomp qr = 
new
FloatQRDecomp( A );

  还有一种比较复杂的分解类的实例代码为:


1

2

3

4

5

6

7


DoubleComplexQRDecompServer qrs = 
new

  
DoubleComplexQRDecompServer();

qrs.Pivoting = 
false
;

int
rows = 10, cols = 3;

DoubleComplexMatrix A = 
new
DoubleComplexMatrix( rows, cols,

  
new
RandGenUniform( -1, 1 ) );

DoubleComplexQRDecomp qr = qrs.GetDecomp( A );

时间: 2024-08-06 07:57:22

NMath矩阵分解的两种方式的相关文章

《连载 | 物联网框架ServerSuperIO教程》- 10持续传输大块数据流的两种方式(如:文件)

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

感谢唯笑志在分享 原博主原地址:http://www.cnblogs.com/lsjwq/ 目       录 10.持续传输大块数据流的两种方式(如:文件)... 2 10.1        概述... 2 10.2        大块数据流的两种传输方式... 2 10.2.1       协议数据包的方式... 2 10.2.2       请求长度.确认的方式... 3 10.3        实现持续传输大块数据... 4 10.3.1       设计请求发送数据协议... 4 10

OpenCV4Android开发环境搭建两种方式加上图像二值化

1.环境搭建 进行android开发所需要的环境一般为:eclipse + android sdk + ADT,而OpenCV的开发由于需要编写本地代码(C/C++),因此还需要安装以下工具:NDK,Cygwin,CDT.网上都有大量详细的安装讲解,本文只描述下其中关键步骤. 1.1 NDK的安装 (1) NDK下载后解压到固定目录即可,无需安装.本文解压到D盘根目录下,其路径为:D:\android-ndk-r8d: (2) 添加环境变量,将其安装路径添加到系统path变量中,并添加系统变量N

ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)

最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,ThoughtWorks.QRCode的功能更多一些,但是dll文件有6兆,QrCode.Net只有400多K,大家根据自己的需要选择吧.附上代码仅供参考. 并且提供VS2013写的一个Demo提供给大家免费下载.如有疑问欢迎交流. ThoughtWorks.QRCode: private void Create

通过属性 Cesium的FBO主要支持两种方式

角色其实就是一类权限的分组,所以给用户分配角色其实也是在给用户分配权限.在oracle中有三个比较常用的角色.对于一般不是很严格的系统可以授予开发用户CONNECT.RESOURCE角色权限即可. 其中--logdir命令行参数指定的路径必须跟SummaryWriter的logdir参数值保持一致,TensorBoard才能够正确读取到Tensorflow的事件文件. 使用RTTI技术可以避免类型访问错误而程序异常的情况,但是这样做有点不优雅,每增加一个类型,都需要修改if-else结构,并且使

em创建的两种方式

em创建(两种方式1,图形dbca,当然了,前提是先创建一个监听. 2,手工命令安装em)手工命令创建em(确保数据库开启,确保监听正常并且最好是动态监听,确保system表空间够用大概1G左右),我的空间有限只给了800M,如下 select file_name,tablespace_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'SYSTEM';alter database datafile '/u01

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当

senchaTouch 给组件传参的两种方式

在senchaTouch 页面跳转中,有时我们需要将其前一个页面的相关参数传入到新的页面或者新的控件中,这是我们该如何传递参数进去呢,一下有两种方式: var arg;//定义将要 传入的参数 Ext.define('MyApp.view.Init',{ extend:'Ext.Container', id:'chat_more_btm', xtype:'init', config:{ layout:'fit', myarg:arg//把将要传入的参数映射到一个属性上面 }, initializ