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. [转]iOS7中UITextView contentsize改变时机

    在iOS7以下版本中,对UITextView设置了text属性,则contentsize就会变化,从而可以根据contentsize的变化来改变UITextView高度来做出TextView高度随着输 ...

  2. 【python】3.x,string与bytes的区别(文本,二进制数据)

    Python 3对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示, 二进制数据则由bytes类型表示. 不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也 ...

  3. 对象序列化到本地文件 ObjectOutputstream ObjcetInputstream

    package com.main.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import ...

  4. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  5. 关于JAVA的数据转换总结

    数据转换在编程里面是十分常用的,将平常可能用到的数据转换类型总结起来会在以后码代码的过程中有很大帮助. 在数据转换之前,需要明白的是基础数据类型的自动转换和强制转换.接下来就先从数据类型的容量讲起. ...

  6. 利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送

    需求: 每当数据库有数据更新时,推送到客户端 软需求: 1.服务器资源有限,要求资源占用尽可能小: 2.项目可控,不许调用第三方不可信不稳定的方法. 已有事例: 1.58到家采用的方法是TCP的长连接 ...

  7. [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转

    题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...

  8. Ansible-Tower快速入门-2.准备开始【翻译】

    准备开始 欢迎来到ansible tower! 首先,您可以按照下面的快速安装说明进行安装,详细的安装说明可以查看章节标题“安装和设置指南”,然后,你可以通过快速启动来快速开启和运行tower,或者设 ...

  9. iOS 线性滚动

    在这里,给大家带来简单的滚动实现,首先看一下实现效果. 通过观察不难发现,有很多地方并不是那么容易想出来的,对于篇随笔,感兴趣可以查查相关资料,我就不尽行过多说明,(主要是开考文字,不好说明

  10. Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

    一.错误描述 登陆PL/SQL Developer登陆本地数据库时先报没有监听程序,查看服务发现Oracle监听服务没有启动.右击启动监听程序,报错: 错误描述:本地计算机上的OracleOraDb1 ...