本渣想回过头来整理一下MATLAB的一些基本的知识(很多东西比较琐碎,应该系统的梳理梳理),下文中没有提到的,自己用help查即可。

  此文用来存个档,便于回顾。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  由于matlab各版本部分语法存在差异,可能会出现bug,用help查帮助文档即可。

  变量名:字母数字串(第一个字符必须英文字母 | 字符间无空格 | 最多19个字符);

  用%注解;

  检查现存于工作空间(Workspace)的变量,可键入who

  检查更加详细的信息,可键入whos

  删除工作空间里的变量clear

  一些永久常数:

  基本虚数单位 i或j

  系统的浮点精确度 eps

  无限大 inf

  系统所能表示的最大/最小数值 realmax / realmin

  非数值 NaN

  圆周率 pi

  函数的输入/输出参数个数 nargin / nargout

  搜寻路径:which(空格)文件名

一、线性代数

1.矩阵

基本命令:

  • A的转置——A'
  • A的行列式——det(A)
  • 矩阵A的秩——rank(A)
  • A的逆矩阵——inv(A)
  • A的n次幂——A^n
  • 矩阵A和B里的元素相乘——A .* B
  • 选择A的第i行生成一个行向量——ai=A(i,:)
  • 选择A的第j列生成一个列向量——aj=A(:,j)
  • 生成n阶零矩阵——zeros(n)
  • 生成n阶单位矩阵——eye(n)
  • 两个向量的内积——a1 * a2'

 

其他命令:

  • 存储工作空间变量——save  文件名  变量名
  • 查询函数的用法——help  函数名
  • 列出所有变量的详细资料——whos
  • 演示程序demo——demo

 

特殊矩阵:

  • 全一矩阵——y = ones(n)      y = ones(m,n)
  • 均匀分布随机矩阵——y = rand(n)      y = rand(m,n)
  • 正态分布随机矩阵——y = randn(n)    y = randn(m,n)
  • 线性等分向量——y = linspace(a,b)    默认100等分    %n等分: y = linspace(a,b,n)
  • 对数等分向量——y = logspace(a,b)   默认50等分      %n等分:y = logspace(a,b,n)
  • 矩阵A中元素的个数——n = numel(A)
  • 以输入元素为对角线元素的矩阵——out = blkdiag(a,b,c...)
  • n阶Hadamard矩阵——H = hadamard(n)
  • Hankel矩阵——H = hankel(c)   第一列元素为c,反三角以下元素为0
  • n阶Hilbert矩阵——H = hilb(n)         H(i,j) = 1/(i+j-1)
  • n阶逆Hilbert矩阵——H = invhilb(n)
  • n阶魔方矩阵——M = magic(n)

 

向量的范数——n = norm(X)  具体help查询     

矩阵的范数——n = norm(A)  具体help查询

 

其他运算:

  • 矩阵A的特征值——D = eig(A)
  • 特征向量矩阵X和特征值组成的对角阵D——[X,D] = eig(A)
  • 将非奇异矩阵A正交化为Q——Q = orth(A)      (Q' * Q = 单位矩阵)
  • 由已定义的矩阵A,E,O,A作为矩阵的子块,生成矩阵B——B = [A,E;O,A]
  • 矩阵A的列向量组的极大线性无关组——rref(A)
  • 条件数——c = cond(A)   默认为2条件数             p条件数:c = cond(A,p)

数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A) = ‖ A ‖·‖ A逆 ‖

LU = A——[L,U] = lu(A)

LU = PA——[L,U,P] = lu(A)

U为上三角阵,L为下三角阵或其变换形式,P为单位矩阵的行变换矩阵

 

  例子:

解方程组

 入坑MATLAB必会的吐血总结 随笔 第1张

clear
format rat   %format函数控制输出格式 format rat是小数去用分数输出表示
A=[5,0,4,2;1,-1,2,1;4,1,2,0;1,1,1,1];
B=[3;1;1;0];
S=length(A(:,1))
R=rank(A)
if S==R
   X=A\B
else
   fprintf('error\n')
end

 

解线性方程组

入坑MATLAB必会的吐血总结 随笔 第2张

