从1开始的Matlab(快速入门)

MATLAB软件版本:MATLAB R2016b

本文是博主从零开始学Matlab的记录,适合第一次接触Matlab的同学阅读。
一、基础介绍

1.1界面认识

1.2变量命名

注:Matlab中的注释

%% 独占一行的注释(有上下横线分割)

% 普通注释

1)清空环境变量及命令

clear all 清除Workspace中的所有变量(右侧工作区)

clc 清除Command Window中的所有命令(命令行窗口)

2)变量命名规则

①变量名区分大小写

②变量名长度不超过63位

③变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点

1.3数据类型

1)数字

2 + 4

10 - 7

3 * 5

8 / 2

2)字符与字符串

s = ‘a’ (单引号表示字符串)

==abs(s)==ASCII码

char(97) 输出 a (ASCII码转字符串)

num2str(65) 输出数字65

str=‘I love MATLAB & Machine Learning’

length(str) 字符串长度

doc num2str

3)矩阵(Matlab最NB的东西)

A = [1 2 3; 4 5 2; 3 2 7]
在这里插入图片描述

B = A’ 把A进行转置,行变列,列变行

在这里插入图片描述

C = A( 竖向拉长(按列输出矩阵

在这里插入图片描述

D = inv(A) 逆矩阵(必须时方阵才能求逆矩阵)

执行下面两条语句

D = inv(A) (求逆矩阵)
A * D (相当于A×A的逆)

E = zeros(10,5,3) 创建一个10行5列3维的全0矩阵

在这里插入图片描述

E(:,:,1) = rand(10,5)

rand生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数

rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’

rand(RandStream,m,n)利用指定的RandStream(随机种子)生成伪随机数

E(:,:,2) = randi(5,10,5)

randi生成均匀分布的伪随机数

主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机数

randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵

r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵

E(:,:,3) = randn(10,5)

randn生成标准正态分布的伪随机数(均值为0,方差为1)

主要语法:和上面一样

4)元胞数组和结构体

在MATLAB中,元胞数组和结构体是两种不同的数据类型,可以用来存储和组织不同类型的数据。

元胞数组(cell array)是一种特殊的数组,可以存储不同类型的数据。元胞数组的每个元素可以是任何类型的数据,包括数字、字符串、矩阵、函数句柄等。元胞数组使用大括号{}来索引和操作元素。

例如,创建一个包含不同类型数据的元胞数组:

cellArray = {1, 'hello', [1 2 3], @sin};
%元胞数组
A = cell(1,6)
A{2} = eye(3) %2021版本前的matlab下标从1开始
A{5} = magic(5)
B = A{5}

注:magic:字面意思是魔方,魔术的意思。在MATLAB中用来生成n阶幻方。比如三阶幻方就是1-9九个数字,组成一个3*3的矩阵,使得该矩阵无论横、竖还是斜三个方向上的三个数的和总是相同的。幻方是一个很古老的问题,试一下就知道了!

结构体(structure)是一种可以存储不同类型数据的数据结构。结构体的每个成员可以有不同的名称,并且每个成员可以是任何类型的数据。结构体使用点操作符.来访问和操作成员。

例如,创建一个包含不同类型数据的结构体:

structure.field1 = 1;structure.field2 = 'hello'; 
structure.field3 = [1 2 3]; 
structure.field4 = @sin;
%结构体
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40])
books.name %属性
books.name(1)
books.name{1}

元胞数组和结构体在某些情况下可以互相转换。使用函数cell2struct可以将元胞数组转换为结构体,使用函数struct2cell可以将结构体转换为元胞数组。

% 元胞数组转换为结构体 
cellArray = {1, 'hello', [1 2 3], @sin};structure = cell2struct(cellArray, {'field1', 'field2', 'field3', 'field4'});% 结构体转换为元胞数组 structure.field1 = 1;structure.field2 = 'hello'; 
structure.field3 = [1 2 3];structure.field4 = @sin;cellArray = struct2cell(structure);

