Matlab学习笔记(1)

Matlab学习笔记(1)

苏苏
2022-09-20 / 0 评论 / 22 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年04月05日,已超过849天没有更新,若内容或图片失效,请留言反馈。

第一章 功能

  • 每条命令以 ; 结束
  • clc; 清屏命令
  • clear; 清理内存
  • % 注释标记
  • %{
     段注释
    %}

    例1 解方程

    $$ 3x^4-2x^3-5x^2-4x-4=0 $$

    clc;   %清屏
    clear;  %清理内存
    A=[3, -2, -5, -4, -4]; %各项的系数构成的矩阵
    X=roots (A);   %核心处理命令
    X  %显示所有解
    注意:求得的根包含复数解。

    例2:解方程组(鸡兔同笼)

    鸡兔同笼九十九,二百条腿地上走,问鸡、兔各几只?

    建立方程组,设x为鸡数,y为兔子数,则有方程组

    $$ \begin{cases} x+y=99\\ 2x+4y=200 \end{cases} $$

    程序如下:

    % 鸡兔同笼
    A=[1, 1; 2, 4];
    B=[99; 200]; 
    % C=inv(A)*B;   %核心处理命令,或改为C=A\B; 执行更快
    %{
     inv 对矩阵求逆,使用inv时,必须对象为方阵。
     /表示右除,\表示左除
    %}
    C=A\B;
    [C(1),C(2)]

    例3 求方程组的解(两曲线的交点)

    例如:

    $$ \begin{cases} y=x+3\\ y=6x-5 \end{cases} $$

    方案1

    clc,syms x y    % 定义变量x,y
    [x,y]=solve(y==x+3,y==6*x-5)   %输出结果为表达式(分数等);必要时用double/eval函数转换

    方案2

    改为用矩阵除法求解,原方程组改为

    $$ \begin{cases} x-y=-3\\ 6x-y=5 \end{cases} $$

    A=[1,-1;6,-1]; %等号左侧各项系数;
    B=[-3;5]; %等号右侧数据,每行一个常数
    C=A\B

    例4 绘图

    x=0:0.02:2*pi;
    y=sin(x);
    z=cos(x);
    p=sin(x).*cos(x);
    plot(x,y,x,z,x,p);
    axis equal;
    axis auto;

    绘图结果

    l8a6bu74.png

    第二章 数据及其输入输出

    常量与变量

  • 常量:数值型、字符型、矩阵等
  • 变量:无需声明,变量名通常以字母开头,可包含数字和下划线,区分大小写。数据类型由其值的数据类型决定
  • 有符号常量:如pi(π),inf(无穷大)、nan(not a number,无效数据)、eps(接近于0的极小数字ε)

    数据类型

  • 数值型:数字
  • 文本型:左右要加上西文单撇号定界符
  • 逻辑型:结果只有两个数据——0或1。0表示假(不成立),1表示真(成立)
  • 数组/矩阵/向量:数据两侧以方括号包围,数据之间以空格或逗号隔开,以分号换行。可写在一行或多行

    函数

  • zeros:零矩阵。得到若干行列的0。如zeros(10); zeros(4,5)
  • ones:1矩阵。得到若干行列的1。如ones(5); ones(3,4)
  • size:得到矩阵的行列数。size(zeros(4,5)); size(3*ones(3,4))
  • fliplr:矩阵左右翻转
  • flipud:矩阵上下翻转
  • rot90:矩阵逆时针旋转90度
  • rand:随机数,格式:rand(m,n)。m、n均为正整数,均为0-1之间的纯小数
  • randn:函数产生的函数值可正可负。用法与rand相同
  • linspace:生成线性间距向量。格式:linspace(n1,n2,n)。三个参数均为正整数,初值,终值,数据个数(缺省为100)
  • 数学类函数格式和用法与其他语言相似。如:sin(x)、cos(x)、abs(x)、sqrt(x)等

    运算符与表达式

  • 算术运算符: + - * / ^
  • 矩阵运算符:.* ./ .^
  • 冒号运算符::。可用于生成一个矩阵。经常用到的形式有:
    n : m——表示从n开始,到m结束,增量为1的数据序列。
    i : j : k——表示从i开始,到k结束,增量为j的数据序列。
  • 关系(比较)运算符:==(恒等于)、>、<、>=、<=、~=(不等于)
  • 逻辑运算符:逻辑与&,或用and函数;逻辑或|,或or函数;逻辑非~,或not函数

    数据的复制

  • A=10.5; % 直接赋值
  • B=[1, 2, 3, 4; 6, 7, 4, 2; 6, 8, 7, 0]; % 3行4列的矩阵(可以换行)
  • 可以从Excel等窗口粘贴大量数据
  • 可以用相应函数(textread、xlsread、importdata、load)读入(xlsread需要在excel中的加载项进行设置)

    [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
    importdata('MKMATLAB.txt');     
    x=importdata('H:\dat\x.txt') % (提倡!)
    x=load('H:\dat\x.txt')
    x=xlsread('D:\matlab\xdata1.xls',1,'A1:A53');
    在txt文件输入原始数据时,用逗号(或表格符/Tab键)分隔,前后不必加[ ],回车换行。
    不要用空格分隔,不要用“;”换行。
  • D=1:2:12; % 1行的矩阵,起始值1,增量为2,可能的最大值为12
  • F=1:20; % 1行的矩阵,默认增量为1

    whowhos 命令可显示当前系统中的变量情况
    clearvars 命令可清除系统保留的变量信息
    clear all 命令清理所有变量、函数……等

    动态输入数据

  • input('按任意键继续…'); %划横线的部分为提示性文字(中英文等)。
  • D= input('请输入一个数字:');

    数据的输出

    输出方式有以下几种:

  • 变量名。后面不加任何符号,直接回车。系统先显示"xx=",而后在下一行显示具体数据。
  • 变量1, 变量2, 变量3…… %作为多个数据项分多行显示,
  • [变量1, 变量2, 变量3……] %作为一个数组/矩阵在一行内显示(仅当变量只有一个值时使用)
  • disp (数组变量名); 如:M=[1.2, 3.4, 5.6, 7.8]; disp(M);
  • disp([变量1, 变量2, 变量3…])
  • 用fprintf函数

    A=2; B=5; C=6;
    fprintf('%d\n',A,B,C);  %每行显示一个数据,自动换行
    H=[12 34 56 78 89];
    fprintf('%d\n',H);
    L=123.56789;
    fprintf('L=%6.2f\n',L); %可以控制小数位

    第三章 程序设计初步

    顺序语句。依次输入、执行

    举例:方程(组)求解。可用solve函数。
    变量名=solve(方程式1,方程式2,…,方程式n)

    求解方程组:$ x+y=10,2*x-y=2$

    方法一

    syms x y;
    [x,y]=solve(x+y==10,2*x-y==2);
    x=double(x), y=double(y); %结果是分数,可用eval/double函数转化为实数。
    disp([x ,y]);

    方法二

    A=[1 1;2 -1];
    B=[10;2];
    C=A\B;
    disp([C(1), C(2)]);

    条件和分支语句

    简单条件判断

    for i=0:1:100
      if mod(i, 3) == 0
          disp([num2str(i), '是3的倍数']);
      elseif mod(i, 3) == 1
          disp([num2str(i), '不是3的倍数,余1']);
      else
          disp([num2str(i), '不是3的倍数,余2']);
      end
    end

    多分支条件语句

    for i=0:100
    switch mod(i, 3)
        case 0
            disp([num2str(i), '是3的倍数']);
        case 1
            disp([num2str(i), '不是3的倍数,余1']);
        otherwise
             disp([num2str(i), '不是3的倍数,余2']);
    end
    end

    循环语句

    计数循环

  • 求$ 10! $

    for i=0:3:100
      disp(i)
    end

    条件循环

  • 求$ 1+2+……50 $

    i=0;
    s=0;
    while i<50
      i=i+1;
      s=s+i;
    end
    disp(s);

    流程控制语句

    for i=0:1:100
      if i==0
          disp('现在i=0,按任意键继续');
          pause; % 暂停。按任意键继续
      elseif i==80
          disp('现在i=80,休息5秒继续');
          pause(5); % 暂停n秒
          disp('继续');
      elseif i==90
          disp('现在i=90,忽略本次循环');
          continue; % 忽略本次循环
          disp('现在i=90,忽略本次循环');
      elseif i==95
          disp('现在i=95,结束');
          break; % 跳出循环
      end
    end
    Ctrl+C 强制停止脚本

    自定义函数

  • 求最值函数

    定义函数

    %% 在同目录下的max_min_value.m文件,写入如下代码
    function [max,min] = max_min_value(X)
    min=Min(X);
    max=Max(X);
    function r=Max(X)
      x1=sort(X,'descend');
      r=x1(1);
    end
    function r=Min(X)
      x2=sort(X);
      r=x2(1);
    end
    end

    调用函数

    A = [1,3,5,4,8,5,9,4,6,1,7,5,4,8,9,6,2];
    [m,n]=max_min_value(A);
0

评论 (0)

取消