NewQuant的设计——MatrixComputation的领域分析

  MatrixComputation是NewQuant中最重要也是最大的一个模块,这个模块的领域分析要从回答几个问题开始。

一、矩阵的用途?

1.矩阵可以作为一个二维表充当容器;

2.矩阵用来表征一个线性方程组或LS问题;

3.矩阵作为特定模型的参数,例如多元正态分布的协方差矩阵

二、关于矩阵的计算有哪些?

1.基本运算例如相加、相减、相乘和转置,多元统计中的拉直,不同矩阵的拼接等等

2.高级矩阵分解运算,例如LU分解、QR分解和SVD分解(通常矩阵分解为解方程服务)

3.高级运算,例如求逆、求秩等。

  翻开《Matrix Computation》这本书(MatrixComputation模块的主要参考文献),研究过里面的算法之后可以发现,绝大部分解方程的算法(非迭代算法)需要做矩阵分解,将一个一般化的矩阵分解成若干特殊化的矩阵的乘积,然后依次解决相应的方程。

三、特殊的矩阵有哪些?

上下三角阵、上下带状阵、对称阵、对称带状阵、正交阵、置换阵、对角阵等等。

  下面再来看第一个问题,作为容器的矩阵行为和功能相对简单,如果要表征线性方程组的话,就必须考虑矩阵分解的问题。矩阵分解是将一般化的矩阵分解成一系列特殊矩阵的乘积。如此一来关于解方程的领域分析清晰了,解方程先做矩阵分解,不同的矩阵分解的方法产生不同形状的特殊矩阵,特殊矩阵对应的方程有特殊的解法。

  在来看第二个问题,高级计算的领域分析被前面的论述解决了,留下了基本计算的领域分析问题。从理论上讲,一个矩阵的转置或两个矩阵相加将产生一个新的矩阵,但是如果从数值计算效率的角度看,产生的新矩阵是一个“临时对象”,对于矩阵这种数据密集型对象来讲,临时对象的产生会严重影响性能。为了避年产生临时对象,基本计算只能是“形式上的”,例如矩阵相加产生一个轻量级的对象,该对象是矩阵,但是只是形式上表示两个矩阵相加。这也就是“延迟赋值”的技巧。

  下面总结MatrixComputation的领域分析结论,除了一般矩阵之外还要实现若干特殊矩阵,这些矩阵都有容器的功能,存储着矩阵数据。每一种特殊矩阵都有着自己的特殊解法,一般矩阵在做矩阵分解之后将解方程的工作委托给特殊矩阵。为了避免临时对象的产生,矩阵的基本运算只是形式上的,并不产生一个新矩阵作为计算结果。

NewQuant的设计(二)——MatrixComputation的领域分析的更多相关文章

  1. NewQuant的设计(一)——整体的领域设计

    NewQuant的设计思路——整体的领域分析 “领域驱动设计(DDD)”是著名软件工程建模专家Eric Evans提出的一个重要概念,是“面向对象分析设计(OOAD)”的深化.当业务逻辑变得复杂,系统 ...

  2. (数字IC)低功耗设计入门(二)——功耗的分析

    前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关 ...

  3. .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

    阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑.数据有家可归,变成一个完整的业务对象) 3.统一协调层Application Layer(加入协调层来转换 ...

  4. julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域

    编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...

  5. 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

    目录 系列文章 领域逻辑和应用逻辑 多应用层 示例:正确区分应用逻辑和领域逻辑 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落 ...

  6. JavaScript 框架设计(二)

    JavaScript 高级框架设计 (二) 上一篇,JavaScript高级框架设计(一)我们 实现了对tag标签的选择 下来我们实现对id的选择,即id选择器. 我们将上一篇的get命名为getTa ...

  7. iOS开发CoreAnimation解读之二——对CALayer的分析

    iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二. ...

  8. 游戏UI框架设计(二) : 最简版本设计

    游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状 ...

  9. Redis缓存项目应用架构设计二

    一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...

随机推荐

  1. [转] 使用反射机制控制Toast的显示时间

    大体上说就是利用toast的内部类TN 来控制show和hide ,这是一个反射机制 怎么控制toast的显示时间呢?这个就是通过tn类的show和hide的方法 http://blog.csdn.n ...

  2. Android AsyncTask异步任务(二)

    之前我们讲过了AsyncTask 的生命周期(onPreExecute-->doInBackground-->onProgressUpdate-->onPostExecute),今天 ...

  3. matlab初学之roundn和round

    文章出处: http://evaevazhuxun.blog.sohu.com/154543859.html http://blog.sina.com.cn/s/blog_a4034b2801012o ...

  4. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  5. ASP.NET MVC3的学习

    ASP.NET MVC第一次课(2013-12-25晚学完)     1.ASP.NET MVC 的特点       分离任务          可扩展        强大的URL重写(路由)机制   ...

  6. 浅谈FTP 与 LFTP 的 nlist 和 mget 功能

    最近因为业务需要,与第三方数据厂商做数据对接,接口方式协定为 FTP传输 ,说说我过程中的dan teng 经历. 开始准备用 lftp mirror 的方式镜像的方式同步数据,由于对方提供的日志文件 ...

  7. DELL vostro V5460 装mSATA 半高SSD硬盘后装win8.1系统

    1.介绍 DELL vostro V5460的超极本性能虽然不是那么好,但的确是我觉得样子最好看的一款.满足了,轻,薄.如果是红色的,则很适合女生用. 2.缺点 这款笔记本最大的缺点,就是有的无线网卡 ...

  8. Java(四)

    下面的代码可以实现以字节为单位复制文件的功能,适合复制非文本类型的文件,为了更清楚的观测运行速率,我加入了程序计时器,代码如下: import java.io.FileInputStream; imp ...

  9. CPU指令集

    cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...

  10. ggplot2 多图排版

    和R自带的绘图系统不同,ggplot2不能直接通过par(mfrow) 或者 layout()来排版多张图片.终于发现,其实可以通过一个『gridExtra』包来搞定: require(gridExt ...