1.4.内置常量

eps % 计算机的最小数pi % 圆周率i % 虚数单位,表示√(-1)j % 虚数单位,表示√(-1)

1.5查看已有的变量信息

>> who您的变量为:ans  t    >> whosName      Size            Bytes  Class     Attributesans       1x1                 8  double              t         1x3                24  double              >> size(t) // 列出n,mans =1     3>> length(t) // 列出max(n,m)ans =3

二、矩阵操作

2.1矩阵的定义与构造

A = [1,2,3,4,5,6,5,4,6]
B = 1:2:9 %第二个参数为步长,不可缺省
B = 1:3:9
C = repmat(B,3,2) %重复执行3行2列
D = ones(2,4) %生成一个2行4列的全1矩阵

在MATLAB中,可以使用不同的方法构造矩阵。

  1. 使用方括号[]构造矩阵:

    A = [1,2,3,4,5,6,5,4,6];

  2. 使用冒号运算符构造向量:

    B = 1:2:9; % 步长为2,生成1到9的向量 
    B = 1:3:9; % 步长为3,生成1到9的向量
  3. 使用repmat函数复制矩阵:

    B = 1:3:9; % 步长为3,生成1到9的向量 
    C = repmat(B,3,2); % 重复执行3行2列,生成一个3行6列的矩阵
  4. 使用ones函数生成全1矩阵:

    D = ones(2,4); % 生成一个2行4列的全1矩阵

以上代码示例中,A是一个1行9列的矩阵,B是一个1行5列的向量,C是一个3行6列的矩阵,D是一个2行4列的全1矩阵。

补充行向量

在MATLAB中,可以使用 linspace(a, b, n) 函数来生成一个从 a 到 b 的等间距向量,其中 n 是向量的长度。下面是将这两个表达式转化为 MATLAB 代码的示例:

t1 = linspace(1, 2, 3); % 生成一个长度为 3 的向量 t1,元素在 1 和 2 之间等间距分布
t2 = linspace(1, 2, 3); % 生成一个长度为 3 的向量 t2,元素在 1 和 2 之间等间距分布

执行这些代码将会生成两个向量 t1 和 t2,它们的元素分别为 [1, 1.5, 2] 和 [1, 1.5, 2]。

在MATLAB中,可以使用 logspace(a, b, n) 函数来生成一个从 10^a 到 10^b 的对数间隔向量,其中 n 是向量的长度。下面是将这个表达式转化为 MATLAB 代码的示例:

t = logspace(1, 2, 2); % 生成一个长度为 2 的对数间隔向量 t,元素在 10^1 和 10^2 之间

执行这个代码将会生成一个向量 t,它的元素为 [10, 100]。这意味着 t 的第一个元素是 10,第二个元素是 100。

补充特殊矩阵

>> eye(3) // 单位矩阵ans =1     0     00     1     00     0     1>> eye(3,4)ans =1     0     0     00     1     0     00     0     1     0>> ones(2) // 全为1的矩阵ans =1     11     1>> ones(2,3)ans =1     1     11     1     1>> zeros(2) // 全为0的矩阵ans =0     00     0>> zeros(2,3)ans =0     0     00     0     0>> diag([1,2,3]) // 产生对角矩阵ans =1     0     00     2     00     0     3>> rand(2) // 创建随机矩阵,服从均匀分布ans =0.2785    0.95750.5469    0.9649>> rand(2,1) ans =0.15760.9706>> randn(2) // 创建随机矩阵,服从正态分布ans =0.5377   -2.25881.8339    0.8622>> randn(2,1)ans =0.3188-1.3077>> randperm(5) // 产生随机排列ans =5     3     1     2     4

2.2矩阵的四则运算

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的逆 G*B = A  G*B*pinv(B) = A*pinv(B)  G = A*pinv(B),相当于A乘B
H = A ./ B % ./表示对应项相除

在MATLAB中,可以使用四则运算对矩阵进行操作。

