• Matlab 基础与应用


    • matlab是 矩阵实验室 的简称
    • matlab 的基本语法
      • Matlab中的预定义变量
        • ans
        • pi
        • eps
        • Inf
        • NaN
        • realmax
        • disp
      • 变量赋值和访问
          1. vec1 = [1,2,3]; %产生一个行向量
          2. vec2 = [1,2,3]'; %产生一个列向量
          3. vec3 = [1:0.5:3] %产生一个第一个元素为1
          4. %最后一个元素不超过3
          5. %步长为0.5的等距行向量
          6. mat1 = [1,2,3;3,4,5] % 2x3
          7. mat2 = zeros(3,4) % 3x4 O
          8. mat3 = ones(3,4) % 3x4 1
          9. mat4 = eye(4); % 4阶单位矩阵
          10. m12 = mat1(2,3) % 矩阵第二行第三列的元素

      •  Matlab 中的简单运算
        • 点运算 
          1. x = [1,2,3];
          2. x = x.^2; %[1,4,9]
          3. y = [2,3,4];
          4. y = x.*y; %[2,12,36]

      •  绘制图像  f(x)=sin(x)*cos(x^2),0<=x<=2\pi
          1. x = [0:0.1:2*pi];
          2. y = sin(x). *cos(x.^2);
          3. plot(x,y,"r-")
      • Matlab 中的关系和逻辑运算
          1. x = randperm(4); %产生1-4的随机排列
          2. y = randperm(4);
          3. c0 = (x>y); %一种可能的结果(1,1,0,0)
          4. c1 = ~(x>y); %取反
          5. c2 = (x>2) & (x<4); %与运算
          6. c3 = (x>2) | (x<4); %或运算
          7. a = 1;
          8. b = sqrt(2);
          9. a==1 && b==1;
          10. a==1 || b==1;

      •  Matlab  中的复数运算
          1. x = 1+2i'
          2. z = complex(2,3);
          3. real(z); %2
          4. imag(z); %3
          5. angle(z); %辐角运算

      • Matlab  循环结构
        •  for-end
        •  while-end
      • Matlab  选择结构
        • if-elseif-else-end
        • swithc-case-otherwise-end
            1. result = 78;
            2. switch(result)
            3. case 52
            4. disp("result is 52.")
            5. case {52,78}
            6. disp("result is 52 or 78")
            7. otherwise
            8. disp("no result!")
            9. end
      • Matlab  向量运算和操作符
          1. A = [1,2,3;4,5,6];
          2. B = A/2;
          3. C = A+B;
          4. D = A*B';
          5. E = diag(A); %取对角元素,生成列向量
          6. r1 = A(1,:) %第一行
          7. c2 = A(:,2) %第二列
          8. A(1,[1,3]) %第一行 第一列 第三列
          9. A([1,2],[1,3]) %[1,1],[1,3],[2,1],[2,3]
          10. d = r1(2:end) %取2-最后一个元素

    • Matlab 编程的一些技巧
      • 列访问的速度高于行访问
      • 避免循环,调用内置函数
      • 以逻辑索引代替数值索引
          1. A = rand(10000);
          2. tic;
          3. B=A(find(A>0.3 & A<0.7));
          4. toc;
          5. tic;
          6. C = A((A>0.3&A<0.7));
          7. toc;

      • 尽量提前分配内存
          1. n = 3000;
          2. tic;
          3. for k = 1:n
          4. a(k)=1;
          5. end
          6. b = zeros(1,n,"double")
          7. toc;
          8. tic;
          9. for k=1:n
          10. b(k) = 1;
          11. end
          12. toc;
          13. 历时 0.012460 秒。
          14. 历时 0.000736 秒。

      • 尽量做向量化计算
      • 尽量不用Cell型数组
      • 尽量采用稀疏矩阵
      • pi的使用
          1. %表示pi
          2. PI = 4*atan(1)

      • Matlab高维数组
        • 创建
            1. clc;
            2. D = [1,2,3;2,3,4;3,4,5];
            3. Dd(:,:,1)=D;
            4. Dd(:,:,2)=2*D;
            5. Dd(:,:,3)=3*D;
        • 高维数组的访问
            1. sum(Dd,3)
            2. ans =
            3. 6 12 18
            4. 12 18 24
            5. 18 24 30

    • 有趣的例子
      • 去掉矩阵中全为0的行和列
          1. A = [[0,0,0],
          2. [1,0,2],
          3. [1,0,2],
          4. [1,0,2]];
          5. A(:,~sum(abs(A),1))=[];
          6. A(~sum(abs(A),2),:)=[];
          7. disp(A)
          8. 1 2
          9. 1 2
          10. 1 2

    • 自定义函数
        1. function [rtn1,rtn2] = functionName(x,y)
        2. rtn1 = x+y;
        3. rtn2 = x*y;
        4. end
        5. %保存在同一目录下,
        6. %调用
        7. x = 1;
        8. y = 3;
        9. [rtn1,rtn2] = functionName(x,y);
    • 匿名函数
      • 匿名函数语法
          1. %匿名函数语法
          2. fhandle = @(arglist1)@(arglist2) expr
          3. f = @(x) x.^2;
          4. g = @(a,b)@(x) a*x+b;
          5. x = linspace(0,1,10);
          6. plot(x,f(x));
          7. g1 = g(1,2)
          8. plot(x,g1(x))
        •  
          1. f = @(a) @(x) exp(x)+x^a+x^(sqrt(x))-100;
          2. g = @(a) fzero(f(a),4);
          3. aa = 0:0.01:2;
          4. ff = arrayfun(g,aa);
          5. plot(aa,ff,"r.-")

    • 符号运算
        1. syms x
        2. f = (x+tan(x))^(sin(x));
        3. c = diff(f,3);
        4. funstr = ['@(x)' vectorize(c)];
        5. f3 = eval(funstr);
        6. x = linspace(0,1,100);
        7. plot(x,f3(x),'linewidth',2);
  • 相关阅读:
    php 实现paypal订阅
    高德地图实现gps轨迹坐标定位代码
    【Axure教程】鼠标右键显示菜单
    RabbitMQ 学习(五)-- 死信队列
    利用 spring test 实现自动启动spring 容器进行 JPA接口测试
    Spring AOP基础&动态代理&基于JDK动态代理实现
    PyTorch中的CPU和GPU代码实现详解
    【OpenVINO】量化流程
    跨时钟域问题(三)异步FIFO的Verilog实现(格雷码)
    【优化选址】基于matlab帝国企鹅算法求解工厂-中心-需求点三级选址问题【含Matlab源码 2081期】
  • 原文地址:https://blog.csdn.net/Chandler_river/article/details/126788582