【MatLab手记】 --从0到了解超超超详过程!!!

文章目录

  • MatLab笔记
    • 一、命令行窗口
    • 二、变量命名规则
    • 三、数据类型
      • 1. 数字
      • 2. 字符与字符串
      • 3. 矩阵
        • 3.1 矩阵创建
        • 3.2 矩阵的修改和删除
        • 3.3 矩阵的拼接与重构重排
        • 3.4 矩阵的运算方法
        • 3.5 矩阵的下标
      • 4. 元胞数组(类似数据容器)
      • 5. 结构体
    • 四、逻辑与流程控制
    • 五、函数
      • 1. 基础函数
      • 2. 匿名函数
      • 3. 常用函数
      • 4. 特殊函数
    • 六、绘图
      • 1. 二维图
      • 2. 三维图
      • 3. 图形窗口分割
  • 总结
  • 总结

MatLab笔记

一、命令行窗口

  1. 直接交互,类似终端命令
  2. 命令符:
    1. clc–清除所有命令
    2. clear all–清空工作区所有变量
    3. %% --注释(有分割线)
    4. % --注释(无割线)
    5. ctrl + r --多行注释
    6. ctrl + t --取消注释
    7. iskeyword --关键字

二、变量命名规则

  1. 区分大小写
  2. 以字母开头,由字母、数字、下划线组成,不能使用标点
  3. 不超过63位

三、数据类型

数字、字符与字符串、矩阵、元胞数结构体

1. 数字

整数和浮点数

运算符(+,-,*,/,^)

2. 字符与字符串

单引号和双引号定义表示:

%% 字符与字符串
id = 'a'
id2 = 'cd'
id + id2 % 字符串的计算是ASCII码值的运算num = 155
char(num) % 将输入数值转换为对应的字符
num2str(id) % 将数字(包括整数、浮点数等)转换为字符串表示。str = 'I Love You'
length(str) % 空格也占一个字符

3. 矩阵

3.1 矩阵创建

直接创建:

A = [1 2 3;2 5 8;9 8 2] % 分号表示换行

函数创建:

% 函数创建
E = zeros(10,5,3) % 创建一个10行5列,3维度的全0矩阵
F = ones(13,5,3) % 创建一个10行5列,3维度的全1矩阵
G = eye(3,3) % 创建一个3*3的单位矩阵
E(:,:,1) = rand(10,5) % 生成的随机数在 (0, 1) 区间内均匀分布
E(:,:,2) = randi(5,10,5) % 生成一个10行5列的、在 [1, 5] 范围内的伪随机整数矩阵
E(:,:,3) = randn(10,5) % 生成标准正态分布的伪随机数(均值为 0,方差为 1)
3.2 矩阵的修改和删除
  • 修改:
A = [1 2 3 4;2:5;3:6]% 位置索引
A(2,3) = 10 % 将第2行第3列替换
A(2:) = 10 % 将第2行整行替换
A([1,3],[1,2]) = 0 % 将第1,3行的第1,2列替换% 线性索引
A(4) = 8 % 按列从1开始第4个数替换
A(5,6) = 888 % 不够的列数以0扩展
  • 删除:
% 删除行列
A(:,[1]) = [] % 删除所有行的第1列
A(:,[1,end]) = [] % 删除所有行的第1和最后一列
A(:,[2:end]) = [] % 删除所有行的第2到最后一列% 删除单个 -- 通过线性索引
A(4) = [] % 删除之后由于矩阵形式发生变化,按列铺排成一行显示
3.3 矩阵的拼接与重构重排
  • 拼接:
% 横向拼接(行数相同):
A = [1 2 3 4;2:5;3:6]
B = ones(3,4)
C = [A,B] % ,横向
% 或
D = cat(2,A,B) % 2表示横向拼接% 竖向拼接(列数相同):
B2 = ones(2,4)
E = [A;B2] % ;竖向
% 或
E1 = cat(1,A,B2) % 1表示横向拼接
  • 重构重排:
% 重构:
A = randi(10,2,6)
B = reshape(A,3,4) % 重构元素数量不变,按线性索引重构
B1 = reshape(A,3,[]) % 要求3行,列数自动匹配% 重排sort(A,dim,descend):
A = randi(10,2,6)
B = sort(A,1,"ascend"); % 1表示对每列排序,ascend表示升序
B1 = sort(A,2,"descend") % 2表示对每行排序,descend表示降序
C = sortrows(A,4,"descend") % 以第4列降序排序为基准,整行排序
3.4 矩阵的运算方法
  • 函数运算:
% 函数运算:
% sum(A,dim)
A = randi(10,2,6)
sum(A,1) % 按列求和
sum(A,2) % 按行求和
sum(A,"all") % 全部求和% prod()求乘积
% mean()求平均值
% median()计算中位数
% mode()计算众数
% min()求最小值
% max()求最大值
  • 算数运算:

五种兼容模式:
在这里插入图片描述

注意:算术符号加点意味对应位置单独进行计算

% 矩阵的四则运算
A = [1 2 3 4;5 6 7 8]
B = [1 1 2 2;2 2 1 1]
C = A + B % (对应矩阵位置相加)
D = A - B % (对应矩阵位置相减)
E = A * B' % 两矩阵相乘,前矩阵列数与后一个矩阵行数相同
F = A .* B % 两矩阵对应项相乘
G = A / B % 相当于A * B的逆
H = A ./ B % 两矩阵对应项相除% 
A = [1 2 3;2 5 8;9 8 2]
B = A' % 对矩阵进行转置(列转为行)
C = A(:) % 将矩阵以列方向进行拉直
D = inv(A) % 对方阵矩阵求逆
  • 关系运算:

==、>、<、>=、<=、~=对应位置比对,返回布尔值:

% 关系运算
A = [1:4]
B = ones(3,4)
A == B
===========================
1   0   0   0
1   0   0   0
1   0   0   0
  • 逻辑运算:

    &与,|或,~非,xor异或,&&双与,||双或

    在这里插入图片描述

    对应位置进行逻辑运算。

3.5 矩阵的下标
% 矩阵的下标(起始值为1)
A = magic(5)
B = A(2,3) % 取第2行第3列数据
C = A(3,:) % 取第3行所有列
D = A(:,4) % 取第4列所有行
[m,n] = find(A > 20) % 返回符合条件的索引值
[m,n] = find(A == 21)

4. 元胞数组(类似数据容器)

A = cell(1,6) % cell(行,列)
A{2} = eye(3) % 生成一个3*3的,对角线位1的单位矩阵 切记索引位置从1开始
A{5} = magic(5) % 幻方矩阵(矩阵的每行、每列以及主副对角线上的数之和相等)
B = A{5}

5. 结构体

% 类似于字典
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40])
books.name % 取出结构体中,属性对应的值(cell类型)
books.name(1) % 切片,从1开始(cell类型)
books.name{1} % 用{}取出的值位字符串形式books.price
books.price(1)

四、逻辑与流程控制

%% 逻辑和流程控制
% 1. for .. end
sum = 0;
for n = 1:5sum = sum + n^2
endsumm = 0
for i = 1:5p=1for j = 1:ip = p*jendsumm = summ + p
end% 2. while .. end
s = 0
n = 1
while n<=10s = s+nn = n+1
end% 3. 分支结构 if .. end;if ..elseif .. else .. end;switch .. case .. end
a = 100
b = 50
c = 110
if a > b'成立'
end
===============
if a > b & a > c'成立'
else'错误'
end
==================
switch a == 100case a > 80"hhh"case a > 60'ppp'otherwise'ttt'
end% break结束循环
% continue 跳过本次循环

五、函数

1. 基础函数

基本结构:

function[返回的形参:output1,output2……] = 函数名(输入的形参:input1,input2……)
…………
end
%% 函数
function [max,min] = max_min_val(x)
max = subfuc1(x)
min = subfuc2(x)function r = subfuc1(x) % 子函数x1 = sort(x,'descend');r = x1(1);endfunction r = subfuc2(x)x1 = sort(x,'a');r = x1(1);end
end

