Matlab使用指南

Matlab

zcy

第二章

2.1 数据类型

matlab中有15种基本数据类型,每种数据类型均以数组/矩阵的形式出现

整数

matlab支持1、2、4、8字节的有符号整数和无符号整数

image-20210929220230781

浮点数

有单精度和双精度两种浮点数

image-20210929221858672

复数

复数包含实部和虚部,可以用i或者j来表示虚部

2.2 基本矩阵操作

2.2.1 矩阵的构造
2.2.2 矩阵大小的改变
2.2.3矩阵下标引用

2.3 运算符和特殊符号

2.4 字符串处理函数

第三章 数学运算

3.1 矩阵运算

3.1.1 矩阵分析

image-20210928204148903

  • 向量间的距离 norm()

    计算和原点的距离:N = norm(E,2)

    >> norm([1:5],2)
    
    ans =
    
         7.4162
    

    计算两个向量间的距离:N = norm(E)

    >> x = [1,2,3,4,5];
    >> y = [3,0,5,2,2];
    >> e = x-y;
    >> norm(e)
    
    ans =
    
         5
    
  • 矩阵的秩 rank()

    矩阵中线性无关的列向量个数成为列秩,线性无关的行向量个数成为行秩

    >> eye(4)
    
    ans =
    
         1     0     0     0
         0     1     0     0
         0     0     1     0
         0     0     0     1
    
    >> rank(eye(4))
    
    ans =
    
         4
    
  • 矩阵的行列式 det()

    image-20210928214852299

    >> A = [1 2 3;4 5 6;7 8 9];
    >> A_det = det(A)
    
    A_det =
    
           0
    

    行列阵为0的矩阵为奇异矩阵,用函数 cond() 进行判定

  • 矩阵的迹 trace()

    矩阵对角元素之和

    >> disp(['trace of A = ',num2str(trace(A))]);
    trace of A = 15
    >> A = [1 2 3;4 5 6;7 8 9];
    >> disp(['trace of A = ',num2str(trace(A))]);
    trace of A = 15
    
  • 矩阵的化零矩阵 null()

    对于非满秩矩阵A,若存在矩阵Z使得 AZ = 0 且 Z的转置Z = I,则称矩阵Z 为矩阵A的化零矩阵

    >> A = [1 2 3;1 2 3;4 5 6];
    >> Z = null(A)
    
    Z =
    
       -0.4082
        0.8165
       -0.4082
     
    >> A*Z
    
    ans =
    
       1.0e-14 *
    
             0
             0
       -0.1776
    
    >> Z'*Z
    
    ans =
    
        1.0000
    
  • 矩阵的正交空间 orth()

    矩阵A的正交空间Q满足Q*Q’=I, 且Q与A具有共同的列基底

    >> A = [1 2 3;4 5 6;7 8 9;10 11 12];
    >> Q = orth(A)
    
    Q =
    
       -0.1409    0.8247
       -0.3439    0.4263
       -0.5470    0.0278
       -0.7501   -0.3706
    
    >> Q'*Q
    
    ans =
    
        1.0000   -0.0000
       -0.0000    1.0000
    
  • 矩阵的简化梯形形式 rref()

    image-20210928221508173

    >> A = [1 2 3 4;1 1 5 6;1 2 3 6;1 1 5 7];
    >> rref(A)
    
    ans =
    
         1     0     7     0
         0     1    -2     0
         0     0     0     1
         0     0     0     0
    
  • 矩阵空间之间的角度 subspace()

    矩阵空间之间的角度代表具有相同行数的两个矩阵的线性相关程度.夹角越小代表线性相关程度越高

    >> A = [1 2 3;4 5 6;7 8 9];
    >> B = [1 2;3 4;5 6];
    >> subspace(A,B)
    
    ans =
    
       9.2918e-16
    
3.1.2 线性方程组

求线性方程组 AX = B 的解

A\B 相当于 inv(A) * B,其中 inv(A) 是矩阵A的逆

>> A = magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

>> B = [1;2;3];
>> A\B

ans =

    0.0500
    0.3000
    0.0500

