MATLAB基础

本文详细介绍了MATLAB的基础知识,包括矩阵、向量、数据类型、运算符、函数计算以及绘图功能。讲解了如何创建和操作矩阵,如单位矩阵、全零矩阵、全一矩阵,以及如何进行矩阵运算。此外,还涵盖了符号运算、微分方程的求解以及二维和三维绘图。MATLAB的绘图功能包括线图、条形图、直方图和三维图形等,提供了丰富的图形修饰选项。
摘要由CSDN通过智能技术生成

MATLAB基础+进阶

一、简介与基础知识

matlab是Matrix Labratory的缩写。

开放式程序设计语言,用于高性能工程计算。

基础的数据单位是没有维数限制的矩阵。

  • 系统

    1. 桌面工具和开发环境

    2. 数学函数库(包含大量计算算法)

    3. 语言(高级的基于矩阵/数组的语言,面向对象编程)

    4. 图形处理(可视化)

    5. 外部接口

  • 界面

    1. 工作区:存放变量,方便debug
    2. 命令行窗口:一些命令
    3. 历史记录窗口:布局里找到历史记录停靠,或者按向上的键

clc :清空命令行窗口(不是清空历史记录!!!)

clear:清空工作区(工作区里的变量)

  • 帮助系统

    1. help+函数名
    2. helpwin 联机查找
    3. lookfor+函数的信息
    4. 内存变量列表:who(可以直接看工作区)
    5. 内存变量信息:whos(可以查看数据类型)
    6. 目录中的文件列表:what
    7. 确定文件位置:which
    8. 变量检验函数:exist
  • MATLAB命令

    1. 指令输入符 >> 自动输入 表示处于准备就绪状态

    2. 避免中文输入,同其他语言

    3. 对格式要求还比较严格 eg:sin()是弧度制

    4. 符合逻辑,变量必须在在调用前已存在

    5. 不要用ans命名变量,没有设置接收的变量,会自动存在ans下

  • MATLAB功能符号

    1. %注释标记

    2. =赋值标记

    3. ; 可以不让MATLAB每次都显示运算结果

    4. …续行号

    5. 数据不用使用者声明类型

  • MATLAB命令(最常用的2个)

    1. clc:清除命令行,只是清除可见的部分
    2. clear:清除内存变量
  • MATLAB数据类型

    1. 数字、字符串、向量、矩阵、单元型数据及结构型数据

    2. 矩阵是MATLAB语言中最基本的数据类型,本质上讲就是数组。

    3. 不需要事先对所使用的变量进行声明

    4. 命名规则和C语言类似

    5. ans:默认变量

    6. pi:圆周率

    7. inf:无穷大

    8. i:虚数单位

    9. 指数形式E/e aEb都不能省

    10. 复数形式

二、MATLAB数据类型与运算符

  • MATLAB数据类型

    ​ 控制显示格式:format short/long等等,只改变显示值,不改变存储的值

  • MATLAB运算符

    1. .*点乘

    2. ^算术乘方

    3. .^点乘方

    4. MATLAB的除法比较特殊,左除和右除不太一样

    5. ~=不等于(与C语言不同)

    6. ~逻辑非

    7. xor逻辑异或(与C语言不同)xor(x,y)

    8. 逻辑运算符的优先级最弱

三、MATLAB函数计算、向量生成与计算

  • 函数运算

    1. 复数运算工具

      abs:模

      angle:复数的相角

      conj:复数的共轭

      real:求实部

      imag:求虚部

    2. 三角函数/反三角函数

      sin/asin

      cos/acos

  • MATLAB向量

近似看成矩阵

向量的生成:

  1. 直接输入法

    向量元素用[ ]括起来

    元素之间用空格、逗号或者分号分隔(分号表示一行的结束)

    空格、逗号生成行向量;分号生成列向量

  2. 冒号法

    起始:步距:结束(不写步距时,默认为1)

    x=0:10

    x=0:2:10

  3. 利用linspace创建向量

    linspace(first_value,last_value,number)

    x=linspace(0,10,5)

  4. 利用logspace创建对树分隔的向量

    logspace(first_value,last_value,number)

    logspace(1,3,3)%从10first_value到10last_value包含number个数据元素[10,100,1000]