给定两个矩阵A和B:

A = [1 2 3 4; 5 6 7 8]; B = [1 1 2 2; 2 2 1 1];

可以进行以下运算:

  1. 矩阵加法:

    C = A + B;

    结果C为两个矩阵对应元素相加得到的矩阵:

    C = [2 3 5 6; 7 8 8 9];

  2. 矩阵减法:

    D = A - B;

    结果D为两个矩阵对应元素相减得到的矩阵:

    D = [0 1 1 2; 3 4 6 7];

  3. 矩阵乘法:

    E = A * B';

    结果E为矩阵A乘以矩阵B的转置得到的矩阵:

    E = [13 9; 29 21];

  4. 对应项相乘:

    F = A .* B;

    结果F为两个矩阵对应元素相乘得到的矩阵:

    F = [1 2 6 8; 10 12 7 8];

  5. 对应项相除:

    H = A ./ B;

    结果H为两个矩阵对应元素相除得到的矩阵:

    H = [1 2 1.5 2; 2.5 3 7 8];

  6. 矩阵除法(相当于乘以逆矩阵):

    G = A / B;

    结果G为矩阵A乘以矩阵B的逆矩阵:

    G = [0.5 0.5; 1.5 1.5];

以上是常见的矩阵四则运算操作。请注意,矩阵乘法和矩阵除法的定义与数学中的矩阵乘法和矩阵除法略有不同,需要根据具体的应用场景进行理解和使用。

2.3矩阵的下标

A = magic(5)
B = A(2,3)
C = A(3,:) % :为取全部,那么这条语句表示取第三行
D = A(:,4) %取第四列
[m,n] = find(A > 20) %找到大于20的序号值/矩阵
%取的是索引值
E = A(2:3,1:2) // 取出第2行到第3行,第1列到第2列的所有元素

2.4 删除矩阵的整行或整列

A = [1, 2; 3, 4];AA(:, 1) = []; % 删去第一列,即把第一列变成空矩阵[]B = [4, 5; 6, 7];BB(1, :) = []; % 删去第一行B

在这段代码中,首先定义了矩阵A和B。然后,通过将A的第一列设置为空矩阵[]来删除了A的第一列。接着,通过将B的第一行设置为空矩阵[]来删除了B的第一行。

2.5合并矩阵

A = [1, 2, 3];B = [4, 5, 6];C = [A, B]; % 按行合并矩阵C = [A; B]; % 按列合并矩阵

 执行这些代码将会生成矩阵C,它分别按行和按列合并了矩阵A和B的元素

 2.6矩阵的重塑、旋转

重塑

>> A=[1,2,3;4,5,6]A =1     2     34     5     6>> reshape(A,3,2) // 按列顺序重塑矩阵A为3*2ans =1     54     32     6

旋转

>> AA =1     2     34     5     6>> rot90(A)ans =3     62     51     4

三、程序结构

3.1顺序结构

在MATLAB中,顺序结构是指程序按照代码的顺序依次执行。简单来说,就是从上到下依次执行每一行代码。

例如,下面是一个简单的MATLAB程序,展示了顺序结构的应用:

a = 5;
b = 10;c = a + b;
d = a - b;disp(c);
disp(d);

在这个程序中,首先定义了变量a和b,并分别赋值为5和10。然后,通过a + b计算出变量c的值,通过a - b计算出变量d的值。最后,使用disp函数将c和d的值打印出来。

按照顺序结构的原则,程序将依次执行每一行代码,输出结果为:

15
-5

3.2循环结构

在MATLAB中,循环结构是用来重复执行一段代码的结构。MATLAB提供了两种常用的循环结构:for循环和while循环。

  1. for循环:for循环用于指定一个变量的起始值、终止值和步长,并在每次循环中递增或递减这个变量的值。for循环的语法如下:
for 变量 = 起始值:步长:终止值循环体代码
end

例如,下面的代码展示了使用for循环计算1到10的累加和:

sum = 0;
for i = 1:10sum = sum + i;
enddisp(sum);

在这个例子中,for循环从1到10依次取值给变量i,每次循环将i加到sum上。最后,使用disp函数将sum的值打印出来。

  1. while循环:while循环用于在满足某个条件的情况下重复执行一段代码,直到条件不满足为止。while循环的语法如下:
while 条件循环体代码
end

例如,下面的代码展示了使用while循环计算1到10的累加和:

sum = 0;
i = 1;
while i <= 10sum = sum + i;i = i + 1;
enddisp(sum);

在这个例子中,while循环在i小于等于10的条件下执行循环体代码,每次循环将i加到sum上,并将i递增1。当i大于10时,条件不再满足,循环结束。最后,使用disp函数将sum的值打印出来。

3.3分支结构

在MATLAB中,分支结构用于根据条件的真假执行不同的代码块。MATLAB提供了if语句和switch语句两种常用的分支结构。

  1. if语句:if语句根据条件的真假执行不同的代码块。if语句的语法如下:
if 条件代码块1
elseif 条件代码块2
else代码块3
end

其中,条件可以是一个表达式,如果条件为真,则执行代码块1;如果条件为假,但满足第二个条件,则执行代码块2;如果条件都不满足,则执行代码块3。

例如,下面的代码展示了使用if语句判断一个数的正负性:

num = -5;if num > 0disp('正数');
elseif num < 0disp('负数');
elsedisp('零');
end

在这个例子中,根据num的值,if语句会判断num的正负性,并输出相应的结果。

  1. switch语句:switch语句根据表达式的值执行不同的代码块。switch语句的语法如下:
switch 表达式case 值1代码块1case 值2代码块2otherwise代码块3
end

其中,表达式的值会逐个与每个case后面的值进行比较,如果匹配成功,则执行相应的代码块。如果没有匹配成功的case,则执行otherwise后面的代码块。

例如,下面的代码展示了使用switch语句根据星期几输出相应的信息:

day = 3;switch daycase 1disp('星期一');case 2disp('星期二');case 3disp('星期三');case 4disp('星期四');case 5disp('星期五');otherwisedisp('周末');
end

在这个例子中,根据day的值,switch语句会匹配相应的case,并输出相应的信息。

3.4分号

 在MATLAB中,分号(;)的主要含义是用于分隔语句或抑制输出。

  1. 分隔语句:分号用于分隔多个语句。当你在一行中写多个语句时,可以使用分号将它们分隔开。这样可以使代码更简洁,易于阅读。

例如,下面的代码将两个语句放在一行中,并使用分号分隔它们:

a = 2; b = 3;
  1. 抑制输出:在MATLAB中,每当执行一个语句时,结果会自动显示在命令窗口中。但是,如果在语句的末尾加上分号,就可以抑制输出。这在执行大量计算或不需要显示结果的情况下很有用。

例如,下面的代码计算两个数的和,但是只将结果存储在变量中,而不在命令窗口中显示:

a = 2;
b = 3;
c = a + b;

在这个例子中,c的值是5,但是由于语句末尾加上了分号,所以不会在命令窗口中显示出来。

需要注意的是,分号只能用于抑制当前语句的输出,对于其他语句的输出没有影响。如果你希望在代码中的多个位置都抑制输出,需要在每个语句的末尾都加上分号。

3.5输入输出

输入

s=input('please input a string: ','s');

输出

x = rand(1, 3);fprintf("x=%.3f\n", x); % 输出x的所有元素,保留3位小数fprintf("x=%.3f\n", x(2)); % 输出x[2](可省略第1行的行下标)fprintf("x=%.3f\n", x(1, 2)); % 输出x[1][2]y = [1, 2; 3, 4];fprintf("y=%.3f\n", y(:)); % 按列输出y的所有元素fprintf("y=%.3f\n", y(2, 1)); % 输出y[2][1]fprintf("y=%.3f\n", y(1)); % 输出y[1][1](可省略第1列的列下标)fprintf("y=%.3f\n", y(2)); % 输出y[2][1](可省略第1列的列下标)