用matlab求解以下方程
{ x + 2 y + 3 z = 5 2 x + 4 y + 6 z = 2 x + 3 y + 7 z = 12 \left\{ \begin{array}{c} x+2y+3z=5\\ 2x+4y+6z=2\\ x+3y+7z=12 \end{array} \right. x+2y+3z=52x+4y+6z=2x+3y+7z=12

>> A = [1 2 3;2 4 6;1 3 7];
>> B = [5;2;12];
>> pinv(A)*B

ans =

   -2.6714
   -2.5429
    3.1857

>> inv(A)*B
警告: 矩阵为奇异工作精度。 
 
>> A\B
警告: 矩阵为奇异工作精度。

注意:如果矩阵不是方阵,或是奇异方阵,可以用矩阵的伪逆pinv(A) 给出方程组的一个解或最小二乘意义下的最优解,即 *pinv(A)B

3.1.3 矩阵分解

矩阵分解是把一个矩阵分解成比较简单或者对它的性质比较熟悉的若干个矩阵的乘积的形式

image-20210928223743711

  • Cholesky分解 chol()

    正定矩阵: 设M是n阶方阵,如果对任何非零向量z,都有 z’Mz > 0,就称M为正定矩阵

    把对称正定矩阵A表示为上三角矩阵R的转置与其本身的乘积,即A=R’R

    >> a=[4  -1  1; -1  4.25  2.75; 1  2.75  3.5]
    
    a =
    
        4.0000   -1.0000    1.0000
       -1.0000    4.2500    2.7500
        1.0000    2.7500    3.5000
    
    >> chol(a)
    
    ans =
    
        2.0000   -0.5000    0.5000
             0    2.0000    1.5000
             0         0    1.0000
    
    >> A = pascal(4)
    
    A =
    
         1     1     1     1
         1     2     3     4
         1     3     6    10
         1     4    10    20
    
    >> chol(A)
    
    ans =
    
         1     1     1     1
         0     1     2     3
         0     0     1     3
         0     0     0     1
    
  • LU分解 lu()

    将任意一个方阵A分解为一个置换下三角矩阵L、一个上三角矩阵U的乘积,即 A = LU

    >> A = [1 4 2;5 6 9;4 1 8];
    >> [L1,U1] = lu(A)
    
    L1 =
    
        0.2000   -0.7368    1.0000
        1.0000         0         0
        0.8000    1.0000         0
    
    
    U1 =
    
        5.0000    6.0000    9.0000
             0   -3.8000    0.8000
             0         0    0.7895
    

    将任意一个方阵A分解为一个下三角矩阵L、一个上三角矩阵U、置换矩阵P,满足 P * X = L * U

    >> A = [1 4 2;5 6 9;4 1 8];
    >> [L2,U2,P] = lu(A)
    
    L2 =
    
        1.0000         0         0
        0.8000    1.0000         0
        0.2000   -0.7368    1.0000
    
    
    U2 =
    
        5.0000    6.0000    9.0000
             0   -3.8000    0.8000
             0         0    0.7895
    
    
    P =
    
         0     1     0
         0     0     1
         1     0     0
    

    PS:置换矩阵是一种系数只由0和1组成的方块矩阵。置换矩阵的每一行和每一列都恰好有一个1,其余的系数都是0

  • **QR分解 **qr()

    将mxn的矩阵A分解为mxn的矩阵Q、nxn的上三角矩阵R的乘积,即A=Q*R,且Q’*Q=I

    >> A = [1 4 2;5 6 9];
    >> [Q,R] = qr(A)
    
    Q =
    
       -0.1961   -0.9806
       -0.9806    0.1961
    
    
    R =
    
       -5.0990   -6.6679   -9.2175
             0   -2.7456   -0.1961
    
    >> qr(A) //返回上三角矩阵R
    
    ans =
    
       -5.0990   -6.6679   -9.2175
        0.8198   -2.7456   -0.1961 //为啥跟上面的R不一样
    
  • 奇异值分解

    将mxn的矩阵A分解为A=U*S*V’,U为mxm的酉方阵,V为nxn的酉方阵,S为mxn的酉方阵

    image-20210928233557545

    >> A=[1 4 2;5 6 9];
    >> [U S V]=svd(A)
    
    U =
    
        0.3243    0.9460
        0.9460   -0.3243
    
    
    S =
    
       12.5742         0         0
             0    2.2111         0
    
    
    V =
    
        0.4019   -0.3054   -0.8632
        0.5545    0.8314   -0.0360
        0.7287   -0.4642    0.5035
    
  • **Schur分解 **schur()

    将复方阵A分解为A=U*L*U’,其中U为酉矩阵,L为上三角矩阵,其对角线元素为A的特征值

    >> A=[1 4 2;5 6 9;4 1 8];
    [U L]=schur(A)
    
    U =
    
        0.3494    0.8929    0.2838
        0.8242   -0.1489   -0.5464
        0.4456   -0.4248    0.7880
    
    
    L =
    
       12.9859   -0.3899    7.2707
             0   -0.4658   -3.9981
             0         0    2.4799
    
3.1.4 矩阵的特征值和特征向量

d = eig(A) 返回矩阵A的所有特征值

[V,D] = eig(A) 返回矩阵A的所有特征值和特征向量

>> A=[6 12 19;-9 -20 -33;4 9 15]

A =

     6    12    19
    -9   -20   -33
     4     9    15

>> eig(A)

ans =

  -1.0000 + 0.0000i
   1.0000 + 0.0000i
   1.0000 - 0.0000i
>> X=[-2 1 1;0 2 0;-4 1 3];
>> [V D]=eig(X)

V =

   -0.7071   -0.2425    0.3015
         0         0    0.9045
   -0.7071   -0.9701    0.3015


D =

    -1     0     0
     0     2     0
     0     0     2
3.1.5 矩阵的相似变换

对于方阵A和非奇异矩阵B可得到相似矩阵 X = B逆 * A * B

  • 对角阵变换
  • Jordan变换
3.1.6 非线性运算

image-20210929214450003

3.2 矩阵元素运算

3.2.1 三角函数

image-20210928204833162

例:计算矩阵每个元素的正弦,以弧度为单位

>> A=[6 12 19;-9 -20 -33;4 9 15]

A =

     6    12    19
    -9   -20   -33
     4     9    15

>> Y=sin(A)

Y =

   -0.2794   -0.5366    0.1499
   -0.4121   -0.9129   -0.9999
   -0.7568    0.4121    0.6503
3.2.2 指数和对数函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3PPgyXf-1634716262868)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210928205609952.png)]