向量的引用:

  1. x(n)

    第n个元素,matlab中是从1开始的,而C语言是从0开始的

    拿出来可以单独赋值

  2. x(n1:n2)

    n1:n2表示一个向量,从n1到n2

    为了得到有间隔的数

    可以用x(n1:2:n2),表示取出x中从n1到n2的步距为2的数

  3. x([ ])

    按向量[ ]中的序号,向量x中取出相应的数据

    x([ 5,1,10 ])

  4. 组合

    将向量拼接起来再使用

    y=[2:5 [6,2,11]]

    x(y);

向量的四则运算

  1. 向量的加减

    向量+向量:对应项加减

    向量+常数:所有项都加

  2. 向量的点乘

    x.*x‘ %向量的点乘,要符合矩阵的维度的运算

    .*对应位置想成

  3. 向量的除法

    x./y %对应位置上x除以y

四、MATLAB多项式的创建与运算

  • 向量的积运算
  1. dot(a,b)

    点积,a、b维度必须一样

  2. cross(a,b)

    叉积,两个向量叉积得到与两个向量垂直的一个向量

    叉积的两个向量必须是三维的(*)

  3. 混合积

    dot(a,cross(b,c))

多项式

单项式是数字与字母的积,单项式的和叫作多项式

  • 多项式的创建

    1.直接写

'a*x.^n+b*x^(n-1)'

​ 2.直接输入向量

p=[1 2 1];
ploy2sym(p)
%得到 x^2+2*x+1

​ 以符号变量的形式储存

  • 多项式的四则运算

注意:相加、减的两个向量必须大小相等,阶次不同时,低阶多项式必须用零来填补,使其与高阶多项式有相同的阶次。

  1. 乘法–卷积的形式得到

    conv(p1,p2)

  2. 除法运算–相当于执行两个数组的解卷

    [k,r]=deconv(p1,p2)

    k是商,r是余式

根据跟来创建多项式

root=[-5 3+2i 3-2i];
p=ploy(root);%生成根为root的多项式的系数和相应的指数
ploy2sym(p);%根据p相应的系数 创建多项式 (补全字母)
  1. 加减法

    一定要保证维度相同

五、矩阵

  • 多项式补充

    求导------参数是对应多项式的系数

    polyder§

  • 单元型变量(元胞)

    1. 单元型变量的创建

      1. E={A,B,C,D} A,B,C,D可以是矩阵,向量,复数,实数

        可以E(1)来调用,类似向量

      2. 对单元的元素逐个赋值

        E=cell(1,3)%生成单元型变量,cell为与分配存储空间的函数

        E(1,1)= E(1,2)=

        str2num(x) 类型转换 将字符串转换成数字

    2. 结构型变量的创建和引用

      1. s=struct{‘field’,{},‘filed2’,{},…}
      2. s=struct{‘field’,values1,‘field2’,values2,…}
m=struct('color',{'red','black'},'number',{1,2})
m
m(1)
m(1).color
%一些结构型变量的函数
struct()%创建结构型变量
fieldnaems()%得到结构型变量的属性名
getfield()%得到结构型变量的属性值
setfield()%设定结构型变量的属性值
rmfield()%删除结构型变量的属性
isfield()%判断是否为结构型变量的属性
isstruct()%判断是否为结构型变量

结构型变量:类似于C语言创建初值,只是不用结构内部的具体形式

  • MATLAB矩阵运算

    矩阵的生成

    1.直接输入

    1. 输入时[ ]
    2. 同行元素之间用空格或者逗号分隔,行与行之间用分号或者回车键分隔
    3. 矩阵大小不需要预先定义
    4. 矩阵元素可以是运算表达式
    5. 若[ ]无元素,则是空矩阵

    2.利用M文件创建

    矩阵规模较大时,将所要输入的矩阵格式先写入一文本文件中,并将此文件以m为其扩展名,即M文件。

    M文件是一种可以再MATLAB环境下云南行的文本文件,可以分为命令式文件和函数式文件两种。

M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。运行M文件时,需要先将M文件sample.m复制到当前目录文件夹下,否则运行时无法调用。

​ 3.利用文本创建

​ 事先在记事本中建立文件

​ 以goods.txt保存,在MATLAB命令行窗口中输入

