当前位置: 首页 > news >正文

【数学建模|Matlab】Matlab「基础知识」和「基础操作」

- 第 114 篇 -
Date: 2025 - 07 - 22
Author: 郑龙浩(仟墨)

一 窗口认识

1 当前文件夹

最左侧有一个当前文件夹

最上方的横框中表示的就是当前文件夹的路径,可以将想打开的文件夹copy到这

2 命令行窗口 与 编辑器

命令行窗口:

在中间的是命令行窗口,是我们直接操作的地方

在这比如输入

1 + 2

按一下回车,就会得出:

ans = 3

可以直接进行计算

还可以定义变量,比如输入a = 3回车,再输入b = 5回车,再输入a - b得到

ans = -2

编辑器:

单击主页中的新建,选择脚本,此时就可以新建一个脚本,以.m结尾

这个脚本就在编辑器中打开了

可以提前将代码写在编辑器的注释中,然后想运行哪段代码,就选中那部分,然后右击,选择在命令行窗口执行所选内容之类的选项,就可以在命令行窗口中执行对应的命令了。

4 工作区

当输入命令的时候,右侧的工作区窗口内会显示当前的操作以及变量

二 基本知识与操作

1 命名规则

  • 变量名区分大小写
  • 变量名必须是以字母开头,可以是由字母、数字、下划线组成的,不可以有其他的字符
  • 变量名有对应的长度要求,但是一般不会写这么长,写的名字应该尽量简洁明了

2 清空命令和工作区

  • clear all 清空工作区窗口的所有变量(内容)
  • clc 清空命令行窗口的所有命令(内容)

3 注释

在matlab中如果想进行注释,两种

  • 两个百分号

    在开头和结尾需要写两个%%

    %% 注释
    123
    4556
    %%
    
  • %

    一行注释,只需要在某行的开头写一个%即可

    % 注释1
    % 注释2
    

4 数据类型 - 数字

1
23
56
全都是

5 数据类型 - 字符、字符串

% 字符
ch = 'a'
% 字符串
str = 'abcdef'

字符在内存中是以 ASCIl 码进行存储的,所以也是可以计算的,Eg:

字符‘a’的码:97

>> ch = 'a'
ch + 1
char(97)ch ='a'ans =98ans ='a'

char可以将对应ASCII码转为字符,length可以得出字符串长度

>> length('abc')ans =3

6 数据类型 - 矩阵

  • 矩阵的创建
>> A = [1 2 3; 4 5 6; 7 8 9]A =1     2     34     5     67     8     9
  • 矩阵的转置

    行变列,列变行

>> A'
ans =1     4     72     5     83     6     9
  • 将矩阵 A 的所有元素按列优先顺序重新排列成一个列向量
>> A(:) ans =147258369

这个会用于比如求和
在执行sum(A)的时候是将每一列求和,答案是 [5 7 9](即 1+4, 2+5, 3+6)