clear
A=[1,-2,3,1,1;1,1,-1,-1,-2;2,-1,1,0,-2;2,2,5,-1,1];
b=[7;2;7;18];
B=[A,b];
n=length(A(1,:))
RA=rank(A)
RB=rank(B)
if RA==RB
   if RA==n
      X=A\b
   else
      D=rref(B)
   end
else
   fprintf('No Solution for the Equations')
end

 

解齐次线性方程组

入坑MATLAB必会的吐血总结 随笔 第3张 

clear
A=[1,1,1,4,-3;2,1,3,5,-5;1,-1,3,-2,-1;3,1,5,6,-7];
R=rank(A)
%X=rref(A)
%仅仅用rref的话,本题的秩=2<5,方程有非零解,需要自己再去做
%因此不必用rref,MATLAB提供了一个求矩阵令空间的函数null来方便求解
Y=null(A,'r')

 

求非齐次线性方程组的通解

 入坑MATLAB必会的吐血总结 随笔 第4张

clear
A=[1,5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7];
b=[-1;3;1;7];
B=[A,b];
RA=rank(A)
RB=rank(B)
Y=null(A,'r')
n=length(b)
if RA==RB
   if RA==n
      X=A\B      %方程组满秩时,求出唯一解
   else
      p=pinv(A)*b    %在方程组不满秩时,求出特解
      Y=null(A,'r')  %求出方程组的基础解系
      n1=length(Y(1,:))
      k=sym(['kI'])  %这里是ki,是为了把数组k说明成字符型变量
      for i=1:n1     %求出方程的全部解
         k(i)=strcat('k',num2str(i))
         p=p+k(i)*Y(:,i)
      end
   end
else
   fprintf('No Solution for the Equations')
end

 

 

 

2.图形功能

  这一块结合实例来了解相关函数。

  二维图像:

   入坑MATLAB必会的吐血总结 随笔 第5张

①——plot

x=-10:0.1:10;
y1=3*x.^4+x.^2-1;
plot(x,y1,'r')
%x是向量,所以计算一定要表示成点乘

入坑MATLAB必会的吐血总结 随笔 第6张

②——fplot

%函数
function y2=draw2(x)
y2=sin(x)+x;
end
%在命令行输入
fplot(@draw2,[-5,5])

入坑MATLAB必会的吐血总结 随笔 第7张

③——ezplot

y3='x.^2*exp(-x.^2)';
ezplot(y3)

入坑MATLAB必会的吐血总结 随笔 第8张

 ④

syms x
y=log10(x+sqrt(1+x.^2));
dy=diff(y,x);%求导函数,但x不能先定义为向量,所以用subs让x1作为一符号代替表达式y中的默认变量
x1=-3:0.1:3;
y1=subs(y,x1);
dy1=subs(dy,x1);
plot(x1,y1,'r',x1,dy1,'b')

 入坑MATLAB必会的吐血总结 随笔 第9张

 

   三维图像:

 入坑MATLAB必会的吐血总结 随笔 第10张

①——plot3

t=0:0.1:6*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z)

入坑MATLAB必会的吐血总结 随笔 第11张

②——参数方程

t=0:0.1:6*pi;
x=1/2*cos(t)+1/2;
y=1/2*sin(t);
z=sqrt(1-x.^2-y.^2);
plot3(x,y,z)

入坑MATLAB必会的吐血总结 随笔 第12张

③——meshgrid和mesh

s=-10:0.1:10;
t=-10:0.1:10;
[x,y]=meshgrid(s,t);%由两向量生成网格点(x,y),与mesh()配合使用
z=x.^2-y.^2;
mesh(x,y,z);%绘制着色的三维网纹去年

入坑MATLAB必会的吐血总结 随笔 第13张

④——cylinder

s=-pi/5:pi/50:pi/5;
[X,Y,Z]=cylinder(1./s,60);%绘制用向量表示的曲线围绕x轴旋转的曲面,与surf()配合使用,相当于mesh()
surf(X,Y,Z);
%mesh(X,Y,Z);

入坑MATLAB必会的吐血总结 随笔 第14张

 