load goods.txt

利用函数来生成特定的矩阵

eye(n)%创建n*n单位矩阵
eye(m,n)%创建m*n单位矩阵
eye(size(A))%创建与A维数相同的单位矩阵
ones(n)%创建n*n全1矩阵
ones(n,m)%创建n*m全1矩阵
ones(size(A))%创建与A维数相同的全1矩阵
zeros(n)%创建n*n全0矩阵
rand(n)%在[0,1]区间内创建一个n*n均匀分布的随机矩阵
compan(P)%创建系数向量是P的多项式的伴随矩阵
diag(v)%创建一向量v中的元素为对角的对角阵
hilb(n)%创建n*n的Hilbert矩阵
magic(n)%创建n阶魔方矩阵
sparse(A)%将A转化为稀疏矩阵的形式

六、符号与矩阵的创建与运算

  • 矩阵元素的修改

    1. D=[A;B C],A为原矩阵,BC为扩充的矩阵,D为扩充后的矩阵,规则和向量类似

    2. A(m,:)=[]删除A的第m行------也就是将某一行替换成空向量

    3. A(:,n)=[]删除A的第n列

    4. A(m,n)=a;A(m,:)=[a b…];A(:,n)=[a b…]赋值操作

  • 矩阵的变维

    1. ":“法

    2. reshape(X,m,n)将矩阵M变维成m行n列的矩阵

  • 矩阵的变向-经常用在图像处理中

    1. rot(90)将A逆时针旋转90度
  • 矩阵的抽取

    1. diag(X,k)抽取矩阵X的第k条对角线上的元素向量,k=0时抽取主对角线(此时可以省略k)

    2. tril(X,k)提取X的第k条对角线下面的部分

    3. triu(X,k)提取X的第k条对角线上面的部分

  • 矩阵运算

    1. 除法:AX=B的解是X=A\B;XA=B的解是X=B/A;

    2. 加减、乘和线性代数中是一样的

    3. 点乘运算:和向量一样,对应项相乘

    4. 矩阵的幂:A.^k求k次幂

    5. 矩阵的逆:inv(X)

行列式的值为0的矩阵成为奇异的,否则成为非奇异的。

  • 常用矩阵函数

    1. det矩阵的行列式的值
    2. eig矩阵的特征值
    3. inv矩阵的逆
    4. norm矩阵的范数值
    5. rank矩阵的秩
    6. trace矩阵的迹
  • 矩阵的奇异值分解

    SVD有着广泛的应用

    将m.n矩阵A表示乘三个矩阵的乘积形式,USVT,其中U为m.m酉矩阵,V为n.n酉矩阵,S为对角矩阵,其对角线元素为矩阵A的奇异值且满足S1>=S2>=…>=Sr>Sr+1=…=Sn=0,(r为矩阵的秩)

  • 符号运算

    符号运算是为了得到更高精度的数值解,数值的运算更容易让读者理解,在特定的情况下,分别使用符号或数值表达式进行不同的运算

    符号表达式和数值表达式互化

    eval和syms

  • 生成符号矩阵

    1. 直接输入
    2. 调用syms函数创建

factor因式分解

expand展开

simple(S)对表达式S进行化简;simplify简化符号矩阵的每一个元素

numden(A)求解符号表达式的分子和分母,分式通分

horner化成“秦九韶”形式

符号运算用来解方程特别好用

syms x y
z=[x+y x;y x-y];
subs(z,x,1)%把y=1代入
subs(z,[x,y],[1,2])%把x=1,y=2代入

对符号矩阵可以求特征值/特征向量/奇异值分解…

