科学计算和matlab学习笔记

专题一 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等效于B
inv(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+B
C
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 变量名
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值