矩阵

三维图形变换

混江龙づ霸主 提交于 2019-12-20 05:35:08
三维图形变换 是在二维方法基础上增加了对 z 坐标的考虑得到的。与二维变换类似,引入齐次坐标表示,即:三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘。 一、平移变换 二.比例变换 例如:对长方体进行比例变换, 三、旋转变换 跟二维的相同 四、对称变换 有关于坐标平面、坐标轴的对称变换 (1)关于坐标平面的对称 绕哪个面变换,那个面不变 变换矩阵为: 其它均类似 (2)关于坐标轴变换 6.2 投影变换 投影变换就是把三维物体投射到投影面上得到二维平面图形 两种投影法的 本质区别 在于:透视投影的投影中心到投影面之间的距离是有限的;而另一个的距离是无限的。 一、中心(透视)投影 特点:投影线均通过投影中心,物体的投影视图由计算投影线与观察平面交点而得 在投影中心相对投影面确定的情况下,空间的一个点在投影面上只存在唯一一个投影。 透视投影生成真实感视图,但不保证相关比例。 二、平行投影 1 、把透视投影的中心移至无穷远处,则各投影线称为相互平行的直线,这种投影 2 、分为正投影和斜投影 3、特点:保持物体的有关比例不变 三、平面集合投影的分类 6.3 三视图 一、 1 、根据投影面与坐标轴的夹角可分为两类:三视图和正轴侧图。 当投影面与某一坐标轴垂直时,得到的投影为三视图,这是投影方向与这个坐标轴的方向一致;否则,得到的投影为正轴侧图 2、 三视图包括主、侧

协方差矩阵 定义 推导证明 作用

核能气质少年 提交于 2019-12-20 04:49:28
首先,需要先理解什么是方差,什么是协方差,这里不做说明,需要的可以去找考研复习视频去学习下概率论。 = 1、首先我们来理解 二维 设有函数f(x,y) 其中有n个样本点(n>0),分别为 ,对x和y分别求均值为 将所有坐标减去均值的样本点坐标为 ,这个过程叫 数据中心化 将去中心化的样本点表示成矩阵形式为 ,设为矩阵X,这个矩阵我们称为有两个特征值。 则定义 协方差矩阵 为C = (书上就是这么定义的) 可以看出,C是一个2*2维的矩阵,用样本点表示为 很显然 等于 2、 对于多维 同样,对于 t 维函数 ,有样本点分别为 与二维的方式类似,先进行数据中心化,然后写出t个特征值的矩阵,然后通过C = ,计算出协方差矩阵。 那么对于 t 维的协方差矩阵简化表示为 3、作用 用协方差矩阵可以对原始的维度的数据进行最小损失的降维。通过求取协方差矩阵的特征值(Eigenvalues)和对应特征向量(Eigenvectors),按特征值大小排序,降维就是从特征值小的维度开始剔除。(特征值小,表明对应的那一维特征对整体的影响比较小,比如下面的图中,使用右边的坐标系时,明显y轴的对整体数据的影响比x轴要小,那么可以在右边的坐标系下,对y轴进行降维,是数据从二维变成线性的,降维对于二维可能用处不是太大,但是对于多维的数据,很有必要,可以减少数据的复杂度) 4、降维后数据求取

17.输入一个矩阵,按照从外向里的顺序依次打印出每个数字

本小妞迷上赌 提交于 2019-12-20 04:32:41
package java2019 ; import java . util . ArrayList ; //输入一个矩阵,按照从外向里顺时针的顺序依次打印出每个数字 public class Demo17 { static ArrayList < Integer > a = new ArrayList < Integer > ( ) ; public void printMatrix ( int [ ] [ ] test ) { int tc = 0 ; int tr = 0 ; int dc = test [ 0 ] . length - 1 ; int dr = test . length - 1 ; while ( tc <= dc && tr <= dr ) { printEdge ( test , tc ++ , tr ++ , dc -- , dr -- ) ; } } public void printEdge ( int [ ] [ ] m , int tc , int tr , int dc , int dr ) { int cur_tc = tc ; int cur_tr = tr ; //向右移动 while ( tc != dc ) { a . add ( m [ tr ] [ tc ++ ] ) ; } while ( tr != dr ) { a .

