对角线

Matlab(9)——矩阵变换

巧了我就是萌 提交于 2020-03-17 03:42:54
Matlab(9)——矩阵变换 文章目录 Matlab(9)——矩阵变换 一、对角阵 1.提取矩阵对角线上的元素 2.构造对角矩阵 3.应用 二、三角阵 1.上三角矩阵 2.下三角矩阵 三、矩阵的转置 四、矩阵的旋转 五、矩阵的翻转 六、矩阵的逆矩阵 一、对角阵 1.提取矩阵对角线上的元素 diag(A):提取矩阵A对角线上的元素,形成一个列向量 diag(A,k): 提取A 的第 k 条对角线上元素的列向量。k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。 2.构造对角矩阵 diag(v) :以向量v为主对角线元素建立对角矩阵 D = diag(v,k) :将向量 v 的元素放置在第 k 条对角线上。k=0 表示主对角线,k>0位于主对角线上方,k<0 位于主对角线下方。 3.应用 现有一n阶方阵A (1)要将A第一行元素乘r1,第二行元素乘r2,…,第n行元素乘以rn 可以建立对角矩阵:B=diag(r1,r2,…rn),再B*A (2)要将A第一列元素乘c1,第二行元素乘c2,…,第n行元素乘以cn 可以建立对角矩阵:B=diag(c1,c2,…cn),再A*B 二、三角阵 1.上三角矩阵 triu(A):返回矩阵 A 的上三角部分。 triu(A,k):返回位于 A 的第 k 条对角线上以及该对角线上方的元素。(k可以为负) 2.下三角矩阵

矩阵操作(数据,数组向量,表格)

余生颓废 提交于 2020-03-11 10:07:15
一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; A=[1 2 3 4 5; 12 12 14 56 657; 23 46 34 67 56 ]; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 linspace(1,5,8) ans = 1 至 5 列 1.0000 1.5714 2.1429 2.7143 3.2857 6 至 8 列 3.8571 4.4286 5.0000 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand(

八皇后问题(dfs)

与世无争的帅哥 提交于 2020-03-08 02:43:25
八皇后问题,是一个古老而著名的问题,是搜索算法的经典案例。该问题是国际西洋棋棋手马克思贝瑟尔于1848年提出:在8*8格的国际象棋上摆放八个皇后。使其不能相互攻击,即任意两个皇后都不能处于同一行、同一列或者同一斜线,问有多少中摆法。 分析:用dfs一行一行得进行摆放,用for循环来确定每一列,由于是一行一行得摆放所以不可能同行,我们只需要标记同列,同对角线,就行,会发现主对角线一条对角线上的行列和等于同一个常数,副对角线一条对角线行列差等于一个常数,只不过会是负数,防止下标是负数我们可以进行+8,保证是一个正数,利用这个性质来确定有没有同行同列 # include <iostream> using namespace std ; bool v [ 10 ] , tx [ 20 ] , ty [ 20 ] ; //表示这一列,主对角线,负对角线有没有皇后 int cnt = 0 ; bool check ( int x , int y ) { return ! v [ y ] && ! tx [ x + y ] && ! ty [ x - y + 8 ] ; //+8防止产生负数 void dfs ( int x ) { if ( x == 8 ) { //找到了一种摆法 cnt ++ ; return ; } for ( int i = 0 ; i < 8 ; i ++ ) {

【java】矩阵对角线求和

拈花ヽ惹草 提交于 2020-03-07 21:58:04
矩阵对角线求和 题目描述 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7 import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { Scanner input = new Scanner ( System . in ) ; int [ ] [ ] a = new int [ 3 ] [ 3 ] ; int i , j ; for ( i = 0 ; i < 3 ; i ++ ) { for ( j = 0 ; j < 3 ; j ++ ) { a [ i ] [ j ] = input . nextInt ( ) ; } } int sum1 = 0 , sum2 = 0 ; for ( i = 0 ; i < 3 ; i ++ ) { sum1 += a [ i ] [ i ] ; sum2 += a [ i ] [ 2 - i ] ; } System . out . println ( sum1 + " " + sum2 ) ; } } 来源: CSDN 作者: weixin_46014378 链接: https://blog.csdn.net

Leetcode初学——N皇后

