概述
第一章 Matlab基础知识
!!!一行写一个语序不要标点符号;
一行写n个语序,语序之间加分隔符“,”或者空格;
分号“;”的作用是不显示变量的取值。
1.1 Matlab帮助的使用
help+“空格”+关键字
doc+“空格”+关键字 --以超文本形式的更详细的解释
lookfor+“空格”+关键字 --当想要某种功能但又不知道准确名字的时候使用
1.2 数据的输入
1.2.1 简单矩阵的输入
要直接输入矩阵时,矩阵同一行的元素用空格或逗号隔开;
矩阵行与行之间用分号";"或者回车隔离;
整个矩阵放在“[ ]”里。
注:如果在矩阵后面加了分号";",再按回车则不显示矩阵;需在输入变量名再按回车才显示。
附:whos 作用:显示现在的所有的变量。
1.2.2 特殊变量:(特殊变量也可放在矩阵中作为元素)
ans :用于结果的缺省把变量名--如果数值没有赋给一个具体变量,那么默认赋给ans
pi :圆周率
eps : 浮点相对精度
inf :无穷大 如1/0
NaN :不定量 如0/0
nargin :所有函数的输入变量数目
nargout:所有函数的输出变量数目
realmin :最小可用正实数
realmax:最大可用正实数
1.2.3 特殊向量
- t=[A:B:C] 作用:产生从A到C的行向量,元素之间间隔为B 例如:t=[0:0.1:10] 产生101个行向量 --!!!0和10作为起始点和终点也算
- t=linspace(A,B,C) 作用:产生A与B之间线性均匀分布的C个数(也是行向量) 注:t=linspace(0,100) 等价于t=linspace(0,100,100)
- t=logspace(A,B,C) 作用:产生和之间按照对数距离等间距产生C个数,即log(t)每相邻两数之间间距相等 注:t=logspace(0,100) 等价于t=linspace(0,100,50)
- t=t' 作用: 将矩阵t转置
- size(t) --t为矩阵 作用: 求矩阵的维数(第一元为行数,第二元为列数)
- log(t) --t为矩阵 作用: 将t中的每一个元素取对数
- diff(t) --t为矩阵 《差分》 作用: 将t中每相邻两元素的差值按顺序输出
1.2.3 特殊矩阵
1.2.3.1 单位矩阵
eye(m) 得到一个m阶单位方阵
eye(m,n) 得到一个m*n的矩阵且其中有一个可允许的最大单位矩阵而其余处处为0
eye(size(a)) 得到与矩阵a同样大小的单位矩阵
1.2.3.2 所有元素为1的矩阵
ones(m),ones(size(a)),ones(m,n) 与单位矩阵用法相似
1.2.3.3 所有元素为0的矩阵
zeros(m),zeros(size(a)),zeros(m,n) 与单位矩阵用法相似
1.2.3.4 空矩阵 q=[],矩阵q在工作空间之中,但它的大小为0,通过空矩阵的方法可以删除矩阵的行与列。
例如 t(:,3)=[] 作用为:删除矩阵t的第三列 注:此处的“:”表示所有行。
1.2.3.5 随机数矩阵
rand(m,n) 产生m*n矩阵,其中元素是服从[0,1]上均匀分布的随机数
normrnd(mu,sigma,m,n) 产生m*n矩阵,其中的元素是服从均值为mu,标准差为sigma的正态分布的随机数
exprnd(mu,m,n) 产生m*n矩阵,其中的元素是服从均值为mu的指数分布的随机数
poissrnd(mu,m,n) 产生m*n矩阵,其中的元素是服从均值为mu的泊松分布的随机数
unifrnd(a,b,m,n) 产生m*n矩阵,其中的元素是服从区间[a,b]上均匀分布的随机数。
附:t(:,[end:-1:1]) 作用:将矩阵重新排列,即从右往左排列。
x=t(m,n) 作用:提取t矩阵中m*n的元素。
t(:) 作用:将t展开逐列展开为一个长的列向量。
reshape(a:b:c,[m,n]) 产生一个逐列排布从a到c步长为b的m*n矩阵(步长为1,则b可省)
repmat(t,m,n) 将t矩阵行复制m遍,列复制n遍。
1.2.3.6 随机置换
randperm(n) 产生1到n的一个随机全排列。
perms([1,n]) 产生1到n的所有权排列。
1.3 矩阵运算
注:在Matlab中矩阵是逐列存储的。
1.3.1 区分左除"/"和右除""
例如 a=2/3 值为0.667 b=23 值为1.5
1.3.2 点运算
作用:表示逐个对应元素进行相应的运算。
例如.* 表示逐个对应元素进行相乘。
clc,clear %清屏并清理内存空间
a0=reshape(1:16,[4,4]);a=a0';
b=reshape(11:26,[4,4]);
s1=a*b
%矩阵的乘法
s2=a.*b
%矩阵的点乘
s21=a^2
%A*A--矩阵的乘法
s22=a.^2
%A中的每个元素的平方
s31=sum(a)
%sum默认是列求和,即最后结果为行向量
s32=sum(a,2)%2指的是第二维,即行,即行求和,即最后结果为列向量
1.3.3 如果两个矩阵的类型不相同,也能够相加 --Matlab的广播功能
例如 A=[1 2 3 4 ] B=[1;2;3] 则C=A+B=[2 3 4 5;3 4 5 6;4 5 6 7]
解析:xx=repmat(A,3,1)=[1 2 3 4;1 2 3 4;1 2 3 4]
yy=repmat(B,1,4)=[1 1 1 1;2 2 2 2;3 3 3 3]
zz=xx+yy=[2 3 4 5;3 4 5 6;4 5 6 7]
1.3.4 inv(t) 作用:求t的逆矩阵。
例题01:求逆矩阵
clc,clear
A=[3 0 1;1 1 0;0 1 4]; %第一种方法求逆矩阵
B=A*inv(A-2*eye(3))
clc,clear
A=[3 0 1;1 1 0;0 1 4];
%另一种方法
B=optimvar('B',3,3)
%定义符号对象的优化变量
p=eqnproblem;
%定义方程问题
p.Equations= B*A==2*B+A;%构造方程
s=solve(p)
%返回的是一个结构数组
ss=s.B
%显示B矩阵
例题02:求从“1,2,......,2021”中,数字“9”一共出现了多少次?
附:int2str 作用:把整数变成字符串
num2str 作用:将数字转换成字符数组
cell2mat 作用:将元胞数组转换成基础数据类型的普通数组
x=1:2021
%将所有的数显示出来,等价于x=[1:1:2021]
y=num2str(x);
%将数字数组转变成字符数组
y(isspace(y))=[];
%删除每两个数字的(两个)空格
n=sum(y=='9')
%计算y中9出现的次数
注!!!:每两个数字之间有两个空格!! 即算两个字符的大小。
例题03:找出A中含有无穷的行,并且将含有无穷的行删除。
A=[1 2 inf;1 2 4;6 8 10;2 inf inf] %inf不区分大小写
ind=any(isinf(A),2)
%判断每行是否存在inf;2指的是第二维,即沿着行去判定
A(ind,:)=[]
%删除存在inf的行
1.4 脚本文件和函数
1.4.1 脚本文件
Matlab的m文件分为两种,一种是脚本文件,由一系列的Matlab的命令组成,可以直接运行,上面编写的Matlab程序都是以脚本文件的格式保存的。另一种是函数文件,必须由其他语句或其他m文件调用执行。函数文件具有一定的通用性,并且可以进行递归调用。
在脚本文件中,逗号“,”表示语句之间的分隔符;分号“;”表示表达式的计算结果不输出;注释语句由符号“%”引导,程序运行时该行忽略。
1.4.2 函数
注!!!:函数的文件名要和函数名一样。
函数由function 语句引导,其基本结构为:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
end
函数名的命名规则与变量名的命名规则相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1时,应该用方括号括起来。
附:plot(x,y,'-*r') %画折线图,“-”表示虚线;"r"表示红色;"*"表示符号:且三者没有顺序区别!
新版本Matlab, function可与其调用语句放在同一个文件中。
新版本Matlab,函数一定得加end!!!
function y=fun1(x)
y=x.^2+1
end
clc, clear
x=-5:1:5;
y=fun1(x);
plot(x,y)
%画折线图
或者(将function放在同一个文件里)
clc, clear
x=-5:1:5;
y=fun2(x);
plot(x,y,'--r*')
%画折线图
function y=fun2(x)
y=x.^2+1
end
1.4.3 匿名函数
匿名函数可以让用户编写简单的函数,不需要函数名,也不需要创建m文件,只有表达式和输入、输出参数。
匿名函数创建方法为:
f=@(形参列表) 表达式
其中,@是句柄操作符,f是返回该匿名函数的句柄,通过函数句柄可以实现对函数的间接调用,其调用方式为f(实参列表),使用非常方便。
clc ,clear
y=@(x) x.^2+1
x=-5:1:5
%定义匿名函数
fplot(y,[-5,5])
%画抛物线,调用的匿名函数
figure
%新开辟一个画图界面
fplot(@fun1,[-5,5]) %前面加@
!!!注意fplot和plot的区别!!!
1.5 线性方程组的解
对于n元线性方程组 Ax=b,有如下结论:
(1)无解的充分必要条件是R(A)<R(A,b);
(2)有唯一解的充分必要条件是R(A)=R(A,b)=n;
(3)有无穷多解的充分必要条件是R(A)=R(A,b)<n;
无论数学上Ax=b是否存在解,或者是多解,Matlab的求解命令x=pinv(A)*b总是给出唯一解,给出解的情况如下:
(1)当方程组有无穷多组解时,Matlab给出的是最小范数解
(2)当方程组无解时,Matlab给出的是最小二乘解,所谓的最小二乘解是满足最小的解,即方程两边误差平方和最小的解。
当A列满秩时,x=pinv(A)*b与x=Ab等价。
例题01:R(A)=R(A,b)=n时,即有唯一解
A=[2 -1 2;1 1 2;4 1 4];
b=[4 ;1 ;2];
Ab=[A,b];
%构造增广矩阵
r1=rank(A);
%求系数矩阵的秩
r2=rank(Ab);
%求增广矩阵的秩
x=Ab
%求线性方程组的唯一解
例题02:R(A)<R(A,b)时,即无解
附:%% 作用:分节符
A=[1 2 3;1 0 1;2 0 2;2 4 6];
b=[1; 0 ;1 ;3];
Ab=[A,b];
%构造增广矩阵
r1=rank(A);
%求系数矩阵的秩
r2=rank(Ab);
%求增广矩阵的秩
x=pinv(A)*b
%求线性方程组的最小二乘解
注!!!:pinv(A) 作用:求A的广义逆矩阵
例题03:R(A)=R(A,b)<n时,即无穷多解
A=[1 -5 2 -3;5 3 6 -1;2 4 2 1];
b=[11 ;-1 ;6];
Ab=[A,b];
%构造增广矩阵
r1=rank(A);
%求系数矩阵的秩
r2=rank(Ab);
%求增广矩阵的秩
x=pinv(A)*b
%求线性方程组的最小范数解
Ab2=sym(Ab);
%把数值矩阵化为符号矩阵
d=rref(Ab2)
%求行最简形矩阵
1.6 枚举法
在算法设计中,对于变量取值个数有限的问题,且问题规模较小,可以考虑使用枚举法来求解。有时为了提高算法的效率,减少枚举计算量,可以挖掘问题隐含的约束条件,这样的方法称为隐枚举法。
例题
clc ,clear,N=10000
%N为鸡蛋数量的上界
s=[];
%将所有满足条件的结果保存在变量s中
for n=63:63*2:N
if rem(n,8)==1 & rem(n,5)==4 & rem(n,6)==3
%rem()为取余函数
s=[s,n];
end
end
s
最后
以上就是斯文麦片为你收集整理的数学建模笔记 day-01第一章 Matlab基础知识的全部内容,希望文章能够帮你解决数学建模笔记 day-01第一章 Matlab基础知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复