七、二维位绘图

  • 基本绘图命令

    1. plot绘图命令

      x=0:pi/100:2*pi;%0到2pi画101个点
      y=sin(x);
      plot(x,y);
      

      注:

      1. X和Y必须是同维向量,绘制以X为横坐标,Y为纵坐标的曲线

      2. 如果X是向量,Y是矩阵,X的维数应该与Y的某一维相等,绘制多条颜色不同的曲线,曲线数等于Y的另一维,X作为曲线的横坐标。如果矩阵是方阵,绘制Y的每一列对X的曲线(每一列是一条曲线)

      3. 如果X是矩阵,Y是向量,同上,但此时,Y是横坐标

      4. 如果X,Y是同维矩阵,以X的每一列作为横坐标,以Y对应的列元素作为纵坐标绘制曲线,曲线数等于列数

      plot(x,y,LineSpec)
      

      注:

      1. LineSpec为包含符号的字符向量或者字符串,用来设置所画数据点的形状,大小和颜色,以及数据点之间连线的形状、粗细、颜色等
      2. 实际应用中,LineSpec是某些字母或符号的组合,可以省略
      3. 省略时,MATLAB将会使用默认设置,曲线采用实线,不同曲线按照一定顺序着色
      4. 如果忽略线型,只指定标记,则绘图时只显示标记,不显示线条
      5. –or带有圆形标记的红色虚线
      plot(x1,y1)
      hold on%保留上一条曲线
      plot(x2,y2)
      plot(x1,y1,...,xn,yn)
      plot(x1,y1,LineSpec1,...,xn,yn,LineSpecn)
      %举例
      x=0:pi/10:2*pi;
      y1=sin(x);
      y2=sin(x-0.5);
      y3=sin(s-0.25);
      figure plot(x,y1,'g',x,y2,'b--o',x,y3,'c*')
      
      plot(y)%创建y中数据对每个值索引的二维线图
      plot(y,LineSpec)%设置线型、标记符号和颜色
      

      注:

      1. 如果y是实向量,则x轴刻度范围从1到length(y).

        横坐标为编号

      2. 如果y是实矩阵,按列绘制出每列元素值对应其下标的曲线,曲线数等于y的列数

      3. 如果y是复矩阵,按列分别绘制出以元素实部为横坐标,虚部为纵坐标的多条曲线,即等效于plot(real(y),imag(y))

    x=linspace(-s*pi,2*pi);
    y1=sin(x);
    y2=cos(x);
    p=plot(x,y1,x,y2);
    p(1).LineWidth=2;
    p(2).Marker='*';
    

    2.fplot绘图命令

    专门用于绘制一元函数

    与plot有很多相似的地方

    可以用

    3.ezplot绘图命令

    专门用于符号函数的绘图命令,不推荐使用

    4.subplot命令

  • 不同坐标系下的绘图命令

    1. 默认在直角坐标系下绘图

    2. 极坐标系下的绘图命令:polarplot

    polarplot(theta,rho);
    %示例
    theta=linspace(0,6*pi);
    rho1=theta/10;
    polarplot(theta,rho1)
    tho2=theta/12;
    hold on
    polarplot(theta,rho2,'--')
    hold off
    

    坐标转换

    [theta,rho]=cart2pol(x,y)

    R=deg2rad(D)

    D=rad2deg®

    [x,y]=pol2cart(theta,rho)

    1. 半对数坐标

    2. 当一幅图上所要表示的两条曲线纵坐标值不在统一范围时,可以使用双y轴坐标

      plotyy:不推荐使用

      yyaxis:创建具有两个y轴的图形

      yyaxis left
      %画左边
      yyaxis right
      %画右边
      
  • 图形窗口

    修改图形

    figure();

  • 图形标注

    标题、图例

    坐标系和坐标轴

    图形注释

    ​ axis(limits)

    fill(x,y,'color')
    %用指定的颜色填充数据(x,y)所构成的多边形
    title('string')
    %为图形添加标题
    xlabel('string')
    %为x轴添加标注,ylabel,zlabel
    text(x,y,'string')
    %在指定位置显示字符串
    gtext('string')
    %同鼠标在图形的任意位置进行标注
    

    添加图例

    legend(label1,...,labeln)
    %按照曲线顺序设置图例
    legend(subset,_)
    %只为一部分曲线设置图例
    legend(target,_)
    %在指定坐标区域绘图
    legend(_,'Location',lcn)
    %指定图例位置
    lengent(_,'Orientation',ornt)
    %图例的显示方式(并排或垂直)
    %ornt:‘vertical’(默认)‘horizontal’
    

    添加坐标区网格线

    grid on%为当前坐标区添加主网格线
    grid off%删除当前坐标区所有网格线
    grid %切换主网格线的可见性
    grid minor%切换次网格线的可见性
    %示例
    x=linspace(0,10);
    y=sin(x);
    plot(x,y);
    grid on
    grid off
    
  • 条形图

    • 二位条形图
    1. bar:竖直条形图
    2. bath:水平条形图
    • 三维条形图
    1. bar3:竖直条形图
    2. bar3h:水平条形图
    bar(y)%创建一个条形图,y中每个元素对应一个条形,如果y是m*n的矩阵,则bar创建m组每组包含n个条形
    bar(x,y)%在横坐标x所指定的位置绘制y,要求x为严格单调增的向量
    bar(_,width)%设置条形的相对宽度width
    bar(_,style)%指定条形组的样式style
    bar(_,color)%设置条形的颜色
    
  • 区域图

    1. area(x)与plot(x)一样,但在曲线下方区域填充颜色

    2. area(x,y)与plot(x,y)一样,但将在曲线下方区域填充颜色

    3. area(x,Y)矩阵y的第一行对向量x绘图,然后依次是下一行与前面所有行值的和对向量x绘图,每个区域各有颜色

    4. area(_,basevalue)指定区域填充的基值,默认为0

    Y=[1 5 3;
    	 3,2,7;
    	 1,5,3;
    	 2,6,1;]
    	 figure
    	 basevalue=-4;
    	 area(Y,basevalue)
    
  • 二维饼图

    1. pie(x)使用x中的数据绘制饼图
    2. pie(x,explode)将扇区从饼图偏移一定位置
    3. pie(x,label)指定扇区的文本标签
    4. pie3三维饼图
  • 二维直方图的绘图命令

    1. histogram:直角坐标系下的直方图
    2. polarhistogram:极坐标系下的直方图
  • 含误差条的线图

    errorbar(y,err)%err
    errorbar(x,y,err)%横坐标是x
    errorbar(x,y,neg,pos)%neg确定数据点下方误差条的长度,pos确定数据点上方误差条的长度
    errorbar(_,ornt)%设置误差条的方向,horizontal水平,vertical为竖直,both为水平和竖直
    %示例
    x=1:10:100;
    y=[20 30 45 40 60 65 80 75 95 90];
    err=[4,3,5,3,5,3,6,4,3,3];
    errorbar(x,y,err,'both')
    
  • 针状图

    1. stem(y)与plot(y)类似
    2. stem(x,y)与plot(x,y)类似
    3. stem(_,‘filled’)填充圆形
    x=linspace(0,10,20)';
    y=(exp(0.25*x));
    stem(x,y,'filled')
    
  • 阶梯图

    x=linspace(0,1,30)';
    y=[cos(10*x),exp(x).*sin(10*x)];
    h=stairs(x,y);
    h(1).Maker='o';
    h(1).MakerSize=4;
    h(2).Maker='o';
    h(2).MakerFaceColor='m';
    
  • 罗盘图

    compass(u,v);
    
  • 羽毛图

  • 箭头图

    [X,Y]=mesherid(-2:.2:2);
    Z=X.*exp(-X.^2-Y.^2);
    [DY,DX]=gradient(Z,.2,.2);
    figure
    contour(X,Y,Z);
    hold on
    quiver(X,Y,DX,DY)
    hold off
    