image-20210928205620086

例,计算矩阵A=[6 12 19;-9 -20 -33;4 9 15]每个元素的指数(e的幂次)

>> A=[6 12 19;-9 -20 -33;4 9 15];
>> exp(A)

ans =

   1.0e+08 *

    0.0000    0.0016    1.7848
    0.0000    0.0000    0.0000
    0.0000    0.0001    0.0327
3.2.3 复数函数

image-20210928205653054

例如,计算矩阵A=[6 3+4i -19;5 1-1i 2;-4 0 15]每个元素的模

>> A=[6 3+4i -19;5 1-1i 2;-4 0 15]

A =

   6.0000 + 0.0000i   3.0000 + 4.0000i -19.0000 + 0.0000i
   5.0000 + 0.0000i   1.0000 - 1.0000i   2.0000 + 0.0000i
  -4.0000 + 0.0000i   0.0000 + 0.0000i  15.0000 + 0.0000i

>> abs(A)

ans =

    6.0000    5.0000   19.0000
    5.0000    1.4142    2.0000
    4.0000         0   15.0000
3.2.4 截断和求余函数

image-20210928205719857

image-20210928205734742

例如,分别使用 fix() floor() ceil() round(),对向量A的每个元素进行截断运算

>> A=[-1.55 -1.45 1.45 1.55];
>> Y=[fix(A) ; floor(A) ; ceil(A) ; round(A)]

Y =

    -1    -1     1     1
    -2    -2     1     1
    -1    -1     2     2
    -2    -1     1     2

例如,分别使用函数mod() rem(),对 -5/2 进行求余

>> rem(-5,2)

ans =

    -1

>> mod(-5,2)

ans =

     1

第四章 基本编程

matlab可以进行程序设计,编写扩展名为.m的M文件,M文件的语法规则与C语言几乎一致

将有关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕

显示M文件内容,最简单的方法就是使用type命令

创建M文件,通过file → new → M-file

4.1 M文件基础

M文件有函数和脚本两种格式

4.1.1 函数

function关键词为引导,定义函数名为test,输入参数x,输出参数y

注意函数名和文件名必须相同

image-20211013210617214例如,建立一个函数文件将变量a和b的值互换,然后在命令窗口调用该函数文件

image-20211013210959650

4.1.2 脚本

可包含matlab的各种命令,类似于dos系统中批处理文件

前3章在命令窗口输入的每个代码或代码序列,都可以分别复制到新建M文件中然后保存为.m文件

运行方法:将脚本所在的目录设为当前的工作目录,debug菜单 → run

创建并运行脚本举例

image-20211013211614795

函数中的变量(特殊声明除外)都是局部变量,脚本的变量都是全局变量,驻留在matlab工作空间里,只要不关闭matlab,不使用clear清内存,这些变量将一直保存

