Matlab 基本使用

工作区变量

使用 whos 可以查看工作区的内容。

whos

此外,桌面上的“工作区”窗格也会显示变量。
Matlab 基本使用_第1张图片

退出 MATLAB 后,工作区变量不会保留。使用 save 命令保存数据以供将来使用,

save myfile.mat

通过保存,系统会使用 .mat 扩展名将工作区保存在当前工作文件夹中一个名为 MAT 文件的压缩文件中。

要清除工作区中的所有变量,请使用 clear 命令。

使用 load 将 MAT 文件中的数据还原到工作区。

load myfile.mat

文本和字符

当您处理文本时,将字符序列括在单引号中。可以将文本赋给变量。

myText = ‘Hello, world’;

如果文本包含单引号,请在定义中使用两个单引号。

otherText = ‘You’‘re right’

与所有 MATLAB® 变量一样,myText 和 otherText 为数组。其类或数据类型为 char(character 的缩略形式)。

whos myText

您可以使用方括号串联字符数组,就像串联数值数组一样。

longText = [myText,’ - ',otherText]

二维图和三维图

线图

要创建二维线图,请使用 plot 函数。例如,绘制从 0 到 之间的正弦函数值:

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

Matlab 基本使用_第2张图片

可以标记轴并添加标题。

xlabel(‘x’)
ylabel(‘sin(x)’)
title(‘Plot of the Sine Function’)

Matlab 基本使用_第3张图片

通过向 plot 函数添加第三个输入参数,您可以使用红色虚线绘制相同的变量。

plot(x,y,‘r–’)

‘r–’ 为线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+、o 或 。例如,'g:’ 请求绘制使用 * 标记的绿色点线。

请注意,为第一幅绘图定义的标题和标签不再被用于当前的图窗窗口中。默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB® 都会清除图窗。

要将绘图添加到现有图窗中,请使用 hold on。在使用 hold off 或关闭窗口之前,当前图窗窗口中会显示所有绘图。

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,’:’)
legend(‘sin’,‘cos’)
hold off

Matlab 基本使用_第4张图片

三维绘图

三维图通常显示一个由带两个变量的函数(即 z = f (x,y))定义的曲面图。

要计算 z,请首先使用 meshgrid 在此函数的域中创建一组 (x,y) 点。

[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);

然后,创建曲面图。

surf(X,Y,Z)

Matlab 基本使用_第5张图片

子图

使用 subplot 函数可以在同一窗口的不同子区域显示多个绘图。

subplot 的前两个输入表示每行和每列中的绘图数。第三个输入指定绘图是否处于活动状态。例如,在图窗窗口的 2×2 网格中创建四个绘图

t = 0:pi/10:2pi;
[X,Y,Z] = cylinder(4
cos(t));
subplot(2,2,1); mesh(X); title(‘X’);
subplot(2,2,2); mesh(Y); title(‘Y’);
subplot(2,2,3); mesh(Z); title(‘Z’);
subplot(2,2,4); mesh(X,Y,Z); title(‘X,Y,Z’);

Matlab 基本使用_第6张图片

编程和脚本

脚本是最简单的一种 MATLAB® 程序。脚本是一个包含多行连续 MATLAB 命令和函数调用的扩展名为 .m 的文件。在命令行中键入脚本名称即可运行该脚本。

示例脚本

要创建脚本,请使用 edit 命令。

edit plotrand

这会打开一个名为 plotrand.m 的空白文件。输入一些绘制随机数据的向量的代码:

n = 50;
r = rand(n,1);
plot®

然后,添加在绘图中的均值处绘制一条水平线的代码:

m = mean®;
hold on
plot([0,n],[m,m])
hold off
title(‘Mean of Random Uniform Data’)

编写代码时,最好添加描述代码的注释。注释有助于其他人员理解您的代码,并且有助您在稍后返回代码时再度记起。使用百分比 (%) 符号添加注释。

% Generate random data from a uniform distribution
% and calculate the mean. Plot the data and the mean.
n = 50; % 50 data points
r = rand(n,1);
plot®
% Draw a line from (0,m) to (n,m)
m = mean®;
hold on
plot([0,n],[m,m])
hold off
title(‘Mean of Random Uniform Data’)