3.MATLAB的程序结构

  设计一段程序,分别用for循环和while循环求1+2+3+…+100的和,写出完成实验的程序。

clear;
sum=0;
for k=1:100
    sum=sum+k;%s=s+k
end
sum

注意:i和j是系统的虚单位,原则上不能作为变量,建议换成k(sum属于系统函数名,同理,所以还是建议写成s)

%while循环
clear;
s=0;
k=1;
while k<101
    s=s+k;
    k=k+1;
end
s

入坑MATLAB必会的吐血总结 随笔 第15张

%编写函数
function y=fsy42(x)
if x>0
    y=x*x
else
    y=x*x*x
end
%以文件名fsy42.m保存在磁盘上,接着编写程序:
fplot(@fsy42,[-4,4])

  switch以及一些像break、return、continue之类的程序流程控制语句,过于easy,请自行查询。

补充实例:

入坑MATLAB必会的吐血总结 随笔 第16张

%算N9
clear;
s=0;
k=1;
while(s<=9)
    s=s+1/k;
    k=k+1;
end
N9=k-1
%算N20
clear;
s=0;
k=1;
while(s<=20)
    s=s+1/k;
    k=k+1;
end
N20=k-1

入坑MATLAB必会的吐血总结 随笔 第17张

clear;
k=0;
s=0;
while(k<10)
   n=input('请输入数字:');
   if(n>10)
       s=s+n;
   end
   k=k+1;
end
s
num=sqrt(s)

 

 

二、微积分

  1.极限和微分

函数类别 MATLAB函数
幂函数 x^a || sqrt(x)
指数函数 a^x || exp(x)
对数函数 log(x)【即lnx】 || log2(x) || log10(x)
三角函数 sin(x) || cos(x) || tan(x) || cot(x) || sec(x) || csc(x)
反三角函数 asin(x) || acos(x) || atan(x) || acot(x) || asec(x) || acsc(x)
绝对值函数 abs(x)

 

 

  

 

 

 

 

 

 

 

   求极限(摘自MATLAB2018说明文档):

>> help limit
--- sym/limit 的帮助 ---

 limit    Limit of an expression.
    limit(F,x,a) takes the limit of the symbolic expression F as x -> a.
    limit(F,a) uses symvar(F) as the independent variable.
    limit(F) uses a = 0 as the limit point.
    limit(F,x,a,'right') or limit(F,x,a,'left') specify the direction
    of a one-sided limit.
 
    Examples:
      syms x a t h;
 
      limit(sin(x)/x)                 returns   1
      limit((x-2)/(x^2-4),2)          returns   1/4
      limit((1+2*t/x)^(3*x),x,inf)    returns   exp(6*t)
      limit(1/x,x,0,'right')          returns   inf
      limit(1/x,x,0,'left')           returns   -inf
      limit((sin(x+h)-sin(x))/h,h,0)  returns   cos(x)
      v = [(1 + a/x)^x, exp(-x)];
      limit(v,x,inf,'left')           returns   [exp(a),  0]

    求导(摘自MATLAB2018说明文档):

>> help diff
diff - Differences and Approximate Derivatives

    This MATLAB function calculates differences between adjacent elements of X along
    the first array dimension whose size does not equal 1:

    Y = diff(X)
    Y = diff(X,n)
    Y = diff(X,n,dim)

 补充:pretty函数可以使它作用的表达式更符合数学上的书写习惯。

>> help pretty
--- sym/pretty 的帮助 ---

 pretty Pretty print a symbolic expression.
    pretty is not recommended. Use live scripts instead. 
    Live scripts provide full math rendering while pretty uses plain-text formatting.
 
    pretty(S) prints the symbolic expression S in a format that 
    resembles type-set mathematics.

 

  2.不定积分与定积分

  计算函数fun关于默认变量的不定积分:int(fun)

  计算函数fun关于变量x的不定积分:int(fun,x)

  计算函数fun关于变量x从a到b的定积分:int(fun,x,a,b)

如果因为版本更新等原因导致语法错误,请参照说明文档。

 例子:

入坑MATLAB必会的吐血总结 随笔 第18张

