MATLAB基础教程(B站) 1、MATLAB系统环境
(1)MATLAB(MATrix LABoratory)
雏形:CleveMoler教授为学生编写的用于Linspack和Eispack的接口程序。 首版:DOS版(1.0)
发展:4.0版(具有微机版)、5.0版(系统的编程语言) 最新:R2024a
(2)MATLAB用途:数值和符号计算、绘图、一种语言体系、工具箱(功能性、学科性)
(3)MATLAB安装、启动和设置 MATLAB设置:主要为路径设置 MATLAB设置几个主要函数:
用path显示文件路径、用help查看某个函数作用、用cd返回当前工作目录、用userpath改变MATLAB的打开路径(如userpath(“d/MATLAB/work”))、用pathtool修改MATLAB的搜索路径
2、MATLAB的数据操作及语法 (1)变量和语句: <1>变量命名:
字母开头,包括字母、数字、下划线,区分大小写 不声明、不定义,拿来即用 <2>语句:
回车则表示一句结束,末尾无分号,则输出该语句执行结果,末尾有分号,只执行,不输出
注释以%开头表示
一行写不开,用...续行,否则默认这一行已经完毕 <3>赋值 变量=表达式 表达式
前者将表达式的值赋值给=前面的变量,后者将表达式的值赋值给默认的结果变量ans
(2)变量管理:
<1>工作空间中驻留的变量查看 工作空间窗口显示 命令方式,who、whos <2>清除变量 clear命令 <3>保存数据
save命令:将MATLAB中工作空间中变量保存到
使用语法:save [文件名][变量名][-append][-ascii] (3)数据输出
<1>数据输出格式控制 format函数
只影响数据输出格式,不影响计算和存储
默认输出格式为short格式 (3)MATLAB数据类型
<1>数值型:双精度、单精度、带符号和无符号整型 建立方法:
a=1,建立double型数据a,值为1
b=uint8(a),a转化为uint8类型(无符号整型8位)赋值到b中,执行结果a类型不变
a=uint(a),a转化为uint8类型 a=double(a),a转化为双精度类型
注意:使用class查看某一变量的数据类型 <2>字符串 建立方法:
使用单撇号括起来的字符序列,如str=’This is a string’ 字符串操作:
获取字符ASCII码值:double函数或者abs函数,如double(a)输出字符a的ASCII码
ASCII转化为字符输出:char函数,如char(63)输出ASCII码63代表的字符 执行字符串内容:eval函数,如eval(‘t=1’)将字符串‘t=1’作为MATLAB语句执行,结果为将1赋值给变量t
字符串与数值的互换:str2num函数和num2str函数 <3>结构体 建立方法:
结构体.成员名=表达式 如a.x1=1,a.x2=‘str’,a.x3=[11 12 13],建立了结构体a,成员有三个 结构体操作:
isstruct函数(判断一个变量是否为结构体)、fieldnames函数(返回结构体所有成员)、isfiled函数(判断变量是否为结构体成员名)、rmfield函数(删除结构体成员)、getfield函数(获取某个成员) <4>单元
建立方法:使用{}括起来 a={1,‘str’,{11 12 13 14}}; <5>多维矩阵 <6>稀疏矩阵
3、MATLAB矩阵操作
数据类型在MATLAB中都是以矩阵形式存在,矩阵是MATLAB最基本的数据对象。 (1)矩阵的建立 <1>直接输入法
在命令窗口直接输入矩阵元素 按行输入矩阵元素,同一行元素使用空格或逗号隔开,不同行元素使用分号或者回车作为间隔,如A={1 2 3}或A={1,2,3,4}或A={1 2 3;4 5 6} <2>使用M文件建立矩阵
启动编辑器(输入edit命令,或者使用按钮) 输入待建立矩阵,输入格式要求和直接输入法类似
(2)特殊矩阵建立
<1>使用zeros函数建立0矩阵,如:zeros(3,4)建立3行4列的0矩阵 <2>使用ones函数建立1矩阵,如ones(2,3) (3)冒号表达式建立行向量
语法e1:e2:e3,e1为初始值,e2为步长,e3为终止值,产生行向量,以e1为开始,e3为结束,步长为e2,如A=1:2:5 (4)使用linspace建立行向量
linspace(a,b,n),a和b分别为行向量的第一个和最后一个元素,n为总元素,省略n自动产生100个元素的行向量,如linsapce(1,5,3) (2)矩阵的简单操作 <1>索引矩阵
MATLAB矩阵在存储空间中是按列存放的。
可以使用矩阵元素的行标和列标或者矩阵元素的位置索引来索引矩阵元素 行标和列标共同使用的形式,如A(2,3)
使用序号索引,涉及到MATLAB中矩阵的存储形式,A(5) 序号和下标的转换 <2>重排矩阵
使用reshape函数或:重排矩阵,如:B=reshape(A,9,1)或C=A(:) <3>矩阵转置 B=A’
<4>矩阵拆分
使用冒号表达式拆分矩阵
B=A(1,1:2);表示返回矩阵A第一行中第一列到第二列
C=A(1,1:end-1);表示返回矩阵A第一行中第一列到倒数第一列
D=A([1,2],[1,2]);返回A矩阵中A[1][1]、A[1][2]、A[2][1]、A[2][2] <5>删除矩阵元素 A(2)=[] <6>其他操作
扩展,Q=repmat(A,2,1)复制矩阵
压缩,R=[1 2 3 3 3 4 4],S=unique(R)得到S=[1 2 3 4]
4、MATLAB的矩阵处理 (1)特殊矩阵建立 <1>0矩阵 <2>1矩阵
<3>单位矩阵,使用eye函数,如A=eye(10,10)
<4>随机矩阵,使用rand或randn函数,如A=rand(10,1) 产生从a到b之间均匀分布的随机数A=a+(b-a)*rand 产生均值为u,方差为s的正态分布的随机矩阵 y=u+sqrt(s)*randn <5>魔方矩阵 magic(5)
<6>Hilbert矩阵和Toeplitz矩阵 hilb(4)和toeplitz(1:6)
(2)矩阵和向量运算
MATLAB运算以矩阵为单位,可以实现加法、数乘等运算以及行列式、秩、逆或转置等
A=[1 0 0 0;3 1 0 0;-5 2 1 0; 7 -3 2 1] B=[1 2 3 4; 2 3 4 5;3 4 5 6;4 5 6 7] A+B k*A A’
<1>det函数计算矩阵的行列式,det(A) <2>inv函数计算矩阵的逆矩阵,inv(A)
<3>向量的内积运算:向量a和b的内积为(a,b)=b’*a,或dot(b,a) (3)线性方程组求解
可以使用矩阵求逆的方法求解线性方程组
如:系数矩阵A=[1,2,3;1,4,9;1,8,27],B=[5,-2,6]’,X=inv(A)*B (4)矩阵相似化简和分解 <1>求解Jordan标准型
使用Jordan函数,如A=[1,2,3;1,4,9;1,8,27],jordan(A)得出结果 <2>求解矩阵特征值
使用eig函数,如A=[1,2,i;1,4,9;i,8,27],eig(A)得出特征值 (5)矩阵和向量的范数
范数运算,包括1范数,2范数和无穷范数以及f范数,使用norm函数 Norm(A,1)、norm(A,2)、norm(A,inf)、norm(A,’fro’) (6)矩阵分析 <1>函数矩阵
计算函数矩阵A(x)的一阶和二阶导数,使用diff函数 A=[sin(x) exp(x) 1;cos(x) x*x+1 log(x)]; diff(A)或diff(A,2) <2>矩阵函数
使用funm函数计算矩阵函数 A=[0 1;0 -2];
expA=funm(A,@exp) sinA=funm(A,@sin)
5、MATLAB程序控制结构 (1)M文件
<1>命令文件(脚本文件,Script File),命令文件没有输入,没有返回;可以对工作空间的变量操作,结果返回工作空间;命令文件可以直接运行 <2>函数文件(Function File),函数文件中变量为局部变量,函数执行完毕,变量被清除;函数文件需要调用形式运行(除了特殊的) <3>建立和打开
使用edit函数建立M文件,或File->M File (2)顺序结构
按照代码顺序执行,即顺序结构。 顺序结构中的输入输出
数据输入:input函数,如a=input(‘input a’) 数据显示:disp函数,如disp(‘This is a apple’) 程序暂停:pause函数,如pause(1)暂停1秒 (3)选择结构
包括if分支、switch分支和try分支 <1>if分支:
单分支if语句:如A=input(‘input A’) if A>10 disp(A) end
双分支if语句:如x=input(‘x’); if x>10 y=log(x); else y= cos(x); end 多分支if语句:
如c=input(‘input a character’,’s’);
if c>=’A’&c<=’Z’ disp(char(abs(c)+abs(‘a’)-abs(‘A’))) elseif c>=’a’&c<=’z’ disp(char(abs(c)-abs(‘a’)+abs(‘A’))) end
<2>switch分支
相比与C语言没有break语句,default换成了otherwise price=input(‘input price’); switch fix(price/100) case {0,1} rate=0; case {2,3,4} rate=.03; otherwise rate=.1; end
<3>try分支:
试探性的分支语句,也就是如果这条语句执行有错误,则不执行,或执行其他语句,提高程序的容错率。 try 语句1 catch 语句2 end
(4)循环结构
包括for循环和while循环 <1>for循环 语法:
for循环变量=表达式1:表达式2:表达式3 循环体 end
注意:循环变量自动增加,不能对循环变量赋值,且不要使用i或j作为循环变量。循环执行效率低,所以避免使用多层循环。 如:A=1:100; sumA=0; for k=1:100
sumA=sumA+A(k); end