zoukankan      html  css  js  c++  java
  • 遇到过的MATLAB函数小总结

    由于MATLAB中用过的函数总是会忘,于是想总结一下。虽然没什么时间去复习(也没这个必要),用的时候直接百度就完事了。但总结一遍总会有那么一丁点用吧,慢慢更新,持续更新,见到一个新的且有意义的就总结下来!电脑端可直接Ctrl+F搜索想看的函数。

    一:常用乱七八糟函数

    randint

    旧的输出整数矩阵,新版MATLAB用randi代替了,但是参数不太一样
    randint(1,LEN,MAX)
    >> 输出1行,LEN列矩阵,范围为0 ~ MAX - 1
    

    randi

    输出整数矩阵
    randi([0, MAX], 1, LEN)
    >> 输出1行,LEN列矩阵,范围为0 ~ MAX,均匀分布整数
    randi(MAX, 1, LEN)
    >> 输出1行,LEN列矩阵,范围为1 ~ MAX,均匀分布整数
    

    randn

    randn(ROW, COL)
    >> 输出ROW行COL列符合标准正态分布的随机数N(0,1)
    

    normrnd

    normrnd(mu, delta, 1, LEN)
    直接输出1行,LEN列符合正态分布N(mu,delta^2)的随机数,注意输入为标准差
    

    rand

    rand(ROW, COL)
    >> 输出ROW行COL列符合[0, 1]间均匀分布的随机数
    

    unidrnd

    unidrnd(n, ROW, COL)
    >> 输出(0, n]之间的离散均匀分布随机整数
    

    randperm

    输出不重复随机向量排列
    randperm(6)
    >> 3 2 6 1 4 5
    

    eval

    可以做到类似str2dec操作
    eval('123')
    >> 123
    

    findstr

    找到字符串的下标(从1开始)
    findstr('asdfgasdfgaasdf','as')
    >> 1 6 12
    

    find

    找到数组非零元素
    findstr([1 2 3; 1 2 3; 1 2 3])
    >> 1 2 3 4 5 6 7 8 9
    

    vpa

    设置变量的精度,比如运算过程中a = 3.141
    vpa(a, 8)
    >>a = 3.14159265
    

    linspace

    输出x到y,固定点数n,点之间间隔相等的的一串向量。不设n默认100点
    linspace(x,y,n)
    

    conj

    求共轭
    

    floor

    地板函数,向下取整
    

    ceil

    天花板函数,向上取整
    

    mod

    mod(x,y),取模(余),结果与y的符号一致,注意与rem的区别
    mod(-10,3)
    >> 2
    因为-10 = -4 * 3 + 2
    
    mod(10,-3)
    >> -2
    因为10 = -4 * -3 + (-2)
    

    rem

    rem(x,y),取余,结果与x的符号一致,注意与mod的区别
    rem(-10,3)
    >> -1
    因为-10 = -3 * 3 + (-1)
    
    rem(10,-3)
    >> 1
    因为10 = -3 * -3 + 1
    

    round

    四舍五入
    

    二:矩阵简单变换

    fftshift、ifftshift

    前半后半交换,目的是为了傅里叶变换后频谱中心为0Hz对称
    ifftshift([1 1 1; 2 2 2; 3 3 3; 4 4 4])
    >> 3 3 3; 4 4 4; 1 1 1; 2 2 2
    

    circshift

    循环按行移位
    circshift([1 1 1; 2 2 2; 3 3 3; 4 4 4], 1)
    >> 4 4 4; 1 1 1; 2 2 2; 3 3 3
    

    reshape

    将向量或矩阵A重新排列成M行N列,注意MATLAB先行后列读取和写入
    reshape(A, [M, N])
    

    strcat

    将字符串拼接在一起,注意MATLAB中string和char没什么区别,可以混用的感觉
    strcat('qwe', '123', 'ok')
    >> 'qwe123ok'
    

    size

    返回矩阵A每维度的长度
    size(A)
    

    diag

    输入矩阵的话,返回矩阵对角线元素;
    输入向量的话,返回以向量为对角线的方阵
    

    eye

    产生单位矩阵
    eye(3)
    

    isempty

    矩阵A是否为空(什么数都没有才为空)
    

    mean

    求均值,当输入为矩阵时,求每一列的均值         
    

    trace

    计算输入矩阵主对角线元素之和
    

    diff

    求差分(或者说导数),等于后一个数减前一个数的值,输入为矩阵时按列求
    diff([1, 2, 4, 7])
    >> 1 2 3
    

    setdiff(A, B)

    找到A里面除了B里数据的下标
    setdiff([1 2; 3 4], [1 6 4])
    >> 2
       3
    

    repmat(A, ROW, COL)

    将矩阵A进行ROW行COL列平铺
    repmat([1 2], 2, 2)
    >> 1 2 1 2
       1 2 1 2
    

    squeeze(A)

    删除矩阵A中长度为1的维度
    

    permute

    置换矩阵A维度
    permute(A, [2 1 3])
    

    kron

    返回矩阵A和B的Kronecker张量积
    
    A = 1 -2  B = 4 -3
       -1  0      2  3
    kron(A, B)
    
    >> 1*4  1*-3  -2*4 -2*-3
       1*2  1*3   -2*2 -2*3 
    
      -1*4 -1*3   0*4  0*-3
      -1*2 -1*3   0*2  0*3
    

    cumsum

    累加和,类似斐波那契数列这种,第n个数返回前n个数的和
    A = 1 2 3
        4 5 6
    cumsun(A)
    
    >> 1 2 3
       5 7 9
    

    unique

    去重,元素和向量的重都可以去
    a = 1 1 2 3
    unique(a)
    >> 1 2 3
    
    A = 1 2 3
        1 2 3
        2 3 4
    unique(A, 'row')
    >>  1 2 3
        2 3 4
    
    

    三:集成复杂操作

    fft(A, FFTSIZE)、ifft(A, FFTSIZE)

    对矩阵A进行FFTSIZE点fft、ifft,按列进行
    

    svd

    [U, S, V] = svd(A)
    A的奇异值分解,S降序排列
    

    awgn

    awgn(in, snr)
    对输入信号in添加信噪比为snr的高斯白噪声,注意snr单位dB
    

    inv/pinv

    非奇异矩阵/奇异矩阵求逆
    

    eig

    求矩阵特征向量和特征值,特征值在主对角线上,从小到大排列
    a = [3 0; 0 0]
    [v, d] = eig(a)
    >> v = 0 1
           1 0
    
       d = 0 0
           0 3 
    

    orth

    求矩阵A所有列的标准正交基,对所有列进行施密特正交化也能求标准正交基(注意结果的列数等于A的秩)
    A = 1 0 0 
        0 2 0
    orth(A)
    >>  0 1
        1 0
    

    null

    求矩阵A的零空间的标准正交基,A * null(A) = 0。也等于对A进行svd分解右酉矩阵对应奇异值为0的那几列
    A = 1 0 0 
        0 2 0
    null(A)
    >>  0
        0
        1
    

    rref

    得到矩阵A的简化行阶梯型矩阵
    A = 1 1 1
        0 2 0
    [R, p] = rref(A)
    >> 
    R = 1 0 1
        0 1 0
    
    p = 1 2 (p返回阶梯所在的行号)
    

    sort(A, dim)

    把矩阵A按第dim维度排序,res返回排序后的值,index返回排序后每个数据的原位置指示
    [res, index] = sort([1 4; 2 3], 1)
    >> res = 
       1 3
       2 4
       index = 
       1 2
       2 1
    

    norm

    求范数
    1>输入向量时
    norm(a, 2)
    求向量a的2范数(平方和再开根)
    2>输入矩阵时
    norm(A, 2)
    求矩阵A的2范数(sqrt(A最大奇异值))
    =max(svd(A)) = eig(A'*A)中最大特征值开根号
    norm(A, 'fro')
    求矩阵A的F范数(所有元素的平方和再开方,可以表现矩阵的能量)
    

    fi

    定点化操作
    a = fi(-0.789, 1, 16, 15)
    把-0.789转化成16位,小数占15位的有符号定点数
    a.bin >> '1001101100000010'
    a.hex >> '9b02'
    a.dec >> '39682'
    -0.789*2^15 + 2^16 也等于39682(定点负数取补码) 
    

    solve

    可以解一元方程
    syms x
    eq = 1000*(0.9)^x == 200
    double(solve(eq,x))
    >> 15.2755
    

    四:画图

    plot、stem

    先来个画图全家桶
    subplot(2,1,1);
    plot(t,y1,,'g',t,y2,'r');
    legend('微分信号','信号包络');
    title('已调信号微分后时域图'); xlabel('时间(s)'); ylabel('幅度');
    xlim([0 10]);ylim([0 10])
    

    scatterplot

    输入一串复数,输出所有数的复平面的位置图。输出星座图时使用
    ```matlab
    
    text
    ```matlab
    在图像中添加文字
    text(2.1, 3.2, 'txt', 'r')
    >> 在坐标(2.1, 3.2)处添加红色的文字'txt'
    

    semilogy

    绘制对数纵坐标图,纵坐标为10^i
    

    五:图像处理

    ginput

    
    

    imresize

    
    

    imshow

    
    

    六:比特位运算相关

    xor

    异或
    xor([0 1 0], [1 1 1])
    >> 1 0 1
    

    bitget

    输出数字a在指定比特位上的比特值
    a = 8
    bitget(a, 1 : 5)
    >> 0 0 0 1 0
    

    七:类型转换

    dec2bin、bin2dec

    十进制转二进制字符串
    b = dec2bin([1 2; 3 4])
    >>  '001'
        '011'
        '010'
        '100'
    
    二进制字符串转十进制
    d = bin2dec(b)
    >> 1
       3
       2
       4
    

    num2str

    将数组原封不动的转换成字符数组形式
    num2str([1 2; 3 4])
    >> '1 2'
       '3 4'
    

    八:文件相关

    fopen

    fid = fopen('.../xx.dat', 'w+')
    打开某地址指定的文件,成功返回一个正数
    

    fprintf

    fprintf(fid, '%04x
    ', data)
    将data数据,按照规定的格式,写入到fid指定的文件中。注意data按列写
    

    fscanf

    按规定的格式读取数据到矩阵中
    A = fscanf(fid, '4x')
    

    fgetl

    读取文件的一行,下一次读会自动跳到下一行
    fgetl(fid)
    

    feof

    判断当前文件是否到读完,读完了返回1,否则返回0
    feof(fid)
    

    fclose

    fclose(fid)
    关闭fid指定的文件
    

    九:结构体元胞数组相关

    isfield

    判断结构体中是否包含某个字段,包含返回1,不包含返回0
    a.a1 = 'aaa';
    isfield(a, 'a1')
    >> 1
    

    fieldnames

    把结构体的字段名称输出为一列元胞数组
    a.a1 = 'aaa'; a.a2 = 123;
    fieldnames(a)
    >> {'a1'}
       {'a2'} 
    

    struct2cell

    把结构体存储的变量输出为一列元胞数组中
    a.a1 = 'aaa'; a.a2 = 123;
    struct2cell(a)
    >> {'aaa'}
       {123}
    

    cell2struct

    
    

    cell2mat

    将cell中的数据转换成矩阵形式(可以拼接相同格式的数据)
    a = {[1 2]} {2 1}
    cell2mat(a)
    >> [1 2 2 1]
    
    b = {'aaa'}; {'bbb'}
    cell2mat(b)
    >> 'aaa'
       'bbb'
    
  • 相关阅读:
    动态规划算法
    MapReduce学习笔记(4)
    MapReduce学习笔记(3)
    MapReduce学习笔记(2)
    Intellij IDEA output 中文乱码
    Spring实例化bean的三种方式
    Spring框架捕获所有URL的请求的处理方案
    异常解决:Mapped Statements collection does not contain value for …
    Java包 package 的命名规范, 命名规则
    拦截器 Filter : js、css、jpg、png等静态资源不被拦截解决方案
  • 原文地址:https://www.cnblogs.com/gjblog/p/14321065.html
Copyright © 2011-2022 走看看