4.2 变量和语句

4.2.1 变量类型

必须以字母开头,之后可以是任意字母数字下划线

image-20211013212103775

全局变量的声明:global var1 var2

全局变量说明:

  1. 使用前先定义,建议放在函数体的首行位置

  2. 建议采用大写字母命名;

  3. 全局变量会破坏程序的独立性,不利于模块化,不推荐使用

例如,创建脚本script2.m和function2.m

image-20211013213053250

image-20211013213035235

举例进一步理解全局变量:

image-20211013213426058

image-20211013213500287

image-20211013213514156

4.2.2 程序控制结构
  • 顺序结构

    image-20211013214218792

  • 循环结构

    for循环

    for 循环变量=起始值:步长:终止值
    	循环体
    end
    

    例一

    %求1+3+5+7+9
    %sum = 25
    
    clc
    sum=0;
    for i=1:2:10 
       	sum=sum+i;
    end
    sum
    

    例二

    %求1!+2!+3!+ … +5!的值
    %sum = 153
    
    clc
    sum=0;
    for i=1:5
        pdr=1;
        for k=1:i
            pdr=pdr*k;
        end
        sum=sum+pdr;
    end
    sum
    

    while循环

    while 表达式
          循环体
    end
    

    例一

    %求1到100和
    %sum = 5050
    
    clear
    sum=0; i=0;
    while i<100
    	i=i+1;
    	sum=sum+i;
    end
    sum
    
  • 选择结构

    if-else-end

    if  表达式
        程序模块1
    elseif
        程序模块2
    elseif
        程序模块3
    else
        程序模块4
    end
    

    例如

    clear
    n=input('输入n= '); 			
    if n>=90
        r='A'
    elseif n>=80
        r='B'
    elseif n>=70
        r='C'
    elseif n>=60
        r='D'
    else
        r='E'
    end
    

    switch-case-otherwise

    switch  表达式
    	case 数值1
    		 程序模块1;
    	case 数值2 
    	     程序模块2;
    	otherwise
    		 程序模块n
    end
    

    例如

    clear
    n=input('输入n= '); 
    switch fix(n/10)              
        case {10,9}
            r='A'
        case 8
            r='B'
        case 7
            r='C'
        case 6
            r='D'
        otherwise
            r='E'
    end
    
  • 其他语句

    break

    continue

    return

  • 容错函数

    error

    try-catch-end

  • 时间运算函数

    image-20211013220908611

    >> date
    
    ans =
    
        '13-Oct-2021'
    
    >> calendar
                       Oct 2021
         S     M    Tu     W    Th     F     S
         0     0     0     0     0     1     2
         3     4     5     6     7     8     9
        10    11    12    13    14    15    16
        17    18    19    20    21    22    23
        24    25    26    27    28    29    30
        31     0     0     0     0     0     0
        
    >> datevec('12/24/1984 12:45')
    
    ans =
    
            1984    12     24     12     45      0
    
  • 人机交互命令

    pause 等待用户反应

    echo命令

    input 用户输入提示

    keyboard 请求键盘输入

  • 输出命令

    disp

    image-20211013221502329

    fprintf

    fprintf(fid,format,variables)
     %e ( 采用科学计算形式 )
     %f ( 采用浮点数形式 )
     %g ( 由系统自动选取上述两种格式之一 ) 
     %s ( 输出字符串 ) 
     %d ( 十进制数 ) 
     \n ( 换行 )  
     \t ( 制表符 ) 
     \b ( 退格 )  
     \\ ( 反斜杆 )    
     %% ( 百分号 ) 
    

    image-20211013221733617

第五章 数据显示及存取

二维作图机制:先画点再连线

5.1 二维绘图

函数plot()

plot(y)是基本二维绘图函数

y是向量:下标为横坐标,元素值为纵坐标

y是实数矩阵:分别绘制y的各列向量

y是复数向量:实部为横坐标,虚部为纵坐标

image-20211020134004759

image-20211020134125302

函数plot(x,y)

x, y 都是向量:以 x 为横坐标, y 为纵坐标作平面曲线,x, y 必须具有相同长度。

x, y 都是矩阵:将 x 的列和 y 中相应的列相组合,绘制多条平面曲线,x, y 必须具有相同的大小

x 是向量, y 是矩阵:

若 x 的长度与 y 的行数相等,则将 x 与 y 中的各列相对应,绘制多条平面曲线

