矩阵

线代:1.6矩阵的特征值和特征向量

扶醉桌前 提交于 2019-12-18 04:42:47
文章目录 任务详解: 1.向量的内积和范数 向量的内积以及正交性 定义1: 定义2 定义3 定义4 判定矩阵A可逆的小结 2.特征值特征向量以及矩阵的相似 方阵的特征值与特征向量 定义6 本课程来自 深度之眼 ,部分截图来自课程视频。 【第一章 线性代数】1.6矩阵的特征值和特征向量 在线LaTeX公式编辑器 任务详解: 1、掌握内积,正交,线性相关,线性无关的概念 2、掌握规范正交基,正交矩阵 3、掌握特征值特征向量的几何意义与算法 1.向量的内积和范数 向量的内积以及正交性 定义1: 设有n维向量(如果不做特殊说明,n维向量都是指列向量) [x,y]称为向量x与y的内积(或者叫点积,elementwise). 内积是两个向量之间的一种运算,其结果是一个实数,用矩阵记号表示,当x与y都是列向量时,有 [ x , y ] = x T y = y T x [x,y]=x^Ty=y^Tx [ x , y ] = x T y = y T x 有时候也记做:<x,y> 还有一个重要性质:柯西不等式 [ x , y ] 2 ≤ [ x , x ] [ y , y ] [x,y]^2≤[x,x][y,y] [ x , y ] 2 ≤ [ x , x ] [ y , y ] 由以上性质加上我们中学在二维空间里面向量夹角的概念,我们可以推广到高维空间

02-稀疏数组

