矩阵对角线规则
篇一:矩阵及其基本运算
第1章 矩阵及其基本运算
第1章 矩阵及其基本运算
MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。
1.1 矩阵的表示
1.1.1 数值矩阵的生成
1.实数值矩阵输入
MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。
不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如:
>> Time = [11 12 1 2 3 4 5 6 7 8 9 10]
Time =
11 12 1 2 3 4 5 6 7 8 9 10
>> X_Data = [2.32 3.43;4.37 5.98]
X_Data =
2.43 3.43
4.37 5.98
>> vect_a = [1 2 3 4 5]
vect_a =
1 2 3 4 5
>> Matrix_B = [1 2 3;
>> 2 3 4;3 4 5]
Matrix_B = 1 2 3
2 3 4
3 4 5
>> Null_M = [ ] %生成一个空矩阵
2.复数矩阵输入
复数矩阵有两种生成方式:
第一种方式
例1-1
>> a=2.7;b=13/25;
>> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1]
C=
1.0000 5.4000 + 0.5200i0.8544
0.7071 5.3000 4.5000
第1章 矩阵及其基本运算
第2种方式
例1-2
>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16]
R =
1 2 3
4 5 6
M =
11 12 13
14 15 16
>> CN=R+i*M
CN =
1.0000 +11.0000i2.0000 +12.0000i3.0000 +13.0000i
4.0000 +14.0000i5.0000 +15.0000i6.0000 +16.0000i
1.1.2 符号矩阵的生成
在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。
1.用命令sym定义矩阵:
这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例:
例1-3
>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!],')
sym_matrix =
[ab c]
[JackHelp Me!NO WAY!]
>> sym_digits = sym('[1 2 3;a b c;sin(x)cos(y)tan(z)]')
sym_digits =
[1 2 3]
[a b c]
[sin(x)cos(y)tan(z)]
2.用命令syms定义矩阵
先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。 例1-4
>> syms a b c ;
>> M1 = sym('Classical');
>> M2 = sym(' Jazz');
>> M3 = sym('Blues')
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =
[ab c]
[Classical Jazz Blues]
[23 5]
把数值矩阵转化成相应的符号矩阵。
数值型和符号型在MATLAB中是不相同的,它们之间不能直接进行转化。MATLAB提供了一个将数值型转化成符号型的命令,即sym。
第1章 矩阵及其基本运算
例1-5
>> Digit_Matrix = [1/3 sqrt(2) 3.4234;exp(0.23) log(29) 23^(-11.23)]
>> Syms_Matrix = sym(Digit_Matrix)
结果是:
Digit_Matrix =
0.3333 1.4142 3.4234
1.2586 3.3673 0.0000
Syms_Matrix =
[1/3, sqrt(2), 17117/5000]
[5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)] 注意:矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。
1.1.3 大矩阵的生成
对于大型矩阵,一般创建M文件,以便于修改:
例1-6 用M文件创建大矩阵,文件名为example.m
exm=[ 456 468873 2 57955
21 68754488 813
65456788 9821 5
456 68 4589 654 5 987
548810 9 6 33 77]
在MATLAB窗口输入:
>>example;
>>size(exm)%显示exm的大小
ans=
5 6%表示exm有5行6列。
1.1.4 多维数组的创建
函数 cat
格式 A=cat(n,A1,A2,?,Am)
说明 n=1和n=2时分别构造[A1;A2]和[A1,A2],都是二维数组,而n=3时可以构造出三维数组。
例1-7
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A4=cat(3,A1,A2,A3)
A4(:,:,1) =
1 2 3
4 5 6
7 8 9
A4(:,:,2) =
1 4 7
2 5 8
3 6 9
A4(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
第1章 矩阵及其基本运算
或用另一种原始方式可以定义:
例1-8
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3
A5(:,:,1) =
1 2 3
4 5 6
7 8 9
A5(:,:,2) =
1 4 7
2 5 8
3 6 9
A5(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
1.1.5 特殊矩阵的生成
命令 全零阵
函数 zeros
格式 B = zeros(n)%生成n×n全零阵
B = zeros(m,n) %生成m×n全零阵
B = zeros([m n]) %生成m×n全零阵
B = zeros(d1,d2,d3?) %生成d1×d2×d3×?全零阵或数组
B = zeros([d1 d2 d3?])%生成d1×d2×d3×?全零阵或数组
B = zeros(size(A)) %生成与矩阵A相同大小的全零阵
命令 单位阵
函数 eye
格式 Y = eye(n) %生成n×n单位阵
Y = eye(m,n) %生成m×n单位阵
Y = eye(size(A)) %生成与矩阵A相同大小的单位阵
命令 全1阵
函数 ones
格式 Y = ones(n) %生成n×n全1阵
Y = ones(m,n) %生成m×n全1阵
Y = ones([m n]) %生成m×n全1阵
Y = ones(d1,d2,d3?)%生成d1×d2×d3×?全1阵或数组
Y = ones([d1 d2 d3?]) %生成d1×d2×d3×?全1阵或数组
Y = ones(size(A))%生成与矩阵A相同大小的全1阵
命令 均匀分布随机矩阵
函数 rand
格式 Y = rand(n) %生成n×n随机矩阵,其元素在(0,1)内
Y = rand(m,n) %生成m×n随机矩阵
第1章 矩阵及其基本运算
Y = rand([m n]) %生成m×n随机矩阵
Y = rand(m,n,p,?) %生成m×n×p×?随机矩阵或数组
Y = rand([m n p?]) %生成m×n×p×?随机矩阵或数组
Y = rand(size(A))%生成与矩阵A相同大小的随机矩阵
rand %无变量输入时只产生一个随机数
s = rand('state')%产生包括均匀发生器当前状态的35个元素的向量 rand('state', s)%使状态重置为s
rand('state', 0)%重置发生器到初始状态
rand('state', j) %对整数j重置发生器到第j个状态 rand('state', sum (100*clock))%每次重置到不同状态
例1-9 产生一个334随机矩阵
>> R=rand(3,4)
R =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
例1-10 产生一个在区间[10, 20]内均匀分布的4阶随机矩阵
>> a=10;b=20;
>> x=a+(b-a)*rand(4)
x =
19.218119.354710.578911.3889
17.382119.169013.528712.0277
11.762714.102718.131711.9872
14.057118.936510.098616.0379
命令 正态分布随机矩阵
函数 randn
格式 Y = randn(n) %生成n×n正态分布随机矩阵
Y = randn(m,n)%生成m×n正态分布随机矩阵
Y = randn([m n]) %生成m×n正态分布随机矩阵
Y = randn(m,n,p,?) %生成m×n×p×?正态分布随机矩阵或数组
Y = randn([m n p?]) %生成m×n×p×?正态分布随机矩阵或数组 Y = randn(size(A))%生成与矩阵A相同大小的正态分布随机矩阵 randn %无变量输入时只产生一个正态分布随机数
s = randn('state') %产生包括正态发生器当前状态的2个元素的向量 s = randn('state', s)%重置状态为s
s = randn('state', 0)%重置发生器为初始状态
s = randn('state', j) %对于整数j重置状态到第j状态
s = randn('state', sum(100*clock)) %每次重置到不同状态
例1-11 产生均值为0.6,方差为0.1的4阶矩阵
>> mu=0.6; sigma=0.1;
>> x=mu+sqrt(sigma)*randn(4)
x =
0.8311 0.7799 0.1335 1.0565
0.7827 0.5192 0.5260 0.4890
篇二:矩阵及其运算
第二讲
教学目的:让学生掌握矩阵及其运算、符号运算。
教学内容:矩阵及其运算、符号运算。
教学方法:讲解法。
讲授正文:
1.4 矩阵及其运算
矩阵是Matlab数据存储的基本单元,而矩阵的运算是Matlab语言的核心,在Matlab语言系统中几乎一切运算均是以对矩阵的操作为基础的。只有一行的矩阵又称为数组,但在Matlab中数组没有行与列的概念,其运算多为元素间的运算,这点与矩阵有不同之处,因此以下分别介绍数组与矩阵。
1.4.1数组的输入与运算
1.数组的输入
创建简单数组的方法见表1-9。
表1-9 创建简单数组的方法
例如:
>>b=[1,3,5,7,9,11] %元素之间要用逗号或空格分开
b =
1 3 5 7 9 11
>>c=1:2:11
c=
1 3 5 7 9 11
>>d=linspace(1,11 ,6)
d=
1 3 5 7 9 11
2.数组元素的访问
访问一个元素:x(i)表示访问数组x的第i个元素.
访问一块元素:x(s:h:t)表示访问数组x的从第s个元素开始,以步长为h到第t个元素(但不超过t),h可以为负数,h缺损时为1.
直接使用元素编址序号:x([a,b,c,d])表示提取数组x的第a、b、c、d个元素构成一个新的数组[x(a) x(b) x(c) x(d)].
3.标量与数组的运算
标量与数组的加、减、乘、除、乘方运算是数组的每个元素与该标量施加相应的加、减、乘、除、乘方运算,见表1-10。
表1-10 标量与数组的运算
其中a=[a1,a2,?,an]是数组,c为标量。
4.数组与数组的运算
数组与数组的运算要求数组维数是相同的,其加、减、乘、除、幂运算可按元素对元素方式进行,不同维数的数组不能进行运算,见表1-11。
见表1-11 数组与数组的运算
其中a=[a1,a2,?,an], b=[b1,b2,?,bn]。
注意:数组的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符只能为“.*”和“./”或“.\”,而表达式a*b、a/b、a^b是没有意义的!
1.4.2矩阵的输入与运算
1.矩阵的输入
(1)直接输入法。最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号或回车键分隔。输入矩阵时,严格要求所有行有相同的列。例如
>>A=[2,3,5;1,3,5;6,9,4] %行之间用分号隔开
A=
235
135
694
(2)外部文件读入法。Matlab语言允许用户调用在Matlab环境之外定义的矩阵。可以
利用任意的文本编辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。读入矩阵的一种方法可参考3.3节数据交换系统。另外也可以利用load函数,其调用方法为:Load+文件名[参数]
例如:事先在记事本中建立文件:data1.txt
1 1 1
1 2 3
1 3 6
在Matlab命令窗口中输入:
>> load data1.txt
>> data1
data1=
1 1 1
1 2 3
1 3 6
Load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat文件为操作对象,如果该文件在Matlab搜索路径中不存在时,系统将会报错。
2.特殊矩阵的建立
对于一些比较特殊的矩阵(单位阵、矩阵中含1或0较多),由于其具有特殊的结构,MATLAB提供了一些函数用于生成这些矩阵。见表1-12。
表1-12
3.矩阵中元素或块的操作
对矩阵中元素或块的常用操作,见表1-13。
表1-13 矩阵中元素或块的常用操作
例如:
A=[1,2,3;4,5,6;7,8,9]
篇三:矩(来自:WWw.cssyq.Com 书业网:矩阵对角线规则)阵大全
变量与赋值
1.变量命名
在MATLAB 6.5中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。在MATLAB中,变量名区分字母的大小写。
2.赋值语句
(1) 变量=表达式
(2) 表达式
其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。
例2-1 计算表达式的值,并显示计算结果。
在MATLAB命令窗口输入命令:
x=1+2i;
y=3-sqrt(17);
z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))
其中pi和i都是MATLAB预先定义的变量,分别代表代表圆周率π和虚数单位。
输出结果是:
z = -0.3488 + 0.3286i
2.1.2 预定义变量
在MATLAB工作空间中,还驻留几个由系统本身定义的变量。例如,用pi表示圆周率π的近似值,用i,j表示虚数单位。 预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。
2.1.3 内存变量的管理
1.内存变量的删除与修改
MATLAB工作空间窗口专门用于内存变量的管理。在工作空间窗口中可以显示所有内存变量的属性。当选中某些变量后,再单击Delete按钮,就能删除这些变量。当选中某些变量后,再单击Open按钮,将进入变量编辑器。通过变量编辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。
clear命令用于删除MATLAB工作空间中的变量。who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。who命令只显示出驻留变量的名称,whos在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。
2.内存变量文件
利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长
久地保留下来,扩展名是.mat。MAT文件的生成和装入由save和load命令来完成。常用格式为:
save 文件名 [变量名表] [-append][-ascii]
load 文件名 [变量名表] [-ascii]
其中,文件名可以带路径,但不需带扩展名.mat,命令隐含一定对.mat文件进行操作。变量名表中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格分隔。当变量名表省略时,保存或装入全部变量。-ascii选项使文件以ASCII格式处理,省略该选项时文件将以二进制格式处理。save命令中的-append选项控制将变量追加到MAT文件中。
2.1.4 MATLAB常用数学函数
MATLAB提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。
函数使用说明:
(1) 三角函数以弧度为单位计算。
(2) abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。
(3) 用于取整的函数有fix、floor、ceil、round,要注意它们的区别。
(4) rem与mod函数的区别。rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。
2.1.5 数据的输出格式
MATLAB用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法。
在一般情况下,MATLAB内部每一个数据元素都是用双精度数来表示和存储的。数据输出时用户可以用format命令设置或改变数据输出格式。format命令的格式为:
format 格式符
其中格式符决定数据的输出格式
2.2 MATLAB矩阵
2.2.1 矩阵的建立
1.直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
2.利用M文件建立矩阵
对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。下面通过一个简单例子来说明如何利用M文件创建矩阵。
例2-2 利用M文件建立MYMAT矩阵。
(1) 启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:
(2) 把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。
(3) 在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。
3.利用冒号表达式建立一个向量
冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3
其中e1为初始值,e2为步长,e3为终止值。
在MATLAB中,还可以用linspace函数产生行向量。其调用格式为:
linspace(a,b,n)
其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。
4.建立大矩阵
大矩阵可由方括号中的小矩阵或向量建立起来。
2.2.2 矩阵的拆分
篇四:矩阵文档
成都信息工程学院
课程设计
题目:魔方矩阵
作者姓名:
班级: 学号: 指导教师: 日期: 年月 日
作者签名
摘要
我的实践题目是对C语言程序设计——魔方矩阵,主要的要求:采用菜单形式,至少包含输入矩阵、保存矩阵、载入矩阵、退出;输入整数N,输出N*N的二阶矩阵;每一行,每一列以及两条对角线之和相等;程序中应能判断N的合法性及合理性;
N最大值不得小于20;并指定行的排序,排序方法不限,排序后且能按排序后的结果保存到文件中,并且能够下一次载入;每次输出一个矩阵,同时在下面输出素数、水仙花数。此次的系统我还添加了一个注册模块。
本实践能够充分的考核我们对C语言的熟悉度以及实践能力,对我们更多学习与了解C语言有极大的帮助,因此这次实践是十分有必要的。
我的设计内容就是利用if条件语句、for循环语句以及条件判断语句等函数及指针的合理使用,通过不断的运行,调试,输出,对本程序进行合理的解决,对魔方矩阵,文件,素数,水仙花数的算法进一步的了解掌握。
关键字:C语言 for循环 if条件 魔方矩阵 素数 水仙花数
目录
1引 言 ......................................................................................... 3
1.1课题背景............................................................................................................................. 3
1.2本课题的主要工作 ............................................................................................................. 4
2魔方矩阵系统需求分析及开发工具 ...................................... 4
2.1系统应具备的基本功能 ..................................................................................................... 4
2.2开发环境及工具 ................................................................................................................. 5
2.2.1 运行环境 ............................................................................................................... 5
2.2.2 c语言简介 ............................................................................................................ 5
2.2.3 for循环语句介绍 ................................................................................................. 5
2.2.4 if条件语句介绍 ................................................................................................... 6
3系统总体结构设计 .................................................................. 6
3.1 基本简介 .......................................................................................................................... 6
3.2 算法设计 ....................................................................................................................... 6
3.3 系统功能模块设计简介 .................................................................................................. 9
3.3.1 魔方矩阵模块 ............................................................................................................... 9
3.3.2文件的读与写 ................................................................................................................ 15
4系统测试与分析 .................................................................... 17
4.1
4.2 测试 ............................................................................................................................. 17 测试过程中遇到的问题 ............................................................................................. 17
5 结论 ...................................................................................... 18 6 参考文献 ......................................................................... 18
1引 言
1.1课题背景 魔方又称幻方、纵横图、九宫图,最早记录于我国古代的洛书。据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服。后人称之为"洛书"或"河图",又叫河洛图。
N 为奇数时
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样减1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,
则把下一个数放在上一个数的下面。
N为4的倍数时
采用对称元素交换法。
首先把数1到n×n按从上至下,从左到右顺序填入矩阵
然后将方阵的所有4×4子方阵中的两对角线上的数关于大方阵中心作中心对称交换(注意是各各子矩阵对角线上面的数), 即a(i,j)与a(n+1-i,n+1-j)交换,所有其它位置上的数不变。(或者将对角线不变,其它位置对称交换也可)
N 为其它偶数时 当n为非4倍数的偶数(即4n+2形)时:首先把大方阵分解为4个奇数(2m+1阶)子方阵。 按上述奇数阶魔方给分解的4个子方阵对应赋值
上左子阵最小(i),下右子阵次小(i+v),下左子阵最大(i+3v),上右子阵次大(i+2v) 即4个子方阵对应元素相差v,其中v=n*n/4
1.2本课题的主要工作
采用菜单形式,至少包含输入矩阵、保存矩阵、载入矩阵、退出;输入整数N,输出N*N的二阶矩阵;每一行,每一列以及两条对角线之和相等;程序中应能判断N的合法性及合理性;N最大值不得小于20;并指定行的排序,排序方法不限,排序后且能按排序后的结果保存到文件中,并且能够下一次载入;每次输出一个矩阵,同时在下面输出素数、水仙花数。
2魔方矩阵系统需求分析及开发工具
2.1系统应具备的基本功能
实现每一行,每一列以及对角线的相加结果相同,并指定行的排序,排序方法不限,排序后且能按排序后的结果保存到文件中,并且能够下一次载入,每次