科学计算和matlib学习笔记
专题一 matlab基础知识
1.1 概念
科学计算:利用计算机处理数值问题的方法
科学计算方法既有数学理论上的抽象性和严谨性,又有程序设计技术上的实用性和实验性。
由于计算机对数值计算的推动和影响,科学计算已成为继科学实验和理论研究之后的科学研究的第三种方法
基本步骤:数值问题–>求解算法–>程序实现–>结果分析
Matlab优势:
1、不需要过多了解各种数值计算方法的具体细节和计算公式,也不需要繁琐的底层编程。
2、可以专注于实际问题的分析和设计,大大地提高工作效率和质量,为科学研究与工程应用提供重要手段
matlab主要功能:
数值计算、符号计算、图形绘制、程序流程控制、工具箱
1.2 Matlab系统环境
可以使用 cd 文件夹地址(已经创建)来设置当前文件夹
搜索路径:变量-内部函数-程序文件(先当前文件夹,再文件搜索路径文件夹中)
path(path,路径)设置文件搜索路径
1.3 matlab数值数据
1、数据类型分类:
class() :返回对象的数据类型
整型:
无符号:8,16,32,64位 int8…
有符号:8,16,32,64位 uint8…
浮点型:
single:将其他类型的数据转换为单精度型。
double:将其他类型的数据转换为双精度型(默认)
复型:
a+bi或a+bj
real():求实部
imag():求虚部
2、输出格式:
format 格式符 只影响数据的输出格式,不影响数据的存储位置和计算
eg: format long
3、常用数学函数:
调用格式:函数名(函数自变量的值)
sin(弧度) sind(角度)
abs() 求实数的绝对值、复数的模、字符串的ASCII值
取整:
fix() 区靠近0的那个数
ceil() 向上取整
floor() 向下取整
round() 四舍五入
isprime() 判断是不是素数
求[1,100]之间的所有素数
x=1:100
k=isprime(k)
k1=find(k)
p=x(k1)
1.4 变量及其操作
变量与赋值语句:
matlab变量名是以字母开头,后接字母、数字或下画线的字符序列,最多63个字符。
变量名区分大小写
标准函数名以及命令名一般用小写字母。
赋值:
变量=表达式
表达式 单个表达式赋值给系统默认的变量ans
预定义变量:
ans 默认赋值变量
pi 圆周率
NaN 非数
变量的管理:
变量可以在工作区手动修改,clear清空所有变量
who,whos命令都是显示变量 whos更加详细
用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件。
save:创建内存变量文件
load:装入内存变量文件
1.5 MATLAB矩阵的表示
矩阵的建立:
直接法: A=[1,2,3;4,5,6;7,8,9] 不同行用;分割
已建好的矩阵拼接: C=[A,B;B,A]
复数矩阵:
B=[1,2,3;4,5,6];
C=[6,7,8;9,10,11];
A=B+i*C
冒号表达式:
e1:e2:e3 初始值:步长:终止值
linspace生成线性间距向量:
linspace(a,b,n): a 第一个元素 b最后一个元素 n元素总数
结构矩阵:
由结构数据构成的矩阵就是结构矩阵
结构矩阵元素.成员名=表达式
a(1).x1=10; a(1).x2=‘liu’; a(1).x3=[11,21;34,78];
a(2).x1=12; a(2).x2=‘wang’; a(2).x3=[34,191;27,578];
a(3).x1=14; a(3).x2=‘cai’; a(3).x3=[13,890;67,231];
单元矩阵:
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来。
…是续行符
b= {10,‘liu’,[11,21;34,78];12,‘wang’,[34,191;27,578];…
14,‘cai’,[13,890;67,231]}
b =
[10] ‘liu’ [2x2 double]
[12] ‘wang’ [2x2 double]
[14] ‘cai’ [2x2 double]
1.6 矩阵元素的引用
下标 :
A(3,2)表示A矩阵的第三行第二列的元素
注:如果给出的行下标或列下标大于原来矩阵的行数和列数,
那么MATLAB将自动扩展原来的矩阵,并将扩展后没有赋值的矩阵
元素置为0。
序号:
在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元
素,然后存储第二列元素,…,一直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
序号与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序
号为(j-1)×m+i
两者转换:
sub2ind():下标—>序号
D=sub2ind(S,I,J)
S 行数和列数组成的向量 I 转换矩阵的行下标 J 转换矩阵的列标 D 序号
A=[1:3;4:6]
A =
1 2 3
4 5 6
D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
ind2sub函数:序号—>下标 [I,J]=ind2sub(S,D)
S 行数和列数组成的向量 D 序号 I,J 行下标,列下标
[I,J]=ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
利用冒号表达式获取子矩阵:
A(i,:) 第i行的全部元素
A(:,j) 第j列的全部元素
A(i:i+m,k:k+m) 第i~i+m行内且在第k~k+m列中的所有元素
A(i:i+m,:) 第i~i+m行的全部元素
end运算符:表示某一维的末尾元素下标。
利用空矩阵删除矩阵的元素:
x=[]
改变矩阵的形状:
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重
新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改
变原矩阵元素个数及其存储顺序。
A(😃 :将矩阵A的每一列元素堆叠起来,成为一个列向量。
1.7 matlab基本运算
1、算数运算:+、-、、/(右除)、(左除)
MATLAB的算术运算是在矩阵意义下进行的。
+、-:要求矩阵同型或者标量与矩阵运算
A与B相乘:要求A的列与B的行相同
如果A矩阵是非奇异(可逆)方阵,则B/A等效于Binv(A),A\B等效
于inv(A)B。inv()是矩阵求逆。
乘方运算:A^x,要求A为方阵,x为标量。
点运算符:.、./、.\和.^
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型
2、关系运算:
关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等
于)、==(等于)、~=(不等于)。
成立返回1,不成立为0
3、逻辑运算:
逻辑运算符:&(与)、|(或)和~(非)。
1.8 字符串处理
1、表示:
单引号括起来的字符序列。若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
2、操作:
t=pi;
m=‘[t,sin(t),cos(t)]’;
y=eval(m)
y =
3.1416 0.0000 -1.0000
与数值转换:
abs() double() 字符矩阵–>ASCII数值矩阵
char() ASCII数值矩阵–>字符矩阵
比较:
关系运算符:逐个字符ASCII数值比较
比较函数
strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
strncmp(s1,s2,n):用来比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。
strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0。
strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0
查找与替换:
findstr(s1,s2):返回短字符串在长字符串中的开始位置。
strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3
专题二matlab矩阵处理
2.1 特殊矩阵
1、通用型:
zeros(): 0矩阵
ones():幺矩阵
eye():产生对角线为1的矩阵
rand():产生(0,1)区间均匀分布的随机矩阵
randn():产生均值为0,方差为1的标准正态分布随机矩阵
调用:
zeros(m):产生m×m零矩阵。
zeros(m,n):产生m×n零矩阵。
zeros(size(A)):产生与矩阵A同样大小的零矩阵。
例:首先产生5阶两位随机整数矩阵A,再产生均值为0.6、方差为0.1的5阶
正态分布随机矩阵B,最后验证(A+B)I=IA+BI(I为单位矩阵)。
A=fix(10+(99-10+1)*rand(5));
B=0.6+sqrt(0.1)randn(5);
C=eye(5);
(A+B)C==CA+BC
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
注:fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机整数。
μ+σx:得到均值为μ、方差为σ2的随机数
2、专用矩阵:
魔方矩阵:magic(n)
每行、每列以及主、副对角线上各n个元素之和都相等。
n阶魔方阵每行每列元素的和为(1+2+3+…+ n2)/n=(n+n3)/2
范德蒙矩阵: vander(V)生成以向量V为基础的范得蒙矩阵。
常用在各种通信系统的纠错编码中
希尔伯特矩阵:hilb(n)
希尔伯特矩阵是著名的病态矩阵,即任何一个元素发生较小的变动,整个矩
阵的值和逆矩阵都会发生很大变化。病态程度和矩阵的阶数相关,随着阶数
的增加病态越严重。
伴随矩阵:compan§ p是多项式的系数向量
帕斯卡矩阵:pascal(n)
把二项式系数依次填写在矩阵的左侧对角线上,然后提取左侧的n行n列元素
即为n阶帕斯卡(Pascal)矩阵。
2.2 矩阵变换
1、对角阵:
对角阵:只有对角线上有非零元素的矩阵。
数量矩阵:对角线上的元素相等的对角矩阵。
单位矩阵:对角线上的元素都为1的对角矩阵。
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
注:主对角线向上为第一条,向下为-1条,主对角为0
diag(V):以向量 V为主对角线元素,产生对角矩阵。
diag(V,k):以向量 V为第k条对角线元素,产生对角矩阵
2、三角阵:
上三角
triu(A):提取矩阵A的主对角线及以上的元素。
triu(A,k):提取矩阵A的第k条对角线及以上的元素。
下三角
tril与上三角用法相同
3、矩阵的转置
转置运算符是小数点后面接单引号(.‘)
共轭转置,其运算符是单引号(’)
4、旋转:
rot90(A,k):将矩阵A逆时针方向旋转90º的k倍
5、矩阵的翻转:
fliplr(A):对矩阵A实施左右翻转
flipud(A):对矩阵A实施上下翻转。
6、矩阵求逆:
inv(A):求方阵A的逆矩阵。
2.3 矩阵求值
常用:
det(A):求方阵A所对应的行列式的值。
rank(A):求矩阵A的秩
trace(A):求矩阵A的迹。
向量的范数:norm()
向量1—范数:向量元素的绝对值之和。
向量2—范数:向量元素绝对值的平方和的平方根。
向量∞—范数:所有向量元素绝对值中的最大值
norm(V)或norm(V,2):计算向量V的2—范数。
norm(V,1):计算向量V的1—范数。
norm(V,inf):计算向量V的∞—范数。
矩阵范数:norm()
矩阵A的1—范数:所有矩阵列元素绝对值之和的最大值。
矩阵A的2—范数:A’A矩阵的最大特征值的平方根。
矩阵A的∞—范数:所有矩阵行元素绝对值之和的最大值。
norm与向量相同
矩阵的条件数:cond()
矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积。
条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。
cond(A,1):计算A的1—范数下的条件数。
cond(A)或cond(A,2):计算A的2—范数数下的条件数。
cond(A,inf):计算A的∞—范数下的条件数。
2.4 特征值与特征向量
E=eig(A):求矩阵A的全部特征值,构成向量E。
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X
各列是相应的特征向量。
eigshow命令,可以演示向量x和Ax之间的关系
2.5 稀疏矩阵
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号
注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储
完全存储方式与稀疏存储方式之间的转化:
A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
sparse函数的其他调用格式:
sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀
疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标
spconvert():直接建立稀疏存储矩阵
调用格式为:B=spconvert(A)
其中,A为一个m×3或m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
A(i,1)表示第i个非零元素所在的行。 A(i,2)表示 第i个非零元素所在的列。 A(i,3)表示第i个非零元素值的实部。 A(i,4)表示第i个非零元素值的虚部。
若矩阵的全部元素都是实数,则无须第4列
[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B
及其这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原
带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非
零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
speye(m,n)返回一个m×n的稀疏存储单位矩阵。
专题三matlib程序流程控制
3.1 顺序结构:
脚本文件:可在命令行窗口直接执行的文件,也叫命令文件
函数文件:定义一个函数,不能直接执行,而必须以函数调用的方式来调用它。
edit命令 创建文件
输入:input()
输出:disp()
暂停:pause(s)s是秒数
3.2 选择结构
1、if实现
单分支:
if 条件
语句组
end
当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
双分支:
if 条件
语句组1
else
语句组2
end
多分支:
if 条件1
语句组1
elseif 条件2
语句组2
…
elseif 条件m
语句组m
else
语句组n
end
2、switch实现:
switch 表达式
case 结果表1
语句组1
case 结果表2
语句组2
…
case 结果表m
语句组m
otherwise
语句组n
end
注意:当任意一个分支的语句执行完后,整个
switch语句执行完毕。整个过程只会执行一个
语句组。
switch表达式应该是一个其值可以列举的表达式。 case结果表为switch表达式的取值,当取值有多个时,用单元数据表示。
3.4 循环结构
1、for语句:
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
表达式1:初值
表达式2:步长
表达式3:终值
当向量为空时,循环体一次也不执行。
for语句针对向量的每一个元素执行一次循环体。
一般格式:
for 循环变量=矩阵表达式
循环体语句
end
执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直到各列元素处理完毕循环结束。
2、while语句:
while 条件
循环体语句
end
break语句用来跳出循环体,结束整个循环。
continue语句用来结束本次循环,接着进行下一次是否执行循环的判断。
3.6 函数文件
定义
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
函数文件名通常由函数名再加上扩展名.m组成,函数文件名与函数名也可以不相同。当函数文件名与函数名不相同时,MATLAB将忽略函数名,调用时使用函数文件名。
return语句表示结束函数的执行。通常,在函数文件中也可以不使用return语句,那么被调用函数执行完成后会自动返回。
调用
[输出实参表]=函数名(输入实参表)
匿名函数
函数句柄变量=@(匿名函数输入参数) 匿名函数表达式
3.7 函数参数与变量的作用域
1.函数参数的可调性
nargin 输入实参的个数
nargout 输出实参的个数
2、全局与局部变量
局部变量:在程序中只在特定过程或函数中可以访问的变量。
全局变量 :所有的函数都可以对它进行存取和修改。
全局变量定义:
global 变量名