拜拜、爱过 提交于 2019-12-18 04:13:24
介绍 当一个数组中的大部分元素为0,或者为一个值得数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1)记录数组一共有几行几列,有多少个不同的值 2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组应用实例 1)使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等) 2)把稀疏数组存盘,并且可以重新恢复原来的二维数组数 3)整体思路分析 二维数组转稀疏数组思路 1,遍历二维数组,得到有效数据的个数 sum 2,根据sum就可以创建稀疏数组int[sum+1][3] 3,将二维数组的有效数据存入到稀疏数组 稀疏数组转原始二维数组的思路 1,先读取稀疏数组的第一行,创建原始二维数组int[11][11] 2,读取稀疏数组后几行的数据,并赋给原始二维数组 稀疏数组代码实现 1 package com.datastack.datastack.sparsearr; 2 /** 3 * 稀疏数组 4 * @author ahpan 5 * 6 */ 7 public class SparseArr { 8 public static void main(String[] args) { 9 //创建一个二维数组,并打印 10 int arr[][] = new int[11][11]; 11 arr[1][2] = 1; 12 arr[2][3]

稀疏数组的实现

扶醉桌前 提交于 2019-12-18 04:12:27
1. 稀疏数组的引入 当数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用,造成内存空间的浪费。为了节省内存空间,并且不影响数组中原有的内容值,我们可以使用稀疏数组去压缩数据。 2.稀疏数组的描述 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组共有3列,第一行记录的是原数组的行数,列数,有效数据的个数 分析 代码实现 public class sparsearraytest1 { public static void main(String[] args) { //创建一个原始的二维数组 11 * 11 // 0表示没有棋子,1表示黑子,2表示蓝子 int chessArr1[][] = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; chessArr1[4][5] = 2; //输出原始的二维数组 System.out.println("原始的二维数组为:"); for (int[] row : chessArr1) { for (int data : row) { System.out.printf("%d\t", data); } System.out.println(); } /

有限元计算 求解笔记(上)

匆匆过客 提交于 2019-12-18 03:48:59
octave 基本操作 算数运算 的符号:+,-,*,/,^,() 注释 用%标出,行内行间注释方法相同。 普通的函数 : sin, cos,tan,asin, acos,atan,exp,log,sqrt,abs 矩阵 :[ ] 【行间用 ; 隔开】 矩阵计算使用的符号:+,-,*,,’ 有限元计算的原理 1. 最简单的情况 1.1 一维杆两端受力: 已知杨氏模量E,横截面积A,杆的长度L。 有杆两端的位移(u1,u2)和力(F1,F2),可以通过物理公式求得刚度矩阵。 1.2 一维杆中间+一端受力: 已知杨氏模量E,横截面积A,杆的长度L,力的位置。 有施加的两个力的方向和大小,求结点位移。 1.3 一维变截面杆中间两处受力 已知杨氏模量E,横截面积A1、A2,杆的长度L,力的位置。 求结点位移和两端的支持力。 2与3横截面积相同: 从以上几个例子中可以看出,力与位移之间存在正相关关系,系数即为单元刚度矩阵。在越来越复杂的受力情况中,我们通过分段(有限元法)求出答案。 2. 能量法 能量法的适用范围更广,比方说有弹性形变的问题。 2.1 伸长量与位移线性相关 线性形函数可以表示为: 在local坐标系之下,X的函数可以表示为x的函数: 这时候力就由位移对位置的导数得出。 计算应变能: 其中E和A可以是x的导数。 单元刚度: 2.2 横截面积是x的函数的情况 各自积分求和。 2

线性方程组求解

眉间皱痕 提交于 2019-12-17 22:36:34
1.矩阵基本知识 (1)正交矩阵相乘仍然是正交矩阵 A、B是正交矩阵,那么AA'=E BB'=E (AB)*(AB)'=AB*B'A'=A(BB')A'=AEA'=AA'=E (2)一个矩阵乘以正交矩阵,范数不变 ||Ux||^2=(Ux)^T(Ux)=x^TU^TUx=x^Tx=||x||^2 (3)一个矩阵乘以可逆矩阵秩不变 (4)初等变换只是不影响矩阵的秩,其他的特性都改变了。对于计算矩阵的行列式,不能进行初等变换,但是可以做行列的进 加减,不能乘以系数。 (5)矩阵的迹:矩阵的主对角线上各个元素的总和,是矩阵所有特征值的和 (6)对角矩阵的特征值是其对角线上的各个元素 (7)矩阵的秩等于非零奇异值的个数,等于非零特征值的个数 (8)任意矩阵都能进行奇异值分解,只有方阵才可以进行特征值分解 特征值分解: 如果一个向量 v 是方阵 A的特征向量,将可以表示成下面的形式: Av= λv,λ 称为特征向量 v 对应的特征值,并且一个矩 阵的 一组特征向量是一组正交向量。 特征值分解:Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值 奇异值分解: 假设A是一个N * M的矩阵,U是一个N * N的方阵(正交矩阵),Σ 是一个N * M的矩阵(对角线上的元素为奇异值),VT是 一个M * M的矩阵(正交矩阵) 特征值和奇异值的关系: (1)U

leetcode【高级】 矩阵中的最长递增路径 Java

无人久伴 提交于 2019-12-17 17:29:10
题干 给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。 示例 1: 输入 : nums = [ [ 9 , 9 , 4 ] , [ 6 , 6 , 8 ] , [ 2 , 1 , 1 ] ] 输出 : 4 解释 : 最长递增路径为 [ 1 , 2 , 6 , 9 ] 。 示例 2: 输入 : nums = [ [ 3 , 4 , 5 ] , [ 3 , 2 , 6 ] , [ 2 , 2 , 1 ] ] 输出 : 4 解释 : 最长递增路径是 [ 3 , 4 , 5 , 6 ] 。注意不允许在对角线方向上移动。 想法 一看有点回溯法那味儿了,但是仔细想了想 可以这样完成: 使用矩阵dp来保存最长路径 其中dp[x][y]表示从xy出发递增最长路径, 我们就只需要遍历矩阵取出最大就行 初始化dp全部为0 现在关键点就是: 确定了起点以后怎么找出最长路径, 比如说现在起点在x,y,,如果dp[x][y]>0说明已经处理过了不用管 否则就分别尝试上下左右四个方向,如果不越界且它大于现在的数,那么就更新长度,直接看代码很好懂 Java代码 class Solution { public int longestIncreasingPath ( int [ ] [ ] matrix ) {

矩阵点乘和叉乘

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-17 11:31:48
来源:https://blog.csdn.net/u013066730/article/details/57462299/ 下面为matlab中的点乘和叉乘 矩阵叉乘 矩阵的乘法就是矩阵a的第一行乘以矩阵b的第一列,各个元素对应相乘然后求和作为第一元素的值。矩阵只有当左边矩阵的列数等于右边矩阵的行数时,它们才可以相乘,乘积矩阵的行数等于左边矩阵的行数,乘积矩阵的列数等于右边矩阵的列数。 MATLAB仿真 MATLAB代码: a=[ 1 0 2;- 1 3 1]; b=[ 3 1; 2 1; 1 0]; c=a*b; fprintf( '\na = \n'); disp(a); fprintf( '\nb = \n'); disp(b); fprintf( '\nc = \n'); disp(c); a = 1 0 2 -1 3 1 b = 3 1 2 1 1 0 c = 5 1 4 2 矩阵的点乘 就是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小 %matlab代码为 c=a.*b; a = 1 0 -1 3 b = 3 1 2 1 c = 3 0 -2 3 来源: https://www.cnblogs.com/MCSFX/p/12053441.html

【csp模拟赛2】 爆搜 方格加数

匆匆过客 提交于 2019-12-17 05:50:32
【题目描述】 xyz1048576正在玩一个关于矩阵的游戏。 一个 n*m的矩阵,矩阵中每个数都是[1,12]内的整数。你可以执行下列两个操作 任意多次 : (1)指定一行,将该行所有数字+1。 (2) 指定一列,将该列所有数字 +1。 (3) 如果执行完上述操作之后,矩阵中某个数变成了 3,6,9,12其中的某一个,我们认为这个数是稳的。 给定初始矩阵,求出任意执行操作之后稳数的最多个数。 【输入 格式 】 第一行包含两个正整数 n,m。 接下来 n行, 每行 m个数,描述这个矩阵。 【输出 格式 】 一个整数,表示答案。 【输入 样例 1 】 3 3 1 2 3 3 2 4 1 2 1 【输出 样例 1 】 7 【输入样例 2】 5 5 2 4 6 8 10 1 2 3 4 5 3 4 5 6 7 7 8 9 10 11 5 10 12 3 7 【输出样例 2】 20 【数据 规模及约定 】 对于10%的数据,n,m≤2。 对于20%的数据,n,m≤5。 对于 100%的数据,n,m≤10。 思路:   dfs,爆搜 ,先只考虑每一行,因为对于一行或者一列,加三次和加六次相对关系不变,我们可以对于每一行或列,枚举加0次,加一次,加两次的情况,DFS行后,循环处理列的情况, 每一列取和3取模相同的最大集合,统计答案。 代码: #include"iostream" #include