矩阵

线性代数学习笔记二

﹥>﹥吖頭↗ 提交于 2019-12-20 02:28:06
线性代数学习笔记二 /*--> */ /*--> */ */ /*--> */ */ /*--> */ 线性代数学习笔记二 目录 1. 线性方程组 1.1. 行化简与阶梯型矩阵 1.1.1. 主元位置 1.1.2. 线性方程组的解 1.2. 向量方程 1.3. 矩阵方程 1.4. 线性方程组的解集 1 线性方程组 矩阵记号是为解方程组带来方便。 解方程组,消元法。 三种基本变换对应于增广矩阵的下列变换: 行初等变换 (倍加变换 replacement) 把某一行换成它本身与另一行的倍数的和 (对换变换 interchange) 把两行对换 (倍乘变换 scaling) 把某一行的所有元素乘以同一个非零数 行变换可应用于任何矩阵.如果一个矩阵可以经过一系列行初等变换变成另一个矩阵,则称这两个矩阵是行等价的。 行变换是可逆的。 线性方程组的两个基本问题: 方程组是否相容,即它是否至少有一个解? 若它有解,是否只有一个解,即解是否唯一? 1.1 行化简与阶梯型矩阵 非零行或列指矩阵中至少包含一个非零元素的行或列,非零行的先导元素是指该行中最左边的非零元素。 一个矩阵称为阶梯型,则有以下三个性值: 1 每一非零行在每一零行之上 2 某一行的先导元素所在的列位于前一行先导元素的右面 3 某一先导元素所在列下方元素都是零。若一个阶梯型矩阵还满足以下性质,则称它为简化阶梯形: 4

线性代数回头看——线性方程组

大兔子大兔子 提交于 2019-12-20 02:27:44
1、线性方程组概述 线性方程组: 包含未知数x1,x2,x3....xn的线性方程   其中b与系数a1,a2,a3...an是实数或复数,通常是已知的;下标n可以为任意数;线程方程组为由一个或几个包含相同变量x1,x2,x3....xn的线性方程组组成; 线性方程组的解分为相容、与不相容两种情况;    相容: 1、唯一解;2、无穷解    不相容: 无解 线性方程组矩阵表示   可以使用矩阵来表示线性方程组:    系数矩阵: 只包含方程组系数的矩阵    增广矩阵: 在系数矩阵的基础上加上线性方程组右边的常数组成的矩阵 2、解线性方程组   通过使用矩阵表示线性方程组,对矩阵使用行初等变换,把矩阵行化简为:行阶梯形矩阵或简化行阶梯形矩阵; 初等行变换:   1、倍加变换——把某行换成它本身与另一行的倍数和   2、对换变换——两行对换   3、倍乘变换——某一行的所有元素乘以同一个非零数 行阶梯形矩阵:   1、每一非零行在每一零行之上   2、某一行的最左边非零元素所在列在上面一行非零元素的右边   3、某一最左边非零元素所在列下方都是零   简化阶梯形为在行阶梯形矩阵的基础上进一步简化:   1、每一非零行最左边非零元素为1   2、每一最左边非零元素1是该元素所在列的唯一非零元素 同一个矩阵使用不同的方法化简,存在不同的行阶梯形,但简化阶梯形只存在一个;

电机FOC中的坐标变换(CLARK+PARK+公式推导+仿真+C语言实现)【转载】