八、三维绘图

  • 基本绘图函数

    1. plot3函数是二维绘图函数plot的扩展
    t=0:pi/50:10*pi;
    st=sin(t);
    ct=cos(t);
    plot3(st,ct,t);
    
    1. fplot3

    2. mesh

      mesh(X,Y,Z)
      mesh(Z)
      mesh(Z,C)
      mesh(_,C)
      %示例
      [X,Y]=meshgrid(-8:.5:8);
      R=sqrt(X.^2+Y.^2)+eps;
      Z=sin(R)./R;
      mesh(X,Y,Z)
      

      mesh创建一个网格图

      边是有颜色的,面是无颜色的

      meshgrid%可以用来生成二维或三维的网络
      [X,Y]=meshgrid(x,y);
      [X,Y,Z]=meshgrid(x,y,z);%用来生成三维网络
      
      mesh(z)%创建一个网络图,将行号和列号作为x和y的坐标
      mesh(_,c)%指定边的颜色
      hidden on/off%网格不透明/透明
      hidden	% on和off切换
      colorbar%用来增加颜色条
      
      meshc%函数可以在网格图下面显示等高线图
      [X,Y]=mershgrid(-3:.125:3);
      Z=peaks(X,Y);
      meshc(X,Y,Z)
      
      meshz%可以在网格图下方显示帷幕
      [X,Y]=meshgrid(-3:.125:3);
      Z=peaks(X,Y);
      meshz(X,Y,Z)
      
      ezmesh
      
    3. 三维曲面函数

    surf()
    [X,Y]=meshgrid(1:0.5:10,1:20);
    Z=sin(X)+cos(Y);
    surf(X,Y,Z)
    
    surfc%绘制曲面图下的等高线图
    surfl%绘制一个带有光照的曲面图
    
  • 柱面

    cylinder%生成柱面的x,y,z坐标,接下来用surf或者mesh函数来绘制圆柱的柱面
    [x,y,z]=cylinder%返回半径为1,高度为1的圆柱柱面坐标,其周长被20等分
    [x,y,z]=cylinder(r,n)%通过r定义援助的高,通过n定义周长等分数量
    cylinder(_)%直接绘制圆柱柱面
    
  • 球面

    spere%生成柱面x、y和z坐标
    spere%生成一个包含20*20个面的球面并绘制
    sphere(n)%生成一个包含n*n个面的球面并绘制
    [x,y,z]=sphere(_)%返回一个半径为1的球面x,y和z坐标
    
  • 等高线:

    contour3(Z)%用来绘制三维等高线图,Z元素指定来高度,x,y坐标分别是Z矩阵的行好和列号
    contour3(X,Y,Z)%由X,Y定义了xy坐标
    %示例
    contour3(X,Y,Z,[-.2 -.1 .1 .2],'showtext',‘on’)
    
    [X,Y,Z]=peaks;
    contour3(X,Y,Z,[2,2]);
    
    contour%绘制二维等高线图
    %示例:
    x=linspace(-1*pi,2*pi);
    y=linspace(0,4*pi);
    [X,Y]=meshgrid(x,y);
    Z=sin(X)+cos(Y);
    contour(X,Y,Z)
    
  • 填充的二维等高线图

    contourf%等高线间填充颜色
    
  • 等高线矩阵的计算函数

    contourc%计算前面几个函数所使用的等高线矩阵C
    C=contour(Z);%Z是计算等高线矩阵所使用的数据
    C=contour(Z,n);%标量n是等高线的层级
    C=contour(Z,v);%向量v中的值,指定的是等高线的位置
    C=contour(x,y,Z);
    C=contour(x,y,Z,n);
    C=contour(x,y,Z,v);
    
  • 维等高线添加标签

    Clabel(C,h)%C为等高线矩阵,h为等高线图对象
    
  • 三维图形的修饰处理-视角处理

  • 三维图形的修饰处理-颜色处理

    brighten%可以控制色图明暗
    caxis%调整颜色范围
    
  • 三维图形的修饰处理-光照处理