3.6函数

编写函数,存于文件ave.m中,代码如下:

% You can get the average of a vector.
% Just input "ave;" to run this function.
function y = ave(x)
x = input('input a vector x=');
[m,n] = size(x);
if ~(m==1|n==1)error('please input a vector which is m=1 or n=1')
end
y = sum(x)/length(x);
fprintf("y=%.2f\n",y);

四、基本绘图操作

4.1二维平面绘图

% 初始化
clear;
clc;% 将图片的字体等格式设置成latex样式,方便输入公式
set(0,'defaulttextinterpreter','latex');
set(0,'defaultAxesTickLabelInterpreter','latex');
set(0,'defaultLegendInterpreter','latex');set(groot,'defaultLineLineWidth',2); % 更改默认线宽%% 产生x,y数据
x=linspace(0,2*pi,20);
y{1}=sin(x);
y{2}=cos(x);
y{3}=x;
y{4}=exp(sin(x));%% 绘制图1
figure(1);
plot(x,y{1},'--ro',... % --虚线 r红色 o圆圈标记x,y{2},':k^',... % :点组成的线 k黑色 ^三角形标记x,y{3},'-.',... % -.线如-.x,y{4});
xlabel('x轴');
ylabel('y轴');
title('例图');
% legend显示图中曲线对应的公式(在坐标区上添加图例)
legend('$y=sin(x)$','$y=cos(x)$','$y=x$','$y=e^{sin(x)}$','Location','best');
xlim([0,2*pi]); % 设置x轴范围
print('C:\Users\LJW\Desktop\example1','-dpng'); % 保存为png格式图片到桌面路径 %% 绘制图2
figure(2);subplot(2,2,1); % 分成2*2四个子图,开始画第一个子图
plot(x,y{1},'--');
title('$y=sin(x)$');subplot(2,2,2); % 分成2*2四个子图,开始画第二个子图
plot(x,y{2},':');
title('$y=cos(x)$');subplot(2,2,[3,4]); % 第3,4个子图合并,写成[3,4]
plot(x,y{3},':',x,y{4}); % 2个子图合并
legend('$y=x$','$y=e^{sin(x)}$','Location','best');
xlim([0,2*pi]); % 设置x轴范围print('C:\Users\LJW\Desktop\example2','-dpng'); % 保存为png格式图片到桌面路径 


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'); %共用一个x的坐标系,在y上有不同的取值
%设置相应的标签
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time(\musec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

4.2三维立体绘图

%2.三维立体绘图
t = 0: pi/50: 10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
%hold on
%hold off %不保留当前操作
grid on %把图片绘制出来,在图片中加一些网格线
axis square %使整个图(连同坐标系)呈方体

4.3图形的保存与导出 

如果直接用截图的方式截取matlab生成的图像,会影响图像的清晰度。因此我们建议:可以用如下方法保存与导出图形。

1)如图

2)编辑→复制选项

可调节相应元素

3)编辑→图窗属性

4)文件→导出设置

通过调节宽度、高度等像素值属性,可以让图片即使很小,文字依然清晰。 

五、读取文件

5.1Excel文件

使用 xlsread 函数来读取Excel文件中的数据。这个函数可以接受文件名、工作表名和单元格范围作为输入参数,并返回数值数据、文本数据和原始数据作为输出参数。例如,读取文件 myExample.xlsx 中的第一个工作表的 A1:C3 范围内的数据

[num,txt,raw] = xlsread('myExample.xlsx','Sheet1','A1:C3');

使用 readtable 函数来读取Excel文件中的表格数据。这个函数可以将Excel文件中的一个或多个工作表导入为一个或多个表格变量。例如,读取文件 myExample.xlsx 中的第二个工作表的所有数据