矩阵与向量的乘积

﹥>﹥吖頭↗ 提交于 2019-12-20 02:31:51
以下内容来源于:https://www.zhihu.com/people/August_666/posts 先上运算,再解读: 一个矩阵乘以一个列向量相当于矩阵的列向量的线性组合。 一个行向量乘以矩阵,相当于矩阵的行向量的线性组合。 方程组: 在二维平面中,相当于找两条直线的交点。 写成如下形式: 把方程组看成是Ax=b,相当于是寻找矩阵A的列向量的某个线性组合,使得等于b。可以引申出来:二维平面的任意两个向量的任意组合可以表达出来整个平面。但是这里的任意两个向量不可以共线,如果共线,其线性组合也只能表达这条线上的向量。(任意一个向量可以看成是二维平面中的一个点,此点表示的向量就是由原点指向这一点的向量。) 三维的情形: AX=b,A的每一行乘以X相当于一个平面,则上面的方程组代表求三个平面的交点。一般可以先求任意两个平面的交线,再用这条交线和第三个平面求交点。 若写成下面的A的列的线性组合: 相当于求三个三维向量的的某个线性组合,使得结果是第四个三维向量(b)。 可不可以认为任意三个三维向量的线性组合可以表达出整个三维空间中所有的三维向量呢?在三个三维向量不共面的情况下可以这样认为。如果有一个三维向量是另外两个三维向量的线性组合,则这三个三维向量共面,此时,这三个三维向量的任何线性组合都在这个面内,不可能表达出整个三维空间。此时如果第四个三维向量(b),不在此面内

选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵

我的未来我决定 提交于 2019-12-20 02:31:32
做数据结构课设时候查的资料,主要是看求逆矩阵方面的知识的。 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵、解线性方程组(插一句:LM算法求解的一个步骤),等等。它的速度不是最快的,但是它非常稳定(来自网上的定义:一个计算方法,如果在使用此方法的计算过程中,舍入误差得到控制,对计算结果影响较小,称此方法为数值稳定的),同时它的求解过程也比较清晰明了,因而人们使用较多。下面我就用一个例子来告诉你Gauss-Jordan法的求解过程吧。顺便再提及一些注意事项以及扩展话题。 对本文中所提到的“主元”等概念的解释,可以参考 此链接 。 假设有如下的方程组: 写成矩阵形式就是:AX=B,其中: 且X=(X 1 , X 2 , X 3 ) T 。 现对矩阵A作初等变换,同时矩阵B也作同样的初等变换,则当A化为单位矩阵的时候,有: 显而易见,我们得到了方程组的解X=(1, 2, 4) T 。 所以,我们要以一定的策略,对A和B施以一系列的初等变换,当A化为单位矩阵的时候,B就为方程组的解。 选主元的G-J消元法通过这样的方法来进行初等变换:在每一个循环过程中,先寻找到主元,并将主元通过行变换(无需列变换)移动到矩阵的主对角线上,然后将主元所在的行内的所有元素除以主元,使得主元化为1;然后观察主元所在的列上的其他元素

理解矩阵乘法

陌路散爱 提交于 2019-12-20 02:31:23
大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。 刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。 矩阵减法也类似。 矩阵乘以一个常数,就是所有位置都乘以这个数。 但是,等到矩阵乘以矩阵的时候,一切就不一样了。 这个结果是怎么算出来的? 教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。 也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。 怎么会有这么奇怪的规则? 我一直没理解这个规则的含义,导致《线性代数》这门课就没学懂。研究生时发现,线性代数是向量计算的基础,很多重要的数学模型都要用到向量计算,所以我做不了复杂模型。这一直让我有点伤心。 前些日子,受到 一篇文章 的启发,我终于想通了,矩阵乘法到底是什么东西。关键就是一句话, 矩阵的本质就是线性方程式,两者是一一对应关系。 如果从线性方程式的角度,理解矩阵乘法就毫无难度。 下面是一组线性方程式。 矩阵的最初目的,只是为线性方程组提供一个简写形式。 老实说,从上面这种写法,已经能看出矩阵乘法的规则了:系数矩阵第一行的2和1,各自与 x 和 y 的乘积之和,等于3。不过,这不算严格的证明