九、数列与极限

  • 数组求和-sum函数

    A=1:10;
    S=sum(A)
    
    A=[1 3 2;4 2 5; 6 1 4];
    S=sum(A)
    

    注:

    1. 如果A是向量,返回元素的和

    2. 如果A是矩阵,返回包含每列总和的行向量

    3. 如果A是多维数组,沿大小不为1的第一个数组维度计算,将这些元素视为向量。计算结果中,该维度变维1,其余维度的大小保持不变。

    s=sum(A,'all')%计算A中所有元素的总和
    s=sum(A,dim)%沿维度dim返回总和,sum(A,2)计算行和
    s=sum(A,vecdim)%根据vecdim中所指定的维度对A元素求和
    			%如果A是矩阵s=sum(A,[1,2])是求A中所有元素的总和
    nansum%与sum(_,'omitnan')等价,用来计算不包含nan值的其他元素的和
    
    cumsum(A)%用来算累积和
    cumsum(A,dim)%与sum(A,dim)类似
    cumsum(_,direction)%按照指定的方向计算累积和,默认为forward,reverse为倒序
    cumsum(_,nanflag)%是否忽略nan
    
    cumtrapz%用来计算累积梯形数值积分
    q=cumtrapz(y)%通过梯形法按照单位间距计算y的近似累积积分
    	%如果y是向量,计算累积积分
    	%如果y是矩阵,计算每一列的累积积分
    	%如果y是高维数组,对大小不等于1的第一个维度求累积积分
    q=cumtrapz(x,y)%根据x指定的坐标或标量间距对y进行积分
    	%x为向量,长度必须与y的第一个不等于1的维度的大小相同
    	%x为标量,代表间距,cumtrapz(x,y)=x*cumtrapz(y).
    q=cumtrapz(_,dim)%沿dim所指定的维度求积分
    
  • 数组元素求积

    prod函数

    A=[1:3:7;2:3:8;3:3:9]
    B=prod(A)
    

    A为single结果也为single,如果为其他数据和逻辑数据类型,结果都是double型

    如果输入空矩阵,则结果为1

    cumprod函数可以计算累积乘积

  • 极限和导数

    limit%用来求函数的极限
    limit(f,var,a)%计算f在变量var接近a时候的极限	省略var时用默认的变量
    limit(f)%计算函数在0的极限
    limit(f,var,a,'left')%计算f在var接近a的左极限
    limit(f,var,a,'right')%计算f在var接近a的右极限
    %示例
    syms s h
    f=sin(x)/x;
    limit(f,x,0)
    
    f=(sin(x+h)-sin(x))/h;
    limit(f,h,0)
    %也可以返回符号函数
    
  • 导数的计算

    diff(f,n)%计算f的n阶导数,默认是1
    diff(f,var,n)%计算多元函数f关于变量x的n阶偏导数
    %示例
    clear:
    syms x y;
    f=sin(x*y)/x;
    diff(f,y);
    diff(f,x,2);
    
    clear:
    syms x;
    diff(f)
    diff(f,2)
    
    diff%还可以计算差分--基于离散函数的概念
    y=diff(x)%计算数组沿第一个大小不等于1的维度相邻元素的差分
    y=diff(x,n)%计算n阶差分
    y=diff(x,n,dim)%计算dim所指定的维度
    %示例
    x=[1 1 2 3 5 8 13 21];
    y=diff(x)%计算差分后,元素会少一个
    
    %差分近似导数
    
  • 级数求和

    symsum计算级数求和

    F=symsum(f,k,a,b)%计算k从a到b时,级数f的和
    								 %参数可以用inf来代表无穷大
    								 %如果级数不收敛,求和的结果为inf
    F=symsum(f,k)%计算不定项级数的求和
    						 %F(k+1)-F(k)=f(k)
    
    %示例
    syms k
    F1=symsum(k,k);
    F2=symsum(2^k,k);
    syms k x
    F1=symsum(k^2,k,0,10);
    F2=symsum(1/k^2,k,1,inf);
    F3=symsum(x^k/factorial(k),k,1,inf)
    
  • 等比数列和等差数列求和

    syms a b n;
    s=a^n+b*n;
    symsum(s)%利用级数求和求数列的和
    
  • 计算不定积分

    symsum(f)%计算函数f的不定积分
    symsum(f,var)%计算多元函数f关于变量var的不定积分
    %示例:
    syms n m;
    symsum(n^2)
    symsum(n*m+n,m)
    symsum(n*m+n,n)
    
  • 定积分

    int%可以用来计算定积分
    int(f,a,b)%计算f在[a,b]上的定积分
    int(f,x,a,b)%计算多元函数关于x在区间[a,b]上的定积分
    int(f)%计算函数f的不定积分
    int(f,x)%计算f关于x的不定积分
    %示例:
    syms x
    expr=-2*x/(1+x^2)^2;
    F=int(expr)%不定积分
    
    syms x z
    f(x,z)=x/(1+z^2);
    Fx=int(f,x)%不定积分
    Fz=int(f,z)
    
  • 二重积分

    integral2
    q=integral2(fun,xmin,xmax,ymin,ymax)计算在矩形区域内的重积分
    %示例:
    fun=@(x,y)1./(sqrt(x+y).*(1+x+y).^2)
    ymax=@(x)1-x;
    q=integral2(fun,0,1,0,ymax)%上下限
    
    #使用int函数计算二重积分
    clear:
    syms x y;
    f=x;
    f1=2*x;
    f2=0.5*x;
    f3=3-x;
    ff1=int(f,0.5*x,2*x);
    ffl1=int(ff1,0,1);
    ff2=int(f,0,5*x,3-x);
    ffl2=int(ff2,1,2);
    ff1=ffl1+ffl2;
    
  • 三重积分

    %可以用int函数计算三重积分,十分麻烦
    integral3%计算三重积分
    q=integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)
    %示例:
    fun=@(x,y,z)y.*sin(x)+z.*cos(x)
    q=integral3(fun,0,pi,0,1,-1,1)
    
  • 泰勒展开式

    T=taylor(f,var)%计算在0附近的六阶泰勒展开式
    T=taylor(f,var,a)%计算在var=a附近的六阶泰勒展开式
    %示例:
    T1=taylor(exp(x));
    T2=taylor(sin(x));
    T3=taylor(cos(x));
    
  • 傅立叶变换与逆变换

    fourier(f)%计算f的傅立叶变换,结果中w为变换后的变量
    fourier(f,transVar)%用transVar代替w
    fourier(f,var,transVar)%对var所代表的变量做傅立叶变换
    ifourier(F)%对F做傅立叶逆变换
    ifourier(F,transVar)
    %示例:
    f=dirac(t);
    f_FT=fourier(f)
    
    syms t w
    ifourier(dirac(w),w,t)
    
  • 拉普拉斯变换

    laplace
    ilaplace
    