若 x 的长度与 y 的列数相等,则将 x 与 y 中的各行相对应,绘制多条平面曲线

x 的长度必须等于 y 的行数或列数

例:y=cos(x) 在 [0, 4*pi] 上的图像

image-20211020134636156

函数 plot(x,y,string)

参数s为指定字符,代表不同的线性、点标和颜色

image-20211020135025231

例如:数据点选为菱形,连接曲线选为红色点画线

image-20211020135522419

函数fplot()

fplot函数则可自适应地对函数进行采样,能更好地反应函数的变化规律

fplot函数格式:fplot(fname, lims, linespec)

fname为函数名,以@(x)f(x)形式出现,lims为变量取值范围,linespec定义绘图的线性、颜色等

例一

image-20211020140537778

例二

image-20211020140457836

函数ezplot()

函数ezplot()用于绘制函数在某一自变量区域内的图形

1、ezplot(f): 绘制f=0在默认区域-2pi<x<2pi内的图形

2、ezplot(f,[min,max]): 绘制函数在区域min<x<max内的图形

3、ezplot(f,[xmin,xmax, ymin, ymax]): 绘制函数f(x,y)=0在区域xmin<x<xmax, ymin<y<ymax内的图形

image-20211020140937039

5.2 三维绘图

函数plot3()

当x y z为长度相同的向量时,函数将绘制一条分别以 x0 y0 z0为 x y z轴坐标值的空间向量

当x y z都为mxn矩阵时,函数将绘制m条空间曲线

image-20211020141732537

函数mesh()

绘制由矩阵 X,Y,Z 所确定的曲面网格图, C用于确定网格颜色,省略时随Z值成比例变化

X和Y必须均为向量,若X和Y的长度分别为m和n,则z必须为mxn矩阵

绘制由函数 z=z(x,y) 确定的曲面时,首先需产生一个网格矩阵,然后计算函数在各网格点上的值

网格生成函数:meshgrid
[X,Y]= meshgrid(x,y)
若 x = y, 则可简写为 
[X,Y]= meshgrid(x)

image-20211020154421748

绘制等高线 meshc()

image-20211020154815936

绘制边界面屏蔽 meshz()

image-20211020154904803

函数surf()

surf(X,Y,Z) 绘制由矩阵 X,Y,Z 所确定的曲面图,参数含义同 mesh
mesh 绘制网格图,surf 绘制着色的三维表面图

image-20211020155029513

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mosek是一种高性能的数学优化工具,可以在MATLAB中使用。下面是使用Mosek的一般指南: 1. 安装Mosek:首先,你需要从Mosek官方网站下载并安装Mosek软件包。根据你的操作系统选择适当的版本,并按照官方提供的安装说明进行安装。 2. 配置MATLAB环境:在MATLAB中使用Mosek之前,你需要将Mosek添加到MATLAB的搜索路径中。可以通过在MATLAB命令窗口中运行以下命令来实现: ``` addpath('mosek安装路径') ``` 3. 引入Mosek:在MATLAB脚本或函数中,你需要使用`import`语句引入Mosek的相关类和函数。例如: ``` import mosek.* ``` 4. 创建优化模型:使用Mosek进行数学优化时,首先需要创建一个优化模型对象。可以使用`Model`类来创建一个空的优化模型。例如: ``` model = Model(); ``` 5. 定义变量:在优化模型中定义变量,可以使用`variable`方法。例如,定义一个实数变量: ``` x = model.variable('x', n, Domain.inRange(lb, ub)); ``` 其中,`n`是变量的维度,`lb`和`ub`分别是变量的下界和上界。 6. 添加约束:使用`constraint`方法向优化模型中添加约束条件。例如,添加一个线性不等式约束: ``` model.constraint('c1', Expr.dot(a, x), Domain.lessThan(b)); ``` 其中,`a`是系数向量,`b`是约束的右侧常数。 7. 设置目标函数:使用`objective`方法设置优化模型的目标函数。例如,设置线性目标函数: ``` model.objective(ObjectiveSense.Minimize, Expr.dot(c, x)); ``` 其中,`c`是目标函数的系数向量。 8. 求解优化问题:使用`solve`方法求解优化问题。例如: ``` model.solve(); ``` 9. 获取结果:可以使用不同的方法来获取优化结果,例如获取变量的取值: ``` x_val = model.getPrimalSolution(x); ``` 以上是使用Mosek进行数学优化的一般指南。如果你有具体的问题或需要更详细的指导,请提供更具体的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值