T = readtable('myExample.xlsx','Sheet',2);

 将Matlab中的数据写入Excel文件中,可以使用 xlswrite 函数或 writetable 函数。这些函数可以将矩阵、元胞数组或表格变量写入Excel文件中的指定工作表和单元格范围。例如,如果您想将矩阵 A 写入文件 myExample.xlsx 中的第三个工作表的 B2:D6 范围内,可以使用以下代码:

A = rand(5,3); % 创建一个5行3列的随机矩阵
xlswrite('myExample.xlsx',A,'Sheet3','B2:D6');

 5.2csv文件

使用 csvread 函数来读取只包含数值的CSV文件。这个函数可以接受文件名、起始行列和读取范围作为输入参数,并返回一个矩阵作为输出参数。例如,读取文件 myData.csv 中的第一行第二列开始的所有数据

M = csvread('myData.csv',0,1);

 使用 textscan 函数来读取包含文本和数值的CSV文件。这个函数可以接受一个已打开的文件标识符、一个格式说明符和其他可选参数,并返回一个元胞数组作为输出参数。例如,读取文件 myInfo.csv 中的第一列是字符串,第二列是整数,第三列是浮点数的数据

fid = fopen('myInfo.csv');
C = textscan(fid,'%s%d%f','Delimiter',',','HeaderLines',1);
fclose(fid);

 使用 readmatrix 函数来读取包含表格数据的CSV文件。这个函数可以根据文件的扩展名自动判断文件格式,并返回一个矩阵或一个表作为输出参数。可以指定输出类型和其他可选参数来控制导入过程。例如,想读取文件 myTable.csv 中的所有数据,并将字符串类型的数据转换为缺失值

A = readmatrix('myTable.csv','OutputType','double','TreatAsMissing','NA');

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

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

相关文章

C语言:选择+编程(每日一练Day9)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;自除数 思路一&#xff1a; 题二&#xff1a;除自身以外数组的乘积 思路二&#xff1a; 本人实力有限可能对…

深入理解 Swift 新并发模型中 Actor 的重入(Reentrancy)问题

问题现象 我们知道,Swift 5.5 引入的新并发模型极大简化了并行逻辑代码的开发,更重要的是:使用新并发模型中的 Actor 原语可以大大降低并发数据竞争的可能性。 不过,即便 Actor 有如此神奇之功效,它也不是“万能药”,仍不能防止误用带来的问题。比如:Actor 重入(Reen…

283. 多边形,《算法竞赛进阶指南》,

283. 多边形 - AcWing题库 “多边形游戏”是一款单人益智游戏。 游戏开始时&#xff0c;给定玩家一个具有 N 个顶点 N 条边&#xff08;编号 1∼N&#xff09;的多边形&#xff0c;如图 1 所示&#xff0c;其中 N4 每个顶点上写有一个整数&#xff0c;每个边上标有一个运算符…

数据分析方法:RFM模型

一、RFM基本原理 RFM是三个单词的缩写&#xff1a; 最近一次消费时间&#xff08;Recency&#xff09;&#xff0c;取数的时候一般取最近一次消费记录到当前时间的间隔&#xff0c;比如&#xff1a;7天、30天、90天未到店消费&#xff1b;直观上&#xff0c;一个用户太久不到…

MySql进阶篇---006:存储引擎,索引,SQL优化,视图、存储过程、变量、流程控制、游标、存储函数、触发器

1. 存储引擎 1.1 MySQL体系结构 1).连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证…

Redis与分布式-主从复制

接上文 常用中间件-OAuth2 1.主从复制 启动两个redis服务器。 修改第一个服务器地址 修改第二个redis 然后分别启动 redis-server.exe redis.windows.conf) 查看当前服务器的主从状态&#xff0c;打开客户端&#xff1a;输入info replication命令来查看当前的主从状态&am…

2023/10/1 -- ARM

今日任务&#xff1a;select实现服务器并发 ser.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[…

ElementUI动态树,数据表格以及分页的实现