将文件保存在当前文件夹中。要运行脚本,请在命令行中键入脚本名称:

plotrand

还可以从编辑器通过按运行按钮 > 运行脚本。

循环及条件语句

在脚本中,可以使用关键字 for、while、if 和 switch 循环并有条件地执行代码段。

例如,创建一个名为 calcmean.m 的脚本,该脚本使用 for 循环来计算 5 个随机样本的均值和总均值。

nsamples = 5;
npoints = 50;
for k = 1:nsamples
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData);
end
overallMean = mean(sampleMean)

现在,修改 for 循环,以便在每次迭代时查看结果。在命令行窗口中显示包含当前迭代次数的文本,并从 sampleMean 的赋值中删除分号。

for k = 1:nsamples
iterationString = [‘Iteration #’,int2str(k)];
disp(iterationString)
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData)
end
overallMean = mean(sampleMean)

运行脚本时,会显示中间结果,然后计算总均值。

calcmean

在编辑器中,在 calcmean.m 末尾添加根据 overallMean 的值显示不同消息的条件语句。

if overallMean < .49
disp(‘Mean is less than expected’)
elseif overallMean > .51
disp(‘Mean is greater than expected’)
else
disp(‘Mean is within the expected range’)
end

脚本位置

MATLAB 在特定位置中查找脚本及其他文件。要运行脚本,该文件必须位于当前文件夹或搜索路径中的某个文件夹内。

默认情况下,MATLAB 安装程序创建的 MATLAB 文件夹位于此搜索路径中。如果要将程序存储在其他文件夹,或者要运行其他文件夹中的程序,请将其添加到此搜索路径。在当前文件夹浏览器中选中相应的文件夹,右键点击,然后选择添加到路径。

帮助和文档

所有 MATLAB® 函数都有辅助文档,这些文档包含一些示例,并介绍函数输入、输出和调用语法。从命令行访问此信息有多种方法:

  • 使用 doc 命令在单独的窗口中打开函数文档。

doc mean

  • 在键入函数输入参数的左括号之后暂停,此时命令行窗口中会显示相应函数的提示(函数文档的语法部分)。