C语言 矩阵的几种乘法

余生长醉 提交于 2019-12-20 02:31:03
在看到麻省理工学院的线性代数公开课的视频时,了解到有几种矩阵相乘的方法: #include <stdio.h>#include <stdlib.h>#include <math.h>#define M 2#define N 3#define P 4/* * A*B=C * (M,N) * (N,P) =(M,P) */float a[M][N] = {{5, 2, 4}, {6, 3, 9}};float b[N][P] = {{7, 8, 9, 10}, {1, 4, 22, 171}, {13,14, 2, 21}};float c[M][P];void clear_c(){//用于清空c数组,//多种乘法同时使用的时候,某些方法需要清空c数组,否则会重复计算。 int i,j; for(i=0;i<M;i++) for(j=0;j<P;j++) c[i][j]=0;}void print_matrix(){//本函数只打印c 矩阵 int i,j; for(i=0;i<M;i++) { for(j=0;j<P;j++) { printf("%.3g\t",c[i][j]); } printf("\n"); }}void mul_1(){//一般矩阵乘积 printf("\n1.矩阵乘法的一般方法:\n"); int i,j,k; float c_key,c_sumkey; /

矩阵乘法np.dot()及np.multiply()以及*

一笑奈何 提交于 2019-12-20 02:30:27
转载自 https://blog.csdn.net/u012609509/article/details/70230204 Python中的几种矩阵乘法 1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义。对于一维矩阵,计算两者的内积。见如下Python代码: import numpy as np # 2-D array: 2 x 3 two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]]) # 2-D array: 3 x 2 two_dim_matrix_two = np.array([[1, 2], [3, 4], [5, 6]]) two_multi_res = np.dot(two_dim_matrix_one, two_dim_matrix_two) print('two_multi_res: %s' %(two_multi_res)) # 1-D array one_dim_vec_one = np.array([1, 2, 3]) one_dim_vec_two = np.array([4, 5, 6]) one_result_res = np.dot(one_dim_vec_one, one_dim_vec_two)

矩阵与行列式的几何意义

旧街凉风 提交于 2019-12-20 02:29:05
作者:童哲 链接:https://www.zhihu.com/question/36966326/answer/70687817 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 行列式这个“怪物”定义初看很奇怪,一堆逆序数什么的让人不免觉得恐惧,但其实它是有实际得不能更实际的物理意义的, 理解只需要三步 。这酸爽~ 1,行列式 是针对一个 的矩阵 而言的。 表示一个 维空间到 维空间的线性变换。那么什么是线性变换呢?无非是一个压缩或拉伸啊。假想原来空间中有一个 维的立方体(随便什么形状),其中立方体内的每一个点都经过这个线性变换,变成 维空间中的一个新立方体。 2,原来立方体有一个体积 ,新的立方体也有一个体积 。 3,行列式 是一个数对不对?这个数其实就是 ,结束了。 就这么简单?没错,就这么简单。 所以说:行列式的本质就是一句话: 行列式就是线性变换的放大率! 理解了行列式的物理意义,很多性质你根本就瞬间理解到忘不了!!!比如这个重要的行列式乘法性质: 道理很简单,因为放大率是相乘的啊~! 你先进行一个 变换,再进行一个 变换,放大两次的放大率,就是式子左边。 你把“先进行 变换,再进行 变换”定义作一个新的变换,叫做“ ”,新变换的放大律就是式子右边。 然后你要问等式两边是否一定相等,我可以明确告诉你:too simple 必须相等。因为其实只是简单的把事实陈述出来了