目录 前言 一. ElementUI动态树 二. 数据表格和分页 三. 后端代码 service层 controller层 前言 在上一篇博客中实现了左侧菜单栏&#xff0c;在此基础上将它变为动态的&#xff0c;即动态的展示数据库的数据。还有数据表格的实现以及分页。&#xff08;纯代码分享&#…

新闻报道的未来:自动化新闻生成与爬虫技术

概述 自动化新闻生成是一种利用自然语言处理和机器学习技术&#xff0c;从结构化数据中提取信息并生成新闻文章的方法。它可以实现大规模、高效、多样的新闻内容生产。然而&#xff0c;要实现自动化新闻生成&#xff0c;首先需要获取可靠的数据源。这就需要使用爬虫技术&#…

步进电机只响不转

我出现问题的原因是相位线接错。 我使用的滑台上示17H的步进电机&#xff0c;之前用的是57的步进电机。 57步进电机的相位线是A黑、A-绿、B红、B-蓝。 17步进电机的相位线是A红、A-绿、B黑、B-蓝。 这两天被一个问题困扰了好久&#xff0c;在调试步进电机开发板的时候电机发生…

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测&#xff0…

Sentinel学习(1)——CAP理论,微服务中的雪崩问题,和Hystix的解决方案 Sentinel的相关概念 + 下载运行

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍CAP理论&#xff0c;微…

Plant Simulation双深位库堆垛库

Plant Simulation双深位库堆垛库视频演示 自定义多入口&#xff0c;多出口 Plant Simulation双深位库堆垛库

【面试经典150 | 矩阵】螺旋矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;模拟方法二&#xff1a;按层模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

【数据结构】选择排序 堆排序(二)

目录 一&#xff0c;选择排序 1&#xff0c;基本思想 2&#xff0c; 基本思路 3&#xff0c;思路实现 二&#xff0c;堆排序 1&#xff0c;直接选择排序的特性总结&#xff1a; 2&#xff0c;思路实现 3&#xff0c;源代码 最后祝大家国庆快乐&#xff01; 一&#xf…

测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)

文章目录 一、任务描述二、指标分析2.1 TP/FP/FN/TN2.2 精准率2.3 召回率 三、接口处理四、数据集处理五、开始计算指标五、实用工具5.1 移动文件5.2 可视化JSON标签5.3 可视化TXT标签 一、任务描述 通过给定的算法接口&#xff0c;对算法的输出&#xff08;置信度、检测框、告…

英飞凌 Tricore 架构中断系统详解

本文以TC3系列MCU为例&#xff0c;先来了解中断源是如何产生的&#xff0c;再看一下CPU是如何处理中断源的。 AURIX TC3XX的中断路由模块 Interrupt Router (IR) 在TC3中&#xff0c;中断既可以被CPU处理&#xff0c;也可以被DMA处理&#xff0c;所以手册中不再把中断称为中断…

Apache Commons Pool2 池化技术

对象池是一种设计模式&#xff0c;用于管理和重用对象&#xff0c;以提高性能和资源利用率。对象池的概念在许多应用程序中都有广泛应用&#xff0c;特别是在需要频繁创建和销毁对象的情况下&#xff0c;例如数据库连接、线程、HTTP连接等 对象池通过预先创建一组对象并将它们存…

【数据结构篇】堆

文章目录 堆前言基本介绍认识堆堆的特点堆的分类堆的操作堆的常见应用 堆的实现JDK 自带的堆手动实现堆 堆 前言 本文主要是对堆的一个简单介绍&#xff0c;如果你是刚学数据结构的话&#xff0c;十分推荐看这篇文章&#xff0c;通过本文你将对堆这个数据结构有一个大致的了解…

阿里云ACP知识点(三)

1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力&#xff0c;而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性&#xff0c;例如______,帮助您高效、灵活地自定义ECS实例配置&#xff0c;满足业务需求。 标签、密钥对、 实例RAM…