情到浓时终转凉″ 提交于 2019-12-20 00:17:37
0 前言 今天获知了,电机FOC包含了SVPWM、坐标转换、信号采集反馈、PID闭环控制等,这个控制策略,统称为FOC控制。一般SVPWM算法的实现是在静止的αβ坐标系上实现。而PID控制器由于是对直流参考信号的跟踪效果较好,因此三相交流电会经过坐标变换,在旋转的dq坐标轴上,可以用直流量描述电枢绕组的合成矢量。 FOC控制中,有两种坐标转换需要注意的,分别是clark变换,和park变换。clark变换将abc坐标系转换为αβ坐标系,而park变换将静止的αβ坐标系转换为旋转的dq坐标系。 1 clark变换 其实直接可以把转换公式列出。 写成转换矩阵,就是: clark变换的逆变换: 写成转换矩阵,就是: 将两个转换矩阵相乘,应该是一个单位矩阵,系数K的作用是可以将转换变为等幅值转换或者等功率转换。 当 ,是等幅值转换;当 ,是等功率转换。 1.1 matlab仿真 在matlab/simulink中搭建仿真模型: abcToAlphabeta中的代码: function y = fcn(a,b, c ) %#eml alpha = a - b/ 2 - c / 2 ; beta = sqrt( 3 )/ 2 * (b - c ); y = ( 2 / 3 )*[alpha;beta]; alphabetaToABC中的代码: function y = fcn (alpha

图解c/c++多级指针与“多维”数组

北城余情 提交于 2019-12-19 23:22:28
声明: 本文为原创博文,如有转载,请注明出处。若本文有编辑错误、概念错误或者逻辑错误,请予以指正,谢谢。 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的。其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。 首先,先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识: 1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。 4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4。 5、指针可以进行加减算术运算,加减的基本单位是sizeof(指针所指向的数据类型)。 6、对数组的数组名进行取地址(&)操作,其类型为整个数组类型。 7、对数组的数组名进行sizeof运算符操作,其值为整个数组的大小(以字节为单位)。 8、数组作为函数形参时会退化为指针。 一、一维数组与数组指针 假如有一维数组如下: char a[3]; 该数组一共有3个元素,元素的类型为char,如果想定义一个指针指向该数组

数据结构——数组与矩阵

为君一笑 提交于 2019-12-19 22:06:15
数组 线性表的一种推广,由相同类型的数据元素组成,存储在一组连续的存储单元中。 一维数组又称向量,二维数组可以称,m个行向量或n个列向量。 基本运算: 读——>给定一组下标,返回该位置的元素内容。 写——>给定一组下标,修改该位置的元素内瓤 ———————————————————————————————————— 存储结构: 一维:内存单元地址是连续的。 二维,以列序为主序,或以行序为主序(类C语言的编译程序是该存储方法) 矩阵的压缩存储 特殊矩阵 :值相同的元素或者零元素在矩阵中的分布由一定规律。 1.对称矩阵: a i j a_{ij} a i j ​ = a j i a_{ji} a j i ​ i>=0,j<=n-1 存储方式 :有近一半的元素可以通过其对称元素获得,为每一对对称元素只分配一个存储单元。 n 2 n^2 n 2 个元素存储到含有 n ( n + 1 ) 2 \frac{n(n+1)}{2} 2 n ( n + 1 ) ​ 个元素的 一维数组中。 矩阵元素 a i j a_{ij} a i j ​ 在数组M中的位置为k,(i,j)和K存在如下对应关系:k的范围(0~ n ( n + 1 ) 2 \frac{n(n+1)}{2} 2 n ( n + 1 ) ​ - 1)) 当i>=j时 当i<j时 k= i ( i + 1 ) 2 \frac{i(i+1)}{2

Java 数组基础知识

帅比萌擦擦* 提交于 2019-12-19 17:07:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java 数组基础 数组 数组(Array):相同类型数据的集合。 定义数组   方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数];   比如: int[] a = new int[10];   数组名,也即引用a,指向数组元素的首地址。   方式2(同C语言) type变量名[] = new type[数组中元素的个数];   如: int a[] = new int[10];   方式3 定义时直接初始化 type[] 变量名 = new type[]{逗号分隔的初始化值};   其中红色部分可省略,所以又有两种: int[] a = {1,2,3,4}; int[] a = new int[]{1,2,3,4};   其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。 数组运用基础 数组长度: Java中的每个数组都有一个名为length的属性,表示数组的长度。length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。 equals()  数组内容的比较可以使用equals()方法吗? 如下程序:   复制代码

python中mat()函数的使用