调用:

创建一个新的-m文件,然后先从另一个文件调用它:

A = 1:20
[max,min] = max_min_val(A);
max
min
==============
max =20
min =1

2. 匿名函数

不需要单独创建-m文件,基本结构:

f = @(参数1,参数2) 函数表达式
ff = @(x,y)x^2 + y^2;
vv = @(x,y)x.^2 + y.^2;

调用:

f(2,3)
x = 1:5;
y = 0.1:0.1:0.5;
vv(x,y)
==============
ans =13ans =1.0100    4.0400    9.0900   16.1600   25.2500

3. 常用函数

%% 1. 数值函数
x = -1.5;
y = -3 + 4i;
abs(x) % 取绝对值
abs(y) % 还可以求模mod(11,3) % 取余sqrt(8) % 开根号
sqrt(1:9) % 对向量中每个数开根
format long % 长精度exp(2) % 计算以自然常数e为底的指数
exp(0)log(2) % 以e为底的对数运算
log(exp(3))log2(8) % 以2为底的对数运算
log10(100) % 以10为底的对数运算round(2.5) % 四舍五入
round(3.1415926,2) % 指定小数点后几位四舍五入保存,n>0往右数
round(3141.59,-2) % n<0往左数%% 三角函数
%% 常用函数
A = [1:9];
x = 8;
find(A == x)
isempty(find(A == x)) % 确定数组是否为空x = 0:4;
y = 0:3;
[xx,yy] = meshgrid(x,y); % 返回网格坐标
xx
yyseed = 3;
rng(seed) % 设置随机数种子
randi(10,3,3)

4. 特殊函数

在这里插入图片描述

六、绘图

1. 二维图

%% 二维平面绘图
% 1. 绘制简单二维线图
x = 0:0.01:2*pi
y = sin(x)
figure % 创建一个幕布
plot(x,y) % 画图
title('y = sin(x)') % 命名标题
xlabel('x') % x轴标名
ylabel('sin(x)') % y轴标名
xlim([0 2*pi]) % 设置x范围
text(2.5,sin(2.5),'sin(x)') % 在线上加标注文字% 2. 设置颜色、线型、数据标记点
x = 0:0.01:20
y1 = 200*exp(-0.05*x).*sin(x)
y2 = 0.8*exp(-0.5*x).*sin(10*x)
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') % 将两个y值同一个x轴绘制在一个图上
set(get(AX(1),'Ylabel'),'String','Slow Decay') % y轴命名
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time (\musec)') % x轴命名
title('Multiple Decay Rates')
set(H1,'LineStyle','--') % 设置线条形状
set(H2,'LineStyle',':')
legend('y1','y2') % 添加图例% 3. 条形图
x = [2021,2022,2023];
y = [10,20;20,30;100,200]
bar(x,y)% 4. 直方图
x = randn(1000);
nbins = 25 % 等间距条个数
H = histogram(x,nbins)
counts = H.Values % 每个bin的个数% 5. 饼图
x =[1:2:9]
pie(x) % 1/sum(x)占比% 6. 散点图
t = 0:pi/50:2*pi;
x = 16*sin(t).^3
y = 13*cos(t) - 5*cos(2*t) - 2*cos(3*t) - cos(4*t);
scatter(x,y,"red","filled")% 7. 矢量类图形
a = [4,5];
quiver(0,0,a(1),a(2))% 8. hold on 保持原有图形

2. 三维图

%% 三维立体绘图
t = 0:pi/50:10*pi
plot3(sin(t),cos(t),t) % (x,y,z),绘制三维图像
xlabel('sin(t)') % 坐标轴命名
ylabel('cos(t)')
zlabel('t')
grid on % 背景添加网格线
axis square % 限制坐标轴规整%% 绘制三维曲面
x = -1:0.2:2;
[x,y] = meshgrid(x)
z = x.*exp(-x.^2-y.^2);
mesh(x,y,z)
surf(x,y,z)%% 双峰函数
[x,y,z] = peaks(30)
mesh(x,y,z)
grid