clear
syms x a b c
I1=int(sin(a*x)*sin(b*x)*sin(c*x),x)
I2=int(x*exp(x)/(1+x)^2,x,0,1)

入坑MATLAB必会的吐血总结 随笔 第19张

clear
syms t
y=exp(-t^2)
F=int(y,t,0,x^2)
int(x^2*diff(F,x),x,-2,3)

入坑MATLAB必会的吐血总结 随笔 第20张

clear
syms x I1
=int(1+x^2,x,-1,0)+int(exp(-x),x,0,1) eval(I1) %用于评估由表达式表示的matlab代码 I2=quad(@sy3_9f,-1,1) 其中sy3_9f.m如下: function y=sy3_9f(x) if x<=0 y=1+x.^2; %系统自动把变量换成向量,故用 .* ./ .^ 这些。而且,凡是维数不匹配,就有可能是把变量作为向量了 else y=exp(-x); end
%如果被积函数是一个分段函数,则需要以分段点为界分开积分

  为什么要用quad?

  并非所有的积分都可以用 int() 来完成运算,函数 int() 完成的是符号运算,而不是数值运算,因此,当积分不存在初等形式的原函数时,函数 int() 便不能完成积分运算。

  而 quad() 函数用于计算函数的数值积分

 

  3.二次曲面

  • 椭球面

  直角坐标方程:入坑MATLAB必会的吐血总结 随笔 第21张

  参数方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear
k=5;
n=2^k-1;
[x,y,z]=ellipsoid(0,0,0,5,4,3,n)   %ellipsoid——椭圆
mesh(x,y,z);
colormap(gray);
axis equal

%或者用参数方程(推荐)
clear
ezmesh('5*sin(a)*cos(b)','4*sin(a)*sin(b)','3*cos(a)',[0,pi],[0,2*pi])
axis equal

  图形:

  入坑MATLAB必会的吐血总结 随笔 第22张

  • 球面

  直角坐标方程:入坑MATLAB必会的吐血总结 随笔 第23张

  参数方程:x=Rsinθcosφy=Rsinθsinφz=Rcosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear
k=5;
n=2^k-1;
[x,y,z]=sphere(n)  
mesh(x,y,z);
colormap(gray);
axis equal

%或者用参数方程(推荐)
clear
ezmesh('5*sin(a)*cos(b)','5*sin(a)*sin(b)','5*cos(a)',[0,pi],[0,2*pi])
axis equal

  图形:

  入坑MATLAB必会的吐血总结 随笔 第24张

  • 抛物面

  椭圆抛物面

  直角坐标方程:入坑MATLAB必会的吐血总结 随笔 第25张

  参数方程:x=avcosφy=bvsinφz=v²   (0≤v≤+, 0≤φ<2π)

  程序:

ezmesh('2*u*cos(v)','3*u*sin(v)','4*u*u',[0,1],[0,2*pi])
axis equal

  图形:

   入坑MATLAB必会的吐血总结 随笔 第26张

  双曲抛物面

  直角坐标方程:入坑MATLAB必会的吐血总结 随笔 第27张

  参数方程:x=a(u+v)y=b(u-v)z=4uv   

        或者:x=auy=bvz=u²-v²         (-≤u≤+, -≤v≤+)

  程序:

m=-10:0.05:10;
n=-10:0.05:10;
[x,y]=meshgrid(m,n);
z=x.*y.*(1-(x.^2+y.^2));
mesh(x,y,z)

  图形:

   入坑MATLAB必会的吐血总结 随笔 第28张

 

  • 双曲面

  直角坐标方程:

  参数方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

  图形:

 

 

  • 椭圆锥面

  直角坐标方程:

  参数方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

  图形:

 

  • 柱面

  直角坐标方程:

  参数方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

  图形:

 

 

  4.二重积分

 

 

  5.三重积分

 

  6.对弧长的曲线积分

 

  7.对坐标的曲线积分

 

  8.对面积的曲面积分

 

  9.对坐标的曲面积分

 

  10.级数

 

  11.傅里叶级数

 

  微分方程和微分方程组

 

三、概率统计

 

 

四、数值分析

 

 

五、其他数学运算

 

 

六、研究性学习

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