想要将所有元素求和,就得将A中的所有元素展开为列向量(A(😃),然后在求和

sum(A(:))   % 输出: 45
  • 矩阵的逆

    • 必须方阵

    • 如果矩阵是奇异或者非奇异会警告

    A = [1 2 3; 4 5 6; 2 3 5]
    inv(A) % 求矩阵的逆
    % 结果为:-2.3333    0.3333    1.00002.6667    0.3333   -2.0000-0.6667   -0.3333    1.0000
    
  • 两个矩阵的运算

    按照矩阵运算进行计算的

    A * B
    A / B
    A + B
    A - b
    % 结果
    >> A * B
    A / B
    A + B
    A - Bans =40     7    1988    22    4965    12    33ans =0.5984    0.1024   -0.02361.1890    0.7165   -0.16540.9370    0.0945    0.0551ans =2     5     810     7     711     3     9ans =0    -1    -2-2     3     5-7     3     1
    
  • 创建全为0的矩阵 二维三维都可以

    zeros(x,y,z)
    x为行
    y为列
    z为三维维度
    
    >> A = zeros(5)
    A = zeros(2, 5)
    A = zeros(2, 5, 3)A =0     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     0A =0     0     0     0     00     0     0     0     0A(:,:,1) =0     0     0     0     00     0     0     0     0A(:,:,2) =0     0     0     0     00     0     0     0     0A(:,:,3) =0     0     0     0     00     0     0     0     0
    
  • 单位矩阵

    生成单位矩阵(对角线为 1,其余为 0)

    eye(n)       % n×n 单位矩阵
    eye(m, n)    % m×n 的矩形单位矩阵
    
  • 幻方矩阵

    magic 英文:魔方

    各行、列、对角线之和相等

    magic(n)    % n×n 的幻方矩阵(n ≥ 3)
    

7 数据类型 - 元胞数组

① 基本介绍

其中每一个存储的独立数据单元叫做元胞

MATLAB 的元胞数组类似 C 中的结构体,但更灵活——每个单元可以存任意类型数据(数字、文本、矩阵等),无需像 C 那样提前定义类型,直接通过 {} 访问内容

在C中是这样

struct Data {int num;char str[10];float arr[2][2];
};
struct Data B = {10, "hello", {{1,2},{3,4}}};
printf("%s", B.str);  // 输出: hello

在matlab中是这样

disp()是输出函数

A = {10, 'hello', [1 2; 3 4]};  % 混合类型
disp(A{1});
disp(A{2});
disp(A{3});
%% 打印 10hello1     23     4
%%

② 使用{}创建元胞数组

B = {'text', 100, magic(3)};  % 创建1×3元胞数组
C = {1, 'a'; [2 3], true};    % 创建2×2元胞数组

③ 使用cell()创建元胞数组

D = cell(2,3);  % 创建2×3空元胞数组
D{1,1} = 'MATLAB';  % 填充数据
D{2,2} = 1:5;

元胞也可以存储矩阵

8 数据类型 - 结构体

(1)基本介绍

类似于Python中的字典

结构体是一种可以存储不同类型数据的容器

每个字段可以存数字、文本、矩阵等任意数据

(2)创建

% 方法1:直接赋值
student.name = 'matlab';
student.nums = 20;% 方法2:用 struct() 函数
teacher = struct('name', 'aaa', 'subject', 'Math');

(3) 访问字段/属性 ,修改新增字段

disp(student.name);  % 输出: matlab、
student.age = 21;  % 修改字段
student.grade = [90, 85];  % 新增字段

(4)student.name(1) vs student.name{1}

student.name(1)

  • 用于:结构体字段是普通数组/字符串

  • 作用:取字段内容的第1个元素 取出的是对应的数据类型的值

    student.name = 'Alice';
    student.name(1) % 输出 'A',取出的是字符
    

student.name{1}

  • 用于:结构体字段是元胞数组

  • 作用:取元胞数组的第1个元胞的内容,取出的是cell类型

    student.name = {'Alice', 'Bob'};
    disp(student.name{1});  % 输出 'Alice'(字符串,是元胞的内容)
    disp(student.name(1));  % 输出 {'Alice'}(cell 类型)
    

8 生成随机数

函数输出类型默认范围用途
rand浮点数[0,1)均匀分布模拟
randn浮点数N(0,1)正态分布模拟
randi整数[1,imax]离散随机选择
  • rand()

    功能:生成[0,1)均匀分布的浮点数

      rand(m,n)       % m×n矩阵rand([m n])     % 同上rand(size(A))   % 与A同维
    
  • randn()

    功能:生成标准正态分布(均值μ=0,方差σ²=1)的随机数

    randn(m,n)      % m×n矩阵
    
  • randi()

    功能:生成均匀分布的随机整数

    randi(imax)         % 1个[1,imax]整数
    randi(imax,m,n)     % m×n矩阵
    randi([imin,imax])  % 指定范围
    

三 矩阵操作

1 矩阵的创建

A = [1 2 3; 2 3 5; 4 5 2]
B = 1: 2: 9 % 生成等差数列的行向量
%% 特殊矩阵
zeros(m, n) % m * n 全零矩阵
ones(m, n) % m * n 全1
eye(m, n) % 单位矩阵
rand(m, n) % 范围[0,1), 均匀分布随机矩阵 m * n
randn(m, n) % 标准正态分布随机矩阵
magic(n) % 幻方矩阵
diag(v) % 对角矩阵
%%
函数作用
zeros(m,n)全零矩阵zeros(2,3) → 2×3零矩阵
ones(m,n)全1矩阵ones(1,4) → [1 1 1 1]
eye(m,n)单位矩阵(对角线为1)eye(3) → 3×3单位矩阵
rand(m,n)[0,1)均匀分布随机矩阵rand(2,2) → 2×2随机数
randn(m,n)标准正态分布随机矩阵randn(3,1) → 3×1随机数
magic(n)幻方矩阵(行、列、对角线之和相等)magic(3) → 3×3幻方
diag(v)用向量生成对角矩阵diag([1 2]) → [1 0; 0 2]

2 四则运算

如果不加.就是指的用矩阵的运算规则计算

如果.,就是指的对应元素相乘相除

% 定义修改后的矩阵(数值已调整)
A = [2  4  6  8; 10 12 14 16];
B = [3  3  1  1; 1  1  3  3];% 基础运算
C = A + B    % 矩阵加法
D = A - B    % 矩阵减法
E = A * B'   % 矩阵乘法(A × B的转置)% 逐元素运算
F = A .* B   % 点乘(对应元素相乘)
H = A ./ B   % 点除(对应元素相除)% 矩阵除法
G = A / B    % 矩阵右除(求解 G*B = A)
% 验证:G * B ≈ A

3 矩阵的下标

代码

A = magic(5);
disp(A) % 全部
disp(A(1, 2)); % 第1行,第2列
disp(A(2,:)); % 第2行,所有列
disp(A(:,4)); % 所有行,第4列

运行结果

17    24     1     8    15
23     5     7    14    16
4     6    13    20    22
10    12    19    21     3
11    18    25     2     92423     5     7    14    168
14
20
21
2

代码

find(A > 20) % 找到所有比20大的值,并且返回是第几个(横着数,到头换到下一行)
[m, n] = find(A > 20) % 找到比20大的所有的值,并将下标存到[m, n]
[m, n] = find(A == 21) % 找到等于21的所有的值,并将下标存到[m, n]

结果

n是行,m是列

ans =26151923m =21543n =12345m =4n =4

四 流程控制

其实和C中的还是挺像的

1 if…else…end

  • 可以嵌套使用
  • else和elseif是可选的,if必须写的
if 条件表达式% 条件成立时执行的代码
elseif 其他条件% 备选条件代码
else% 所有条件不满足时的默认代码
end

2 for…end

  • 步长默认为1,可以省略
  • 起始值、步长、结束值可以是:正数、负数或小数
  • 循环变量会在每次迭代后自动更新
for 循环变量 = 起始值:步长:结束值执行语句...
end

3 while…end

  • 在迭代前检查循环条件
  • 适合循环次数不确定的情况
  • 必须保证循环条件可以变为false,不然会死循环
while 循环条件% 循环体代码
end

4 switch…case…end

  • 比多个if else清晰得多
  • case值可以是 数值或字符串
  • otherwise 分支是可以去掉的
switch 表达式case1% 匹配值1的代码case ...% 联合处理代码...otherwise% 默认执行代码 --> 如果表达式的值不与上面任何一个匹配才执行这个
end

5 例题

1)求 1^2 + 2^2 + … + 5^2

