NewQuant的设计(二)——MatrixComputation的领域分析
NewQuant的设计——MatrixComputation的领域分析
MatrixComputation是NewQuant中最重要也是最大的一个模块,这个模块的领域分析要从回答几个问题开始。
一、矩阵的用途?
1.矩阵可以作为一个二维表充当容器;
2.矩阵用来表征一个线性方程组或LS问题;
3.矩阵作为特定模型的参数,例如多元正态分布的协方差矩阵
二、关于矩阵的计算有哪些?
1.基本运算例如相加、相减、相乘和转置,多元统计中的拉直,不同矩阵的拼接等等
2.高级矩阵分解运算,例如LU分解、QR分解和SVD分解(通常矩阵分解为解方程服务)
3.高级运算,例如求逆、求秩等。
翻开《Matrix Computation》这本书(MatrixComputation模块的主要参考文献),研究过里面的算法之后可以发现,绝大部分解方程的算法(非迭代算法)需要做矩阵分解,将一个一般化的矩阵分解成若干特殊化的矩阵的乘积,然后依次解决相应的方程。
三、特殊的矩阵有哪些?
上下三角阵、上下带状阵、对称阵、对称带状阵、正交阵、置换阵、对角阵等等。
下面再来看第一个问题,作为容器的矩阵行为和功能相对简单,如果要表征线性方程组的话,就必须考虑矩阵分解的问题。矩阵分解是将一般化的矩阵分解成一系列特殊矩阵的乘积。如此一来关于解方程的领域分析清晰了,解方程先做矩阵分解,不同的矩阵分解的方法产生不同形状的特殊矩阵,特殊矩阵对应的方程有特殊的解法。
在来看第二个问题,高级计算的领域分析被前面的论述解决了,留下了基本计算的领域分析问题。从理论上讲,一个矩阵的转置或两个矩阵相加将产生一个新的矩阵,但是如果从数值计算效率的角度看,产生的新矩阵是一个“临时对象”,对于矩阵这种数据密集型对象来讲,临时对象的产生会严重影响性能。为了避年产生临时对象,基本计算只能是“形式上的”,例如矩阵相加产生一个轻量级的对象,该对象是矩阵,但是只是形式上表示两个矩阵相加。这也就是“延迟赋值”的技巧。
下面总结MatrixComputation的领域分析结论,除了一般矩阵之外还要实现若干特殊矩阵,这些矩阵都有容器的功能,存储着矩阵数据。每一种特殊矩阵都有着自己的特殊解法,一般矩阵在做矩阵分解之后将解方程的工作委托给特殊矩阵。为了避免临时对象的产生,矩阵的基本运算只是形式上的,并不产生一个新矩阵作为计算结果。
NewQuant的设计(二)——MatrixComputation的领域分析的更多相关文章
- NewQuant的设计(一)——整体的领域设计
NewQuant的设计思路——整体的领域分析 “领域驱动设计(DDD)”是著名软件工程建模专家Eric Evans提出的一个重要概念,是“面向对象分析设计(OOAD)”的深化.当业务逻辑变得复杂,系统 ...
- (数字IC)低功耗设计入门(二)——功耗的分析
前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关 ...
- .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)
阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑.数据有家可归,变成一个完整的业务对象) 3.统一协调层Application Layer(加入协调层来转换 ...
- julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域
编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...
- 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
目录 系列文章 领域逻辑和应用逻辑 多应用层 示例:正确区分应用逻辑和领域逻辑 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落 ...
- JavaScript 框架设计(二)
JavaScript 高级框架设计 (二) 上一篇,JavaScript高级框架设计(一)我们 实现了对tag标签的选择 下来我们实现对id的选择,即id选择器. 我们将上一篇的get命名为getTa ...
- iOS开发CoreAnimation解读之二——对CALayer的分析
iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二. ...
- 游戏UI框架设计(二) : 最简版本设计
游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状 ...
- Redis缓存项目应用架构设计二
一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...
随机推荐
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析
标签:Iterator Java List ArrayList Vector 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些 ...
- web前端基础篇⑨
1.web端.app端 目前实现响应式布局,主要用以下两种方式.CSS原生代码响应式布局 @media screen.bootstrap移动设备优先.自带框架. 兼容性 用原生代码的话 根据不同的屏幕 ...
- 谈谈对hibernate的理解
它是ORM思想的一个实现,对JDBC进行了很好的封装,它通过配置使JavaBean对象和数据库表之间进行映射,并提供对增.删.改.查便利的操作方法,同时支持事务处理,它对数据库记录还提供了缓存机制,提 ...
- Bootstrap CSS概览代码文字标注篇
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 解决ie6 fixed 定位以及抖动问题
像你所遇到的问题一样, IE6浏览器有太多的bug让制作网页的人头疼.这篇文章介绍的是介绍的是如何解决IE6不支持position:fixed;属性的办法.如果我们需要做某个元素始终位于浏览器的底部, ...
- Duilib开发环境搭建
1.到github上下载最新版本,https://github.com/duilib/duilib,也没有发现版本号,就如图所示吧 2.我只安装了VS2008,而github上的已经更新到VS2013 ...
- ACM_1001_Exponentiation 详解
参考:http://blog.csdn.net/rually/article/details/8585268 #include<iostream> using namespace std; ...
- maya的卡通渲染
为了统一工作流,给maya也做了个卡通shader:
- LeetCode 094 Binary Tree Inorder Traversal
方法一:(递归) class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int ...
- HTTP消息结构
HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP"客户端"是一个应用程序(Web浏览 ...