十、程序设计

  • M文件

    脚本文件、函数文件

    编辑M文件很方便

function y=jiecheng(n)
if n<0
	disp('Error');
	return;
else
	if n==0
		y=1;
	else
		y=1;
		for m=1:n
			y=y*m;
		end		
	end
end

十一、微分方程

常微分方程
  • 微分方程的求解

    syms y(t) a
    eqn=diff(y,t)==a*y;
    S=dsolve(eqn);
    
    syms y(t) a
    eqn=diff(y,t,2)==a*y;
    s=dsolve(eqn);
    
    syms y(t) a
    eqn=diff(y,t)==a*y;
    cond=y(0)==5;
    s=dsolve(eqn,cond);
    
    syms y(t) a b
    eqn=diff(y,t,2)==a^2*y;
    Dy=diff(y,t);
    cond=[y(0)==b,Dy(0)==1];
    s=dsolve(eqn,cond);
    
    syms y(t) z(t)
    eqns=[diff(y,t)==z,diff(z,t)==-y];
    S=dsolve(eqns);
    [S1,S2]=dsolve(eqns);
    
  • 欧拉法-一阶线性近似–在matlab中没有现成的代码

    function [x,y]=euler(f,x0,y0,xf,h)
    n=fix(xf-x0)/h;
    y(1)=y0;
    x(1)=x0;
    for m=1:n
    	x(m+1)=x(m)+h;
    	y(m+1)=y(m)+h*feval(f,x(m),y(m))
    	
    	[x1,y1]=euler('f',0,1,1,0.1);
    	[x,y2]=euler('f',0,1,1,0.01);
    	yr=(1+2*x).^0.5;
    	
    funtion [x,y]=adeulor(f,x0,y0,xf,h)
    n=fix(xf-x0)/h;
    y(1)=y0;
    x(1)=x0;
    for m=1:n
    	x(m+1)=x(m)+h;
    	yp=y(m)+h*feval(f,x(m),y(m));
    	yc=y(m)+h*feval(f,x(m+1),y(m));
    	y(m+1)=0.5*(yp+yc);
    end
    

    龙格库塔方法

    ode常微分方程

    刚性:变量之间变化速度相差很大

    非刚性:变量之间不化速度相差较小(看情况)

    Ode有很多种,根据需要选择

%以ode23函数为例
[t,y]=ode(odefun,tspan,y0)
%示例:
xspan=[0 5];
y0=0;
[x,y]=ode23(@(x,y) 2*x,xspan,y0);%微分方程/范围/初值

ode23%只适用于两个未知参数的微分方程
A=1;
B=2;
tspan=[0 5];
y0=[0 0.01];
[t,y]=ode23(@(t,y) odefcn(t,y,A,B),tspan,y0);%@(t,y)指明变量是t,y,尽管微分方程本来有好几个未知参数
偏微分方程

略(很麻烦)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值