>> sum = 0;
for n = 1:5sum = sum + n^2;
end
disp(sum)%% 答案    55

2)使用for循环求$$

\sum_{i=1}^{5} i!
$$ 的值

也就是1到5的阶乘之和

>> sum = 0;
for i = 1:5n = 1;for j = 1:in = n * j;endsum = sum + n;
end
disp(sum)
%% 答案   153

3)求 1 + 2 + 3 + … + 10 的和

>> sum = 0;
n = 1;
while n <= 10sum = sum + n;n = n + 1;
end
disp(sum)
>> sum = 0;
for i = 1:10sum = sum + i;
end
disp(sum)

结果:55

……

http://www.dtcms.com/a/292437.html

相关文章:

  • halcon处理灰度能量图
  • Android FFMPEG-播放器画面适配
  • 深入理解程序链接机制:静态链接、ELF加载与动态库实现原理
  • 三步构建智能办公体系
  • 330米地标背后的“智慧神经” —— 越秀国际金融汇电力系统案例解析
  • spring boot 集成netty,及其一些基本概念
  • 黑马点评练习题-给店铺类型查询业务添加缓存(String和List实现)
  • android模拟器手机打开本地网页
  • 科技向善,银发向暖:智慧养老与经济共筑适老未来
  • 如何给手机充电才不伤电池?
  • 未来趋势:LeafletJS 与 Web3/AI 的融合
  • ArcGIS水文及空间分析与SWMM融合协同在城市排水防涝领域中的应用
  • STM32项目分享:智能洗碗机
  • Java并发编程:JUC核心组件全解析
  • 牛客NC16625 [NOIP2009]分数线划定(排序)
  • 矿用支架电液控配件3针3孔钢丝编织橡胶护套连接器
  • 基于深度学习的语音情感识别系统的设计与实现【BiLSTM、多层感知神经网络、Emotion2Vec、与CustomFeature】
  • 对随机生成的html文件做标签简析
  • RPA软件机器人如何提高工作效率?
  • python 中什么是作用域(Scope)?为什么函数内部的变量在外部无法访问?
  • 【华为机试】547. 省份数量
  • How script location, CWD, and relative imports interact
  • TIM定时中断
  • 操作系统:系统调用(System Calls)
  • 风险识别清单:构建动态化的风险管理体系
  • 从 0 到 1 搞定 Intel 核显推流:硬件视频编码环境安装完整学习笔记
  • UE5 UI 水平框
  • GoLand 部署第一个项目
  • 智慧制造合同解决方案
  • 外网访问内部私有局域网方案,解决运营商只分配内网IP不给公网IP问题