• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

入坑MATLAB必会的吐血总结

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

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

  里面的一些内容仅供参考,知识量有限,仅供入门。

  后期可能会随缘写一点笔记。

  如果没有装Matlab,我这里有一篇建模软件的博客:https://www.cnblogs.com/cruelty_angel/p/10563509.html

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

  用%注解;

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

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

  删除工作空间里的变量clear

  一些永久常数:

  基本虚数单位 i或j

  系统的浮点精确度 eps

  无限大 inf

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

  非数值 NaN

  圆周率 pi

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

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

一、线性代数

矩阵

  基本命令:

  • 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为单位矩阵的行变换矩阵

 

例子:

  ①解方程组

   求解方程组$\left\{\begin{array}{c}{5 x_{1}+4 x_{3}+2 x_{4}=3} \\ {x_{1}-x_{2}+2 x_{3}+x_{4}=1} \\ {4 x_{1}+x_{2}+2 x_{3}=1} \\ {x_{1}+x_{2}+x_{3}+x_{4}=0}\end{array}\right.$的解。

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

   ②解线性方程组

  求解线性方程组:

$\left\{\begin{array}{l}{x_{1}-2 x_{2}+3 x_{3}+x_{4}+x_{5}=7} \\ {x_{1}+x_{2}-x_{3}-x_{4}-2 x_{5}=2} \\ {2 x_{1}-x_{2}+x_{3}-2 x_{5}=7} \\ {2 x_{1}+2 x_{2}+5 x_{3}-x_{4}+x_{5}=18}\end{array}\right.$

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

  ③解齐次线性方程组

$\left\{\begin{array}{c}{x_{1}+x_{2}+x_{3}+4 x_{4}-3 x_{5}=0} \\ {2 x_{1}+x_{2}+3 x_{3}+5 x_{4}-5 x_{5}=0} \\ {x_{1}-x_{2}+3 x_{3}-2 x_{4}-x_{5}=0} \\ {3 x_{1}+x_{2}+5 x_{3}+6 x_{4}-7 x_{5}=0}\end{array}\right.$

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\')

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

 $\left\{\begin{array}{c}{x_{1}+5 x_{2}-x_{3}-x_{4}=-1} \\ {x_{1}-2 x_{2}+x_{3}+3 x_{4}=3} \\ {3 x_{1}+8 x_{2}-x_{3}+x_{4}=1} \\ {x_{1}-9 x_{2}+3 x_{3}+7 x_{4}=7}\end{array}\right.$

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

 

图形功能

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

  二维图像:

   

  ①——plot

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

  

  ②——fplot

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

  

  ③——ezplot

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

  

   ④——两曲线

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\')

   

 

   三维图像:

 

  ①——plot3

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

  

  ②——参数方程

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)

  

  ③——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);%绘制着色的三维网纹去年

  

  ④——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的程序结构

  设计一段程序,分别用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

%编写函数
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,请自行查询。

补充实例:

%算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

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)

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

 例子:

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)

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

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.二次曲面

  • 椭球面

  直角坐标方程:

  参数方程: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

  图形:

  

  • 球面

  直角坐标方程:

  参数方程: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

  图形:

  

  • 抛物面

  椭圆抛物面

  直角坐标方程:

  参数方程: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

  图形:

   

  双曲抛物面

  直角坐标方程:

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

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

  程序:

clear
x=-2:0.01:2;
y=-3:0.1:3;
[X,Y]=meshgrid(x,y);
Z=X.*X/2-Y.*Y/3;
mesh(X,Y,Z)

  图形:

  

  • 双曲面

  单叶双曲面

  直角坐标方程:

  参数方程:x=a*secu*cosvy=b*secu*sinvz=c*tanu     (-≤u≤+∞, 0≤v≤2π)

  程序:

ezmesh(\'2*sec(u)*cos(v)\',\'3*sec(u)*sin(v)\',\'2*tan(u)\',[-4,4],[0,2*pi])
axis equal
title(\'ezmesh作的单叶双曲面\')

  图形:

   

  双叶双曲面

  直角坐标方程:

  参数方程:x=a*tanu*cosvy=b*tanu*sinvz=c*secu    (-≤u≤+, 0≤v≤2π)

  程序:

ezmesh(\'2*tan(u)*cos(v)\',\'3*tan(u)*sin(v)\',\'2*sec(u)\',[-4,4],[0,2*pi])
axis equal
title(\'ezmesh作的双叶双曲面\')

  图形:

  

  • 椭圆锥面

  直角坐标方程:

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

  程序:

ezmesh(\'2*u*cos(v)\',\'3*u*sin(v)\',\'2*u\',[-4,4],[0,2*pi])
axis equal
title(\'ezmesh作的椭圆锥面\')

  图形:

   

  • 椭圆柱面

  直角坐标方程:

  参数方程:x=acosuy=bsinuz=v   ( 0≤φ<2π,-≤v≤+)

  程序:

x1=\'3*cos(u)\';
y1=\'2*sin(u)\';
z1=\'v\';
ezmesh(x1,y1,z1,[0,2*pi,0,4]);
axis square

  图形:

   

 

4.二重积分

  直角坐标

 

%第一问
syms x y
f=x/(1+x*y);
int(int(f,y,0,1),x,0,1)  
%第二问
%求交点
clear
syms x y
[x,y]=solve(y==x*x+1,y==2*x,x,y) %在2018里这样,有些版本是加引号和单等号
%积分
clear
syms x y
f=x/(y+1);
int(int(f,y,2*x,x*x+1),x,0,1)
%第三问
clear
syms x y
f=1-x-y;
int(int(f,y,0,1-x),x,0,1)

  极坐标

  

%第一问
clear
syms r f
int(int(r*r*r,r,0,sqrt(2)),f,0,pi/2)
%第二问
clear
syms r f
int(int(1,r,0,sec(f)*tan(f)),f,0,pi/4)

%三叶玫瑰线的一叶
clear
syms r f
int(int(r,r,0,cos(3*f)),f,-pi/6,pi/6)
%心脏线
clear
syms r f
int(int(r,r,0,1-sin(f)),f,0,2*pi)

 

5.三重积分

   直角坐标

  

  

clear
syms z r s
A=int(int(int(z*r,z,r*r,2),r,0,sqrt(2)),s,0,2*pi)-int(int(int(z*r,z,r*r,1),r,0,sqrt(1)),s,0,2*pi)

   柱面坐标

  

  

clear
syms z r s
int(int(int(z*r,z,r*r,sqrt(2-r*r)),r,0,1),s,0,2*pi)

&


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiXE3特性发布时间:2022-07-18
下一篇:
delphi画带箭头的线发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap