我是靠谱客的博主 斯文麦片,最近开发中收集的这篇文章主要介绍数学建模笔记 day-01第一章 Matlab基础知识,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一章 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)                                                                                                                          作用:产生10^{a}10^{b}之间按照对数距离等间距产生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给出的是最小二乘解x^{*},所谓的最小二乘解x^{*}是满足left | ax^{*}-b right |^{2}最小的解,即方程两边误差平方和最小的解。

当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基础知识所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部