mean(

  • 使用 help 命令可在命令行窗口中查看相应函数的简明文档。

help mean

矩阵

生成矩阵

zeros 全部为零

ones 全部为 1

rand 均匀分布的随机元素

randn 正态分布的随机元素

删除行和列

只需使用一对方括号即可从矩阵中删除行和列。首先

X = A;
然后,要删除 X 的第二列,请使用

X(:,2) = []

将会导致错误。

标量扩展

可以采用多种不同方法将矩阵和标量合并在一起。例如,通过从每个元素中减去标量而将其从矩阵中减去。幻方矩阵的元素平均值为 8.5,因此:

B = A - 8.5

形成一个列总和为零的矩阵:
B =
7.5 -5.5 -6.5 4.5
-3.5 1.5 2.5 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5

sum(B)

ans =
0 0 0 0
通过标量扩展,MATLAB 会为范围中的所有索引分配一个指定标量。例如,
B(1:2,2:3) = 0
将 B 的某个部分清零:
B =
7.5 0 0 4.5
-3.5 0 0 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5

find 函数

find 函数可用于确定与指定逻辑条件相符的数组元素的索引。find 以最简单的形式返回索引的列向量。转置该向量以便获取索引的行向量。

结构体

结构体是多维 MATLAB 数组,包含可按文本字段标志符访问的元素。例如:

S.name = ‘Ed Plum’;
S.score = 83;
S.grade = ‘B+’

创建一个具有三个字段的标量结构体:
S(2).name = ‘Toni Miller’;
S(2).score = 91;
S(2).grade = ‘A-’;

也可以使用一个语句添加整个元素:
S(3) = struct(‘name’,‘Jerry Garcia’,…
‘score’,70,‘grade’,‘C’)

现在,结构体非常大以致仅输出摘要:

S =
1x3 struct array with fields:
name
score
grade

将不同字段重新组合为其他 MATLAB 数组的方法有许多种。这些方法大多基于逗号分隔列表的表示法。键入

S.score
与键入

S(1).score, S(2).score, S(3).score

线性代数:

https://ww2.mathworks.cn/help/matlab/learn_matlab/linear-algebra1.html

非线性函数的运算

函数句柄

可以创建任何 MATLAB® 函数的句柄,并将该句柄用作引用该函数的一种方式。函数句柄通常在参数列表中传递给其他函数,然后,其他函数可以使用该句柄执行或计算相应函数。

在 MATLAB 中,使用 at 符号 @ 在函数名称前面构造函数句柄。下面的示例为 sin 函数创建一个函数句柄,并将其赋值给变量 fhandle:

fhandle = @sin;
您可以按照使用函数名称调用函数的相同方式,通过函数句柄来调用函数。语法为

fhandle(arg1, arg2, …);
下面显示的函数 plot_fhandle 接收函数句柄和数据,使用函数句柄生成 y 轴数据,并对数据绘图:

function plot_fhandle(fhandle, data)
plot(data, fhandle(data))
当调用带有如下 sin 函数的句柄和参数的 plot_fhandle 时,得到的计算结果会生成正弦波图:

plot_fhandle(@sin, -pi:0.01:pi)

功能函数

名为“接受函数句柄的函数”的函数类与标量变量的非线性函数配合使用。也就是说,某个函数基于另一个函数运行。接受函数句柄的函数包括

  • 找零

  • 优化

  • 正交

  • 常微分方程

MATLAB 通过定义非线性函数的文件来表示非线性函数。例如,以下是 matlab/demos 文件夹中的 humps 函数的简化版本:

function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;
使用以下命令在区间 0 ≤ x ≤ 1 中的一组点处计算此函数

x = 0:.002:1;
y = humps(x);
然后,使用以下命令绘制该函数

plot(x,y)
Matlab 基本使用_第7张图片

此图形表明,该函数在 x = 0.6 附近具有局部最小值。函数 fminsearch 会求最小值,即此函数采用此最小值时的 x 值。fminsearch 的第一个参数是此函数达到最小值时的函数句柄,第二个参数是猜测的最小值的大致位置:

p = fminsearch(@humps,.5)
p =
0.6370
要在极小值处计算此函数,

humps§

ans =
11.2528
数值分析采用术语正交和积分来区别定积分的近似数值和常微分方程的数值积分。MATLAB 正交例程包括 quad 和 quadl。语句

Q = quadl(@humps,0,1)
计算此图形中曲线下方的面积,并生成

Q =
29.8583
最后,此图形表明该函数在此区间中永远不会为零。这样,如果使用

z = fzero(@humps,.5)
搜索零,则会在此区间外部找到一个零:

z =
-0.1316

数据分析

简介

每个数据分析都包含一些标准的活动

  • 预处理 - 考虑离群值以及缺失值,并对数据进行平滑处理以便确定可能的模型。

  • 汇总 - 计算基本的统计信息以描述数据的总体位置、规模及形状。

  • 可视化 - 绘制数据以便确定模式和趋势。

  • 建模 - 更全面地描述数据趋势,以便预测新数据值。

数据分析通过这些活动,以实现两个基本目标:

  • 使用简单模型来描述数据中的模式,以便实现正确预测。

  • 了解变量之间的关系,以便构建模型。

此部分说明如何在 MATLAB® 环境中执行基本数据分析。

数据的预处理

概述

通过将数据加载到合适的 MATLAB® 容器变量并区分“正确”数据和“错误”数据,开始数据分析。这是初级步骤,可确保在后续的分析过程中得出有意义的结论。

加载数据

首先加载 count.dat 中的数据:

load count.dat

这个 24×3 数组 count 包含三个十字路口(列)在一天中的每小时流量统计(行)。

缺失数据

MATLAB NaN(非数字)值通常用于表示缺失数据。通过 NaN 值,缺失数据的变量可以维护其结构体 - 在本示例中,即在所有三个十字路口中的索引都是一致的 24×1 向量。

使用 isnan 函数检查第三个十字路口的数据是否存在 NaN 值:

c3 = count(:,3); % Data at intersection 3
c3NaNCount = sum(isnan(c3))

c3NaNCount = 0
isnan 返回一个大小与 c3 相同的逻辑向量,并且通过相应条目指明数据中 24 个元素内的每个元素是存在 (1) 还是缺少 (0) NaN 值。在本示例中,逻辑值总和为 0,因此数据中没有 NaN 值。

离群值部分的数据中引入了 NaN 值。

离群值

离群值是与其余数据中的模式明显不同的数据值。离群值可能由计算错误所致,也可能表示数据的重要特点。根据对数据及数据源的了解,确定离群值并决定其处理方法。

确定离群值的一种常用方法是查找比均值 大一定数目的标准差 的值。
下面的代码绘制第三个十字路口的数据直方图:

h = histogram(c3,10); % Histogram
N = max(h.Values); % Maximum bin count
mu3 = mean(c3); % Data mean
sigma3 = std(c3); % Data standard deviation
hold on
plot([mu3 mu3],[0 N],‘r’,‘LineWidth’,2) % Mean
X = repmat(mu3+(1:2)*sigma3,2,1);
Y = repmat([0;N],1,2);
plot(X,Y,‘Color’,[255 153 51]./255,‘LineWidth’,2) % Standard deviations
legend(‘Data’,‘Mean’,‘Stds’)
hold off

Matlab 基本使用_第8张图片

此绘图表明某些数据比均值大两个标准差以上。如果将这些数据标识为错误(而非特点),请将其替换为 NaN 值,如下所示:

outliers = (c3 - mu3) > 2*sigma3;
c3m = c3; % Copy c3 to c3m
c3m(outliers) = NaN; % Add NaN values

平滑和筛选

第三个十字路口的数据时序图(已在离群值中删除该离群值)生成以下绘图:

plot(c3m,‘o-’)
hold on

Matlab 基本使用_第9张图片

在绘图中,第 20 个小时的 NaN 值出现间隔。这种对 NaN 值的处理方式是 MATLAB 绘图函数所特有的。

噪音数据围绕预期值显示随机变化。您可能希望在构建模型之前对数据进行平滑处理,以便显示其主要特点。平滑处理应当以下面两个基本假定为基础:

  • 预测变量(时间)和响应(流量)之间的关系平稳。

  • 由于已减少噪音,因此平滑算法生成比预期值更好的估计值。

使用 MATLAB convn 函数对数据应用简单移动平均平滑法:

span = 3; % Size of the averaging window
window = ones(span,1)/span;
smoothed_c3m = convn(c3m,window,‘same’);
h = plot(smoothed_c3m,‘ro-’);
legend(‘Data’,‘Smoothed Data’)

Matlab 基本使用_第10张图片

使用变量 span 控制平滑范围。当平滑窗口在数据中包含 NaN 值时,平均值计算返回 NaN 值,从而增大平滑数据中的间隔大小。

此外,还可以对平滑数据使用 filter 函数:

smoothed2_c3m = filter(window,1,c3m);
delete(h)
plot(smoothed2_c3m,‘ro-’,‘DisplayName’,‘Smoothed Data’);

平滑数据在以上绘图的基础上发生了偏移。带有 ‘same’ 参数的 convn 返回卷积的中间部分,其长度与数据相同。filter 返回卷积的开头,其长度与数据相同。否则算法相同。

平滑处理可估计预测变量的每个值的响应值分布的中心。它使许多拟合算法的基本假定无效,即预测器的每个值的错误彼此独立。相应地,您可以使用平滑数据确定模型,但应避免使用平滑数据拟合模型。

汇总数据

概述

许多 MATLAB® 函数都可以用于汇总数据样本的总体位置、规模和形状。

使用 MATLAB® 的一大优点是:函数处理整个数据数组,而不是仅处理单一标量值。这些函数称为向量化函数。通过向量化可以进行有效的问题公式化(使用基于数组的数据)和有效计算(使用向量化统计函数)。

基本绘图函数

创建绘图

plot 函数具有不同的形式,具体取决于输入参数。

  • 如果 y 是向量,plot(y) 会生成 y 元素与 y 元素索引的分段线图。
  • 如果有两个向量被指定为参数,plot(x,y) 会生成 y 对 x 的图形。
    使用冒号运算符创建从 0 至 2派 的 x 值向量,计算这些值的正弦,并绘制结果。
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

Matlab 基本使用_第11张图片
添加轴标签和标题。xlabel 函数中的字符 派 用于创建符号 。title 函数中的 FontSize 属性用于增大标题所用的文本大小。

xlabel('x = 0:2\pi')
ylabel('Sine of x')
title('Plot of the Sine Function','FontSize',12)

Matlab 基本使用_第12张图片

在一幅图形中绘制多个数据集

通过调用一次 plot,多个 x-y 对组参数会创建多幅图形。MATLAB® 对每条线使用不同的颜色。

例如,下列语句绘制 x 的三个相关函数:

x = 0:pi/100:2*pi;
y = sin(x);
y2 = sin(x-.25);
y3 = sin(x-.5);
plot(x,y,x,y2,x,y3)

Matlab 基本使用_第13张图片
legend 函数提供了一种标识各条线的简单方法:

legend('sin(x)','sin(x-.25)','sin(x-.5)')

Matlab 基本使用_第14张图片

指定线型和颜色

使用 plot 命令绘制数据时,可以指定颜色、线型和标记(例如加号或圆圈):

plot(x,y,'color_style_marker')

color_style_marker 包含一至四个字符(包括在单引号中),这些字符根据颜色、线型和标记类型构造而成。例如:

plot(x,y,'r:+')

使用红色点线绘制数据,并在每个数据点处放置一个 + 标记。
color_style_marker 由下列元素的组合形式构成。

绘制线条和标记

如果指定标记类型,但未指定线型,MATLAB® 仅使用标记创建图形,而不会创建线条。例如:

plot(x,y,'ks')

在每个数据点绘制黑色正方形,但不会使用线条连接标记。
语句

plot(x,y,'r:+')

绘制红色点线,并在每个数据点处放置加号标记。

在每十个数据点处放置标记

此示例展示如何使用比绘制线条所用的数据点更少的数据点来绘制标记。它使用点线图和标记图(分别采用不同数目的数据点)绘制两次数据图:

x1 = 0:pi/100:2*pi;
x2 = 0:pi/10:2*pi;
plot(x1,sin(x1),'r:',x2,sin(x2),'r+')

Matlab 基本使用_第15张图片

绘制虚数和复数数据

将多个复数值作为参数传递给 plot 时,MATLAB 会忽略虚部,但传递一个复数参数时除外。对于这一特殊情况,该命令是绘制虚部对实部的图的一种快捷方式。因此,

plot(Z)

其中 Z 是复数向量或矩阵,等效于:

plot(real(Z),imag(Z))

下列语句将绘制一个具有 20 条边的多边形,并在各顶点处绘制一个小圆圈。

t = 0:pi/10:2*pi;
plot(exp(1i*t),'-o')
axis equal

Matlab 基本使用_第16张图片

axis equal 命令使 x 和 y 轴上的各刻度线增量的长度相同,这会使此绘图看起来更加圆润。

将绘图添加到现有图形中

hold 命令用于将绘图添加到现有图形中。当键入

hold on

时,MATLAB 不会在您发出其他绘图命令时替换现有图形。MATLAB 而会将新图形与当前图形合并在一起。

例如,下列语句首先创建 peaks 函数的曲面图,然后叠加同一函数的等高线图:

[x,y,z] = peaks;
% Create surface plot
surf(x,y,z)
% Remove edge lines a smooth colors
shading interp
% Hold the current graph 
hold on
% Add the contour graph to the pcolor graph
contour3(x,y,z,20,'k')
% Return to default
hold off

Matlab 基本使用_第17张图片

图窗窗口

如果尚未创建图窗窗口,绘图函数会自动打开一个新的图窗窗口。如果打开了多个图窗窗口,MATLAB 将使用指定为“当前图窗”(通常为上次使用的图窗)的图窗窗口。

要将现有图窗窗口设置为当前的图窗,请将指针放置在该窗口中并点击鼠标,或者也可以键入:

figure(n)

其中 n 是图窗标题栏中的编号。

要打开新的图窗窗口并将其作为当前图窗,请键入

figure

你可能感兴趣的:(matlab)