荒凉一梦 提交于 2020-02-07 00:45:58
题目: 分析: N皇后问题的本质是什么? 已占用的格子的行、列、对角线上都不能有棋子存在 每个格子之间的关系如下 行和列不重复是容易判断的,那么两个对角线该怎么判断呢? 蓝色的对角线上的格子有一个关系 : 行数+列数=常数 红色对角线上的格子也有一个关系 :行数-列数=常数 并且每个常数都不相同 对4皇后问题的一种解法作图: 上图可以较清楚的展示各个棋子之间的关系 那么这道题该怎么写呢? 我使用的是回溯法,以递归的形式,对每一个可能可以的格子进行遍历 代码: class Solution { private List<List<Integer>> list=new ArrayList<List<Integer>>(); public List<List<String>> solveNQueens(int n) { StringBuilder strs=new StringBuilder(); List<List<String>> res=new ArrayList<List<String>>(); for(int i=0;i<n;i++){ strs.append('.'); } String str=strs.toString(); HelpToSolveNQueens(n,new ArrayList<Integer>(),new ArrayList<Integer>(),new

matlab考试重点详解

谁说我不能喝 提交于 2020-02-06 09:56:22
  此帖是根据期末考试复习重点补充完成, 由于使用word编辑引用图片和链接略有不便, 所以开此贴供复习及学习使用。侵删 复习要点 第一章 Matlab的基本概念,名称的来源,基本功能,帮助的使用方法 1.基本概念和名称来源: MATLAB [1] 是美国 MathWorks 公司出品的商业 数学软件 , 用于算法开发、数据可视化、数据分析以及 数值计算 的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的 组合 ,意为矩阵工厂(矩阵实验室) 2.基本功能:   2.1数值计算和符号计算功能   MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。   2.2绘图功能,matlab提供了两个层次的绘图操作。一种是对图形句柄,进行底层绘图操作。另一种是建立在低层绘图操作之上的高层绘图操作。   2.3编程语言   MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高   2.4MATLAB工具箱   MATLAB包含两部分内容:基本部分和各种可选的工具箱。   MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 3.帮助的使用方法   3.1 帮助命令   MATLAB帮助命令包括help命令和lookfor命令。

八皇后问题递归回溯法

穿精又带淫゛_ 提交于 2020-02-06 02:53:03
写在前面:最开始接触是数据结构老师在提到过,后来在学python时老师也有提到过,出于好奇就去思考了这个问题,当然,小白的我还是在B站懒猫老师的帮助下学会啦,真棒哈哈哈哈哈哈 这里主要问题是在于判断对角线上是否能放,表示上对角线d1[],表示下对角线d2[],根据老师所说加上自己的理解,同一个下对角线上 n-col+7相同(n表示行,col表示列) 同理,上对角线上n+col 相同 由以上可得判断的标准为(flag[col]&&d1[n-col+7]&&d2[n+col]==ture),只要符合这个就能判断是否能放入棋子 place[n]=col;//摆放皇后 flag[col]=false;//宣布占领第col列 d1[n-col+7]=false;//占领上对角线 d2[n+col]=false;//占领下对角线 #include<stdio.h> #include <stdbool.h> int place[8]={0}; //第n个皇后所占位置的列号 bool flag[8]={1,1,1,1,1,1,1,1}; //标志数组,表示第col列是否可占,1表示不冲突 bool d1[15]={1,1,1,1.1,1.1,1,1,1,1,1,1,1,1}; bool d2[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //表示下对角线是否可占 int

三、将矩阵按对角线排序(Biweekly18)

巧了我就是萌 提交于 2020-02-05 06:07:40
题目描述: 给你一个 m * n 的整数矩阵 mat ,请你将同一条对角线上的元素(从左上到右下)按升序排序后,返回排好序的矩阵。 示例 1: 输入:mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]] 输出:[[1,1,1,1],[1,2,2,2],[1,2,3,3]] 提示: m == mat.length n == mat[i].length 1 <= m, n <= 100 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sort-the-matrix-diagonally 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 硬方法: class Solution { public int[][] diagonalSort(int[][] mat) { for (int i = 0; i < mat.length; i++) { get(mat, i, 0); } for (int i = 0; i < mat[0].length; i++) { get(mat, 0, i); } return mat; } public void get(int[][] mat, int i, int j) { int row = mat.length; int col = mat[0]

朝花夕拾之Matlab矩阵运算

不羁岁月 提交于 2020-01-29 15:21:44
矩阵运算 1. 加、减运算 运算符:“+”和“-”分别为加、减运算符。 运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B 结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B= -7 0 -5 -2 -3 -4 -3 -6 4 2. 乘法 运算符:* 运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y 结果显示为: Z= 8 5 6 3 3 3 2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2 向量的点乘(内积):维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3 .向量点积 函数 dot 格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C = dot(A,B,dim) %在dim维数中给出A与B的点积