3. 图形窗口分割

%% 图形窗口分割
x = linspace(0,2*pi,60)subplot(2,2,1) % 将幕布划分为2*2大小,选择第1个区域
plot(x,sin(x)-1)
title('sin(x)-1');axis([0,2*pi,-2,0]) % axis设置了当前图像的坐标轴范围
% x轴的范围从0到2π,y轴的范围从-2到0。subplot(2,1,2)
plot(x,cos(x)+1)
title('cos(x)+1');axis([0,2*pi,0,2])

总结

  1. 矩阵的创建以及基本运算
  2. 函数的定义方法
  3. 逻辑控制的结构
  4. 绘图的方法

quare % 限制坐标轴规整

%% 绘制三维曲面
x = -1:0.2:2;
[x,y] = meshgrid(x)
z = x.*exp(-x.2-y.2);
mesh(x,y,z)
surf(x,y,z)

%% 双峰函数
[x,y,z] = peaks(30)
mesh(x,y,z)
grid


### 3. 图形窗口分割```matlab
%% 图形窗口分割
x = linspace(0,2*pi,60)subplot(2,2,1) % 将幕布划分为2*2大小,选择第1个区域
plot(x,sin(x)-1)
title('sin(x)-1');axis([0,2*pi,-2,0]) % axis设置了当前图像的坐标轴范围
% x轴的范围从0到2π,y轴的范围从-2到0。subplot(2,1,2)
plot(x,cos(x)+1)
title('cos(x)+1');axis([0,2*pi,0,2])

总结

本篇介绍了:

  1. 矩阵的创建以及基本运算
  2. 函数的定义方法
  3. 逻辑控制的结构
  4. 绘图的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新

pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下&#xff0c;当安装IDM软件后&#xff0c;该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上&#xff0c;但在某些情况下&#xff0c;需要我们手动安装&#xff0c;以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…

AndroidStudio-常用布局

一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时&#xff0c;内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时&#xff0c;内部视图在垂直方向从上往下排列。 如果不指定orientation属性&#xff0c;…

Pr 入门系列之八:使用关键帧(上)

不论是固定效果、标准效果或是第三方效果&#xff0c;都可以通过改变属性的值来达到效果控制的目的。 任何动画要表现运动或变化&#xff0c;前后至少要给出属性值的两个不同的关键状态&#xff0c;称之为“关键帧” Keyframe。 而中间状态的变化和衔接&#xff0c;则是由计算机…

万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总万字长文解读…

qt QMovie详解

1、概述 QMovie 是 Qt 框架中用于处理动画文件的类。它支持多种动画格式&#xff0c;包括 GIF 和一些常见的视频格式&#xff08;尽管对视频格式的支持依赖于底层平台&#xff09;。QMovie 类主要用于在 QLabel 或 QGraphicsView 等控件中显示动画。通过加载动画文件&#xff…

2.2 栈与队列

2.2 栈与队列 在我们日常生活中&#xff0c;一些排列和存储物品的方式可以很好地帮助我们理解栈和队列这两种数据结构。 栈&#xff08;Stack&#xff09; 栈是一种后进先出&#xff08;Last In First Out&#xff0c;简称LIFO&#xff09;的数据结构&#xff0c;就像我们堆…

ip addr show

本文内容来自智谱清言 ip addr show 是 Linux 系统中用于显示网络接口配置的命令。这个命令属于 iproute2 软件包&#xff0c;该软件包在大多数 Linux 发行版中都是预安装的。ip addr show 命令可以用来查看所有网络接口的当前配置&#xff0c;或者指定某个特定接口的配置。 …

【编程语言】理解C/C++当中的指针

指针是C/C语言中一个非常强大且重要的概念&#xff0c;也是编写高效程序的基础之一。对于没有编程背景的初学者来说&#xff0c;理解指针可能有些难度&#xff0c;但通过本篇文章的介绍&#xff0c;相信你会对指针有一个清晰的认识。本文将从指针的基本概念、作用、代码示例、注…

