目录
第一章:MATLAB系统环境
-
最初matlab核心程序是FORTRAN语言编写的
-
matlab特点是:编程效率高
-
在命令行窗口执行命令,不想立即在命令行窗口输出结果,可以加分号
-
matlab主要功能:数值计算,符号计算,绘图功能,程序设计语言功能,工具箱的扩展功能
-
命令行窗口提示用户输入命令的符号是:>>
-
matlab的帮助命令是:lookfor,lookfor-all,help(没有search)
-
matlab功能区提三个选项卡:主页,绘图,应用程序
-
设置matlab搜索路径有两种方法,一是path命令,二是matlab主页选项卡的环境单机设置路径按钮或者命令行窗口执行pathtool命令
-
matlab命令提示符后面输入并执行命令成为MATLAB的交互式命令操作
-
matlab的续航符:...,将下面一行看成这行的逻辑继续
-
注释以%开头
第二章:MATLAB数据及其运算
2.1矩阵建立
直接建立
A=[xxx;xxxx;xxx;xxx;xxx]
利用已有的矩阵建立更大的矩阵
2.2冒号表达式
e1初始值:e2步长:e3终止值
linspace(a,b,n):ab之间产生n个等长
sub2ind(s,i,j),ij是行列下标,s是size(A)。指定的行列转换成序号
[i,j]=ind2ind(s,d):d是序号,序号转换指定的行列
2.3变量及其操作
2.4常用内部函数
2.5matlab运算
点乘/除法,表示单个元素对应相乘。
求余rem(a,b),a除b
2.6字符串
字符串是单引号引起来的,字符数组是双引号
书p40/41
ch='sdasdas' subch=ch(1:5) %取字符串 revch=ch(end:-1:1) %字符串倒排 k=find(ch>'a' && ch<'z'); 找到小写字母的位置 ch(k)=ch(k)-('a'-'A') 转换成大写 length(k) abs和double可以将字符串矩阵转换成ascll矩阵,而char将ascll矩阵转换成字符矩阵 findstr(s1长字符,s2短字符)
第三章:MATLAB矩阵处理
3.1特殊矩阵
zeros
ones
eye 单位矩阵
rand 产生01之间分布的均匀矩阵
randn 产生均值为0,方差为1的正态分布矩阵
3.2矩阵变换
diag
diag提取 对主角线元素(序号为0)
diag(A,1) 序号为1的对角线元素
diag([1,2,-1,4])产生对角线元素即为向量的元素
矩阵的转置
在小数点后加'即.'
旋转
rot90()逆时针旋转
fliplr()矩阵左右翻转
矩阵的逆
加'
第四章:MATLAB程序流程控制
4.2程序控制结构
输入:A=input(提示信息);
打印:disp(A)
暂停:pause(暂停时间)
字符串转数字:str2double(c)
数值矩阵转化单元矩阵:num2cell(5:9)=={5,6,7,8,9}
ifelse
c=input('请输入一个字符:','s'); if c>='A' && c<='Z' disp(lower(c)); elseif c>='a' && c<='z' disp(upper(c)); elseif c>='0' && c<='9' disp(str2double(c)); else disp(c); end
switch
price=input('输入商品价格:'); switch fix(price/100) case {0,1} rate=0; case {2,3,4} rate=3/100; case num2cell(5:9) rate=5/100; otherwise rate=14/100; end price=price*(1-rate);
try-catch
try c=A*C 若执行错误则执行下一句 catch error
for
按列作循环
for k=[1,2,4,6] k end
n=2; for k=1:2:n+8 n=5; k end
向量为空就不执行循环
fix()截尾取整
rem()计算两个数的余数
4.3函数文件
function 输出形参表 = 函数名(输入形参表)
matlab调用使用函数名,忽略文件名
return只代表结束不代表返回
4.4特殊形式的函数
子函数只能由同一文件的函数调用
以字符串形式存在的函数表达式可以通过内联函数inline()转换
匿名函数:函数句柄变量=@(匿名函数输入参数)匿名函数表达式,sqr = @(x) x.^2; a = sqr(5)
第五章:MATLAB绘图
同一个画面上画多个图
5.1二维图形
基本函数
plot(x,y)函数的基本用法:分别以x,y为横纵坐标画图(x,y向量长度相同)
cx=x+y*i;plot(cx)
当x是向量y是矩阵:x必须与y的行数或者列数相同,若等于行数,则以列数作为横纵坐标,反之亦然。
画三个函数:plot(x,sin(x),x,2sin(x),x,3sin(x))
双纵坐标函数:plotyy(x,y1,x,y2)
辅助操作(综合题目-三维不看)
title(图形标题)
xlabel(x轴说明)
ylabel(y轴说明)
text(x, y, 说明)
legend(图例1, 图例2, …)
axis函数 等刻度坐标轴
grid函数 添加网格
box函数 添加边框
plot(x,y1,'k:', x,y2,'b--', x1,y3,'rp')
双输入函数参数(句柄函数):fplot(funx, funy, tlims, 选项)
x=linspace(0,2*pi,100); y=[sin(x); sin(2*x); sin(0.5*x)]; plot(x,y) axis([0 7 -1.2, 1.2]) title('不同频率正弦函数曲线'); xlabel('Variable X'); ylabel('Variable Y'); text(2.5, sin(2.5), 'sin(x)'); text(1.5, sin(2*1.5), 'sin(2x)'); text(5.5, sin(0.5*5.5), 'sin(0.5x)'); legend('sin(x)','sin(2x)','sin(0.5x)') grid on
hold on 图形保持
subplot(m, n, p)窗口分割,m,n表示 分割mxn的窗口,p当前活动区
5.2其他形式的二维图形
条形图 bar “grouped”:簇状分组 “stacked”:堆积分组
直方图 hist函数:绘制直角坐标系下的直方图。
rose函数:绘制极坐标系下的直方图
饼图 pie函数
散点图 nscatter函数:散点图
第六章:MATLAB数据分析和多项式计算
拟合插值各看一个方法,看ppt(背背背案例),比较两者总结不一样的点(应用场景什么的)背下来,数据统计里面怎么求max,min,sub,average,求积,(这些命令怎么使用,传几个参数,穿哪些,有几个,先后顺序)标准相关系数
6.1数据统计分析:
最大最小值
1、向量max():求向量或矩阵的最大/小元素。 y=max(X):若x有复数则取模最大
[y,k]=max(X):y存入最大值,k存入序号
2、矩阵max():
max(A,[],dim):dim取1或者2,1是每一列的最大值,2是每一行的最大值([]这个参数用来占位,表示忽略此参数。)
3、两个向量或者矩阵对应元素的比较
U=MAX(A,B),U与二者同型,结果是对应元素取最大的(A,B也同型)
U=MAX(A,n),结果是A对应元素与n最大值
用什么方法只调用一次max 函数就能求得整个矩阵的最大值?
A = [1 3 5; 7 2 8; 4 6 9]; max_val = max(A(:));
求和求积
sum(X):x为向量,返回各元素之和
sum(A):A是矩阵,返回行向量,是各列的和
sum(A,dim):1为列元素和,2为行元素和
求积用prod函数(乘积:product)
cumprod(X)累乘积
平均值/中值
mean(X):x为向量,计算平均值
mean(A):A是矩阵,返回行向量,是各列的平均值
mean(A,dim):同上
median():计算中值,同mean
分析哪一个更合理:mean对异常值(outliers)非常敏感。即使有少量极端值,也会显著影响均值。 median不如均值易于计算和理解,尤其是对于较大的数据集。
累加累乘
consum(X):x为向量,计算平均值
consum(A):A是矩阵,返回行向量,是各列的累加和向量
consum(A,dim):同上,1是列,2是行
conprod():同上
求1!+2!+...+6! x=conprod(1:6) x=1 2 6 24 120 720 sum(x)
标准差和相关系数
标准差:
std(X):返回向量标准差
std(A):返回矩阵每列标准差
调用方式:std(A,flag,dim),flag取0调用公式一求标准差,1则是公式2。dim还是1求列,2求行。默认flag=0,dim=1
相关系数:
corrcoef(X,Y):求向量相关系数矩阵,求序列X,和Y的相关系数,结果是2x2的矩阵,对角线上是自相关系数矩阵,非对角线是X和Y,和Y和X的相关系数,是相等的。与corrcoef([X,Y])等价
corrcoef(X):求矩阵相关系数,第i行第j列是矩阵X第i列和第j列的相关系数
randn产生的随机数是独立的
cov():产生协方差矩阵与上面类似
排序
sort(A,dim,mode):dim=1按列排,为2按行排序,mode为ascend升序(默认不写),逆序为descend,要加单引号。
6.2多项式计算
多项式系数的量包含0次数项,向量从高到低
多项式四则运算
加减:没有函数,对应相加减
乘:conv(A,B),A,B为系数向量
除法:[q,r]deconv(A,B),q返回A除B的商式,r返回余式
二者互为逆函数,A=B*q+r
多项式导函数
polyder(P):P的导函数
polyder(P,Q):P*Q的导函数
[P,Q]polyder(P,Q):P/Q的导函数,导数分子存p,分母存q
多项式求值
代数多项式求值:
polyval(P,x),x为自变量,P为系数向量
矩阵多项式求值:
polyvalm(P,A),调用相同含义不同,A为方阵
一般情况下,polyval(p, x)
和 polyvalm(p, x)
是不同的,除非 x
是标量或单位矩阵。对于标量,polyval
和 polyvalm
的结果是相同的,而对于矩阵,如果是单位矩阵,它们的结果也会相同。
多项式求根
x=roots(P),p为多项式的系数向量
若已知多项式全部根,可以重新建立起多项式ploy(x)
6.3数据插值
从离散的数据,得到离散以外的数值
一维数据插值
插值函数是一个单变量函数,采用一维插值,插值函数Y1=interp1(X,Y,X1,method),是根据等长的已知向量X,Y,计算函数在X1处的值,超出X的插值点会出现NAN错误
插值方法:
-
linear:线性插值,method不写为默认方法
-
nearest:最近点插值
-
pchip:分段3次埃米尔特插值
-
spline:3次样条插值,专门的函数spline(X,Y,X1)与interp1(X,Y,X1,spline)作用相同
为什么这两种插值方法都用3次多项式而不用更高次的?
保持平滑和稳定
线性插值和最近点插值方法比较简单。n越大误差越小
3次埃尔米特插值和3次样条插值都能保证曲线的光滑性。
二维数据插值
自变量是两个变化时,插值函数Z1=interp2(X,Y,Z,X1,Y1,method),采用二维插值,X,Y,Z可以是矩阵。二维插值不支持pchip方法,其他都一样。同样超出X,Y的插值点会出现NAN错误
interp2(X,Y,Z,X1,Y1,method),在X1,Y1处插值
interp2(X,Y,Z,[X1,X2],Y1,method),在(X1,Y1)(X2,Y1)插值
interp2(X,Y,Z,[X1,X2],[Y1,Y2],method),在(X1,Y1)(X2,Y2)插值
interp2(X,Y,Z,[X1,X2]',[Y1,Y2],method),在(X1,Y1)(X1,Y2)(X2,Y1)(X2,Y2)插值
二维插值时,要注意另一个变量的转置
surf(x,y,z)创建三维曲面图
6.4曲线拟合
与插值类似,但又不同,不完全经过采样点,但希望拟合的函数g(x)靠近采样点。曲线拟合使用最小二乘逼近原理。
实现
进行拟合时,实际是求一个系数向量,系数向量是多项式系数,matlab用polyfit函数求最小二乘拟合多项式的系数,再用ployval()函数按照所得多项式计算给出点上的函数逼近值
P=polyfit(X,Y,m)
[P,S]=polyfit(X,Y,m)
[P,S,mu]=polyfit(X,Y,m)
采样点X和采样点函数值Y生成m次多项式,P是长度m+1向量,为多项式系数,mu(1)是mean()X,mu(2)是std(X)
数据插值和曲线拟合不一样的地方
1、相同点:
①都属于函数逼近方法 ②都能进行数据估算
2、不同点:
①实现方法不同: 数据插值要求逼近函数经过样本点,而曲线拟合不要求逼近函数经过样本点,只要求总体误差最小。 ②结果形式不同: 数据插值往往分段进行逼近,没有统一的逼近函数。曲线拟合用一个函数进行整体逼近,有确定的函数表达式。 ③侧重点不同: 数据插值一般用于样本区间内的插值计算,而曲线拟合不仅可以估算区间内其他点的函数值,还可以预测时序数据的发展趋势,以及从统计数据中总结一般性经验 ④应用场合不同: 如果样本数据为精确数据,适合采用数据插值方法;如果样本数据为统计数据或存在误差,则适合用曲线拟合的方法。
第七章:MATLAB数值微分和积分
差分差商最简单的例子要会,没有大题,有选择填空,看课本知识点
第八章:MATLAB方程数值求解
三种方式(都得背):直接求解(求幂,反除),迭代法(高斯迭代背下来),jacabi迭代背下来,直接迭代(lu分解,qr分解,背一种),最优问题求解(看ppt,相对简单,改一下参数)
8.1线性方程组求解
直接求解法
利用左除运算符求解
即Ax=b,x=A\b(谁在上是被除)
利用矩阵分解:将一个矩阵分解为若干矩阵的乘积
LU分解 :矩阵的LU分解就是将一个n阶矩阵表示为一个下三角矩阵和一个上三角矩阵的 乘积。
[L,U]=lu(x),产生一个上三角U和下三角L,使之满足X=LU
[L,U,P]=lu(x),除了上面还有一个P置换矩阵使得PX=LU
inv()是求逆函数
QR分解
Cholesky分解
迭代求法
迭代法是一种不断用变量的原值推出它的新值的过程,是用计算机解决问 题的一种基本方法。
雅可比(Jacobi)迭代法
公式推导
MATLAB Jacobi迭代法 求解线性方程组_matlab雅可比迭代法解线性方程组-CSDN博客
function [y,n]=jacobi(A,b,x0,ep) D=diag(diag(A)); L=-tril(A,-1); 下三角,-1对角线及其以下的元素 U=-triu(A,1); 上三角 B=D\(L+U); f=D\b; y=B*x0+f; n=1; while norm(y-x0)>=ep x0=y; y=B*x0+f; n=n+1; end
高斯-赛德尔(Gauss-Serdel)迭代法
是上面公式的变化
function [y,n]=gauseidel(A,b,x0,ep) n迭代次数 D=diag(diag(A)); 初始猜测值 x0是迭代算法的起点 L=-tril(A,-1); U=-triu(A,1); B=(D-L)\U; f=(D-L)\b; y=B*x0+f; n=1; while norm(y-x0)>=ep x0=y; y=B*x0+f; n=n+1; end
求线性方程组的通解
8.2非线性方程组数值求解
非线性方程组求解和最优化问题,往往 调用最优化工具箱来解决
单变量非线性方程求解
fzero函数求根
z=fzero(filename,x0)
filename待求根的函数,x0搜索的起点
非线性方程组求解
最优化工具箱提供的函数fsolve
fsolve函数求解非线性方程组的根
X=fsolve(filename,X0,option)
filename待求根的函数,X0求解过程的初值,option优化参数
optimset可以将优化参数都显示出来
改变默认优化参数option=optimset('Display','off')
8.3最优化问题求解
无约束最优化问题求解
[xmin,fmin]=fminbnd(filename,x1,x2,option)
[xmin,fmin]=fminsearch(filename,x0,option)
[xmin,fmin]=fminunc(filename,x0,option)
有约束最优化问题求解
求有约束条件下最小值的函数为: [xmin,fmin]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
其中,xmin、fmin、filename、x0和option的含义与求最小值函数相同。其余参数为约束条件,包括线性不等式约束、线性等式约束、x的下界和上界以及定 义非线性约束的函数。如果某个约束不存在,则用空矩阵来表示。
线性规划问题求解
8.4常微分初值问题的数值求解
书p200
解决刚性问题的有ode15s,ode23s,ode23tb
第九章:MATLAB符号计算(选填)
不考大题,就是基础的知识点
总结:
大题
-
数据,矩阵表示方法,怎么输入输出出来(结合if,else,for循环看一个例子,怎么写),结合字符串去做
-
画图绘图处理(二维的,同一个坐标系同一个布局,画什么样的图形,线条是什么样的)
-
数据分析,统计分析,每一个方法(怎么传递参数,得出结果处理结果,打印结果)
-
多项式考选择填空的,插值拟合分别会考,两者之间的应用场景有什么不一样的地方,做的是不是同一个事情
-
第七章微分积分,差分差商,通过数值的方法进行求导,通过采样得到函数,然后进行求导,傅里叶变化不考
-
第八章线性方程三种方法,直接方法,迭代两个都背下来。无约束的最优化手写敲一下!2和4节选择填空
-
第九章选择填空
1、相同点:
①都属于函数逼近方法 ②都能进行数据估算
2、不同点:
①实现方法不同: 数据插值要求逼近函数经过样本点,而曲线拟合不要求逼近函数经过样本点,只要求总体误差最小。 ②结果形式不同: 数据插值往往分段进行逼近,没有统一的逼近函数。曲线拟合用一个函数进行整体逼近,有确定的函数表达式。 ③侧重点不同: 数据插值一般用于样本区间内的插值计算,而曲线拟合不仅可以估算区间内其他点的函数值,还可以预测时序数据的发展趋势,以及从统计数据中总结一般性经验 ④应用场合不同: 如果样本数据为精确数据,适合采用数据插值方法;如果样本数据为统计数据或存在误差,则适合用曲线拟合的方法。