瘦欲@ 提交于 2019-12-19 15:09:26
随机生成的数组与使用mat函数之后的类型是发生了变化的,尽管他们显示的东西没有什么区别,但是实质上,他们的类型是不同的。用mat函数转换为矩阵之后可以才进行一些线性代数的操作。 # -*- coding: utf-8 -*- # @Time : 2019/12/19 12:54 # @Author : Zhanghui import numpy as np MAXNUM = 10 #设置矩阵元素的最大值 MINNUM = 0 #设置矩阵元素的最小值 ROW = 2 #设置矩阵的行数 COL = 3 #设置矩阵的列数 randomMatrix = np . random . randint ( MINNUM , MAXNUM , ( ROW , COL ) ) print ( randomMatrix ) print ( type ( randomMatrix ) ) y = np . mat ( randomMatrix ) print ( type ( y ) ) print ( y ) [ [ 1 2 4 ] [ 0 2 1 ] ] < class 'numpy.ndarray' > < class 'numpy.matrix' > [ [ 1 2 4 ] [ 0 2 1 ] ] 来源: CSDN 作者: 鱼速 链接: https://blog.csdn.net/weixin

稀疏数组

╄→尐↘猪︶ㄣ 提交于 2019-12-19 13:51:18
概述   稀疏数组是指那些零元个数远大于非零元个数的数组,而稀疏数组的零元分布往往没有规律可循。最经典的例子就是棋盘,在保存棋局时,棋盘上棋子的数目往往不会布满整个棋盘。以中国象棋为例,棋盘为10*9,而棋子数为32,而且在走棋过程中还会减少棋子数。所以如果用整个数组来保存棋盘就会花费太多空间。这时就要对稀疏数组进行压缩存储。   压缩存储的处理方法是:   1. 创建一个小规模的二维数组,其列数为3,分别记录行、列、值。   2. 第一行记录原数组的行数、列数,以及非零元个数。   3. 之后每一行记录每一个非零元在原数组中的行位标、列位标和值。   以这个棋盘为例:      用两位数表示一个棋子:   1. 个位数:1表示兵、卒;2表示炮、砲;3表示车;4表示马;5表示相、象;6表示仕、士;7表示帅、将。   2. 十位数:1表示红方;2表示黑方。   比如,黑方用2表示,将用7表示,所以黑方的将用27表示;红方用1表示,兵用1表示,所以红方的兵用11表示。   用一个10*9的二维数组存储棋盘,则这个棋盘可以表示为:      即二维数组board中,board[1][3]=27,board[1][4]=26,board[1][5]=11,board[2][2]=11,board[2][5]=26,board[8][4]=17。   对该二维数组进行压缩:   1.

LeetCode 5282. 转化为全零矩阵的最少反转次数 bfs 双向bfs

a 夏天 提交于 2019-12-19 05:01:06
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述 给你一个 m x n 的二进制矩阵 mat。 每一步,你可以选择一个单元格并将它反转(反转表示 0 变 1 ,1 变 0 )。如果存在和它相邻的单元格,那么这些相邻的单元格也会被反转。(注:相邻的两个单元格共享同一条边。) 请你返回将矩阵 mat 转化为全零矩阵的最少反转次数,如果无法转化为全零矩阵,请返回 -1 。 二进制矩阵的每一个格子要么是 0 要么是 1 。 全零矩阵是所有格子都为 0 的矩阵。 示例 1: 输入:mat = [[0,0],[0,1]] 输出:3 解释:一个可能的解是反转 (1, 0),然后 (0, 1) ,最后是 (1, 1) 。 示例 2: 输入:mat = [[0]] 输出:0 解释:给出的矩阵是全零矩阵,所以你不需要改变它。 示例 3: 输入:mat = [[1,1,1],[1,0,1],[0,0,0]] 输出:6 示例 4: 输入:mat = [[1,0,0],[1,0,0]] 输出:-1 解释:该矩阵无法转变成全零矩阵 提示: m == mat.length n == mat[0].length 1 <= m <= 3 1 <= n <= 3 mat[i][j] 是 0 或 1 。 算法1 本题同acwing 95.