hive切换表底层文件类型以及分隔符

1、改底层文件存储类型&#xff0c;但是一般只会在数据文件与期望类型一致的时候使用&#xff0c;比如load等方式时发现建表时没指定对这样的&#xff0c;因为这个语句不会更改具体的底层文件内容&#xff0c;只改元数据 ALTER TABLE 表名 SET FILEFORMAT 希望类型;2、更改数据…

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式&#xff0c;低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心&#xff0c;可用于管理低功耗模式的进入和退出&#xff0c;控制时钟源、PLL、电源开…

vue链接跳转

在 Vue 3 的组合式 API 中&#xff0c;你可以使用 ref 和 setup 函数来实现外部链接跳转功能。 方法 1&#xff1a;使用 click 和 window.open&#xff08;新标签页跳转&#xff09; 这种方式在点击时会打开一个新标签页并跳转到外部链接。 <menu-item value"item2&…

重学 Android 自定义 View 系列(三):自定义步数进度条

前言 本篇文章主要是实现仿QQ步数View&#xff0c;很老的一个View了&#xff0c;但技术永不落后&#xff0c;开搂&#xff01; 最终效果如下&#xff1a; 1. 结构分析 QQStepView 主要由三个元素组成&#xff1a; 显示一个圆环进度条&#xff0c;通过外环和内环的角度变化来…

非关系型数据库NoSQL的类型与优缺点对比

NoSQL数据库根据数据模型和应用场景主要分为四种类型&#xff1a;键值型、列族型、文档型和图形型。以下是对每种类型的详细描述&#xff0c;包括其应用场景、优缺点的比较&#xff1a; 1. 键值型数据库 (Key-Value Store) 典型代表 RedisMemcachedAmazon DynamoDB 应用场景…

Spring中的过滤器和拦截器

Spring中的过滤器和拦截器 一、引言 在Spring框架中&#xff0c;过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是实现请求处理的两种重要机制。它们都基于AOP&#xff08;面向切面编程&#xff09;思想&#xff0c;用于在请求的生命周期…

查缺补漏----用户上网过程(HTTP,DNS与ARP)

&#xff08;1&#xff09;HTTP 来自湖科大计算机网络微课堂&#xff1a; ① HTTP/1.0采用非持续连接方式。在该方式下&#xff0c;每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引…

core-js 解决浏览器兼容性问题的工具之一

core-js 是一个非常流行的JavaScript库&#xff0c;它提供了大量的 polyfills&#xff0c;使得开发者可以在旧版浏览器中使用新的JavaScript特性。core-js 实现了ECMAScript标准中的许多新特性&#xff0c;还包括一些Web APIs。这使得开发者可以编写现代JavaScript代码&#xf…

C++之vector类的模拟实现

片头 嗨~小伙伴们&#xff0c;今天我们来一起学习关于C的vector类的模拟实现&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、基本框架 namespace bit {template<class T>class vector {public:typedef T* iterator;typedef const T* const_iterator;// 针对const修…

C# 中 LibraryImport 和 DllImport有什么不同

libraryimport 和 dllimport 是两个与动态链接库&#xff08;DLL&#xff09;相关的术语&#xff0c;它们在不同的编程语言和上下文中有不同的含义和用途。 在 C# 中&#xff0c;DllImportAttribute 是一个特性&#xff0c;用于指示一个方法声明是作为对非托管 DLL 中函数的 P…

流体力学ansys Fluent二次开发scheme_eval模块剖析

在ANSYS Fluent的二次开发中&#xff0c;scheme_eval 是 Scheme 编程语言中一个非常重要的模块&#xff0c;它允许用户执行动态的 Scheme 表达式和函数&#xff0c;从而扩展 Fluent 的功能。scheme_eval 模块通常与 Fluent 的计算和自定义脚本操作紧密结合。下面我们会对这个模…