【例2.1】将矩阵[1,2;3,4]赋值给矩阵a,将a矩阵中的每个元素加1,赋值到矩阵b,将矩阵a的第1行第2列元素置为0,将矩阵a的第2列元素全置为0,求矩阵b转置、逆、秩。
a = [1, 2; 3, 4];
disp(a);
b = a + 1;
a(1, 2) = 0;
disp(a);
a(:, 2) = 0;
% python [] 从0开始 matlab() index从1开始
disp(a);
% 转置
Tb = b';
disp(b);
disp(Tb);
invB = inv(b);
disp(invB);
Det_b = rank(b); % 矩阵b的秩
disp(Det_b); % 2
【例2.2】矩阵a=[1,2;3,4],矩阵b=[5,6;7,8],实现两矩阵加、减、乘、点乘。
a = [1, 2; 3, 4];
b = [5, 6; 7, 8];
add_a_b = a+b;
disp(add_a_b);
sub_a_b = a-b;
disp(sub_a_b);
multi_a_b = a.*b;
disp(multi_a_b);
【例2.3】新建m文件,名称为Three _ass_add,在文件中实现对3个字符赋值(分别赋值为2、3、4),以及实现3个字符相加,其中,3个字符相加通过定义函数Three_add实现
%在文件中实现对3个字符赋值(分别赋值为2、3、4),
%以及实现3个字符相加,其中,3个字符相加通过定义函数Three_add实现
clear all;
close all;
clc;
a = 2;
b = 3;
c = 4;
result = Three_add(a, b, c);
disp(result);
Three_add.m
%% 实现3赋值字符相加函数
function result = Three_add(a, b, c)
result = a + b + c;
end
了解计算机编程语言的读者一定知道,编程的基本流程控制语句主要有4种,分别是if语句、for语句、while语句和switch语句。下面分别用实例进行讲解如何在MATLAB中使用这四类语句。
【例2.4】矩阵a=[1,2,3;4,5,6;7,8,9],如果矩阵a中元素为5或为6时,将元素置为0。要求分别通过for、if语句实现,while、if语句实现,for、switch语句实现。
通过for、if语句实现的For_if.m文件程序:
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
% 行数是3行
for i = 1:3
for j = 1:3
if a(i, j) == 5 || a(i, j)== 6
a(i, j) = 0;
end
end
end
disp(a);
whileif.m
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
i = 1;
while(i<=3)
j = 1;
while(j <= 3)
if a(i, j) == 5 || a(i, j)== 6
a(i, j) = 0;
end
j =j+1;
end
i = i + 1;
end
disp(a);
for_switch
%矩阵a=[1,2,3;4,5,6;7,8,9],如果矩阵a中元素为5或为6时,
%将元素置为0。要求分别通过for、if语句实现,while、if语句实现,for、switch语句实现。
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
for i = 1:3
for j = 1:3
switch (a(i, j))
case 1
case 2
case 3
case 4
case 5
a(i, j) = 0;
case 6
a(i, j) = 0;
case 7
case 8
case 9
end
end
end
disp(a);
【例2.5】假设变量x=[1,2,3,4,5,6],y=[8,9,10,15,35,40],对x、y数据绘图,包括数据点“*”标记、折线图、平滑曲线图。
% plot 绘图
x = [1,2,3,4,5,6];
y = [8,9,10,15,35,40];
plot(x,y,'*b') ;%绘制数据点“*”标记,且用蓝色标记
hold on %绘图叠加
plot(x,y);
xx = min(x):.1:max(x);
yy = interp1(x,y, xx, 'pchip')% 以三次函数的方式进行插值
disp(xx);
plot(xx,yy, 'r');
hold off;
MATLAB三维绘图函数包括三维网格图函数mesh、三维曲面图函数surf、三维曲线图函数plot3、三维球面函数sphere、三维柱面函数cylinder、三维柱形图函数bar3、三维杆图函数stem3、三维饼图函数pie3和三维填充图函数fill3等。
【例2.6】假设函数z=xe(-x2-y2),要求在x∈[-2,2],y∈[-2,2]区间内绘制三维网格图和三维曲面图。
% 等分 x , y
x = -2:.2:2;
y = -2:.2:2;
% meshgrid
[X, Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
% 绘制
mesh(X, Y, Z); %绘制三维网格图
% 等分 x , y
x = -2:.2:2;
y = -2:.2:2;
% meshgrid
[X, Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
% 绘制
surf(X, Y, Z); %绘制三维曲面图
在实际应用中,经常需要在一个图形窗口中绘制若干个独立的图形,这就需要对图形窗口进行分割。分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口下的不同图形称为子图。MATLAB提供了subplot函数用来将当前窗口分割成若干个绘图区,每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot函数激活某一区,该区为活动区,所发出的绘图命令都是作用于该活动区域。
【例2.7】将例2.5和例2.6中的图绘制到一个图框中,且完成对其坐标轴的各类操作。
% 绘制子图
subplot(2, 2, 1)% 2行2列的第一个
x = [1,2,3,4,5,6];
y = [8,9,10,15,35,40];
plot(x,y,'*b') ;%绘制数据点“*”标记,且用蓝色标记
hold on %绘图叠加
plot(x,y,':');
xx = min(x):.1:max(x);
yy = interp1(x,y, xx, 'pchip')% 以三次函数的方式进行插值
disp(xx);
plot(xx,yy, 'r');
title('二维绘图1')
text(2, 5, '坐标值') % 在 2, 5 处添加文字说明
hold off; %绘图叠加关闭
subplot(2, 2, 2)% 2行2列的第2个
plot(x,y,'^g');
hold on %绘图叠加
plot(x,y);
plot(xx,yy);
title('二维绘图2')
axis([0 8 0 50]) % 对坐标轴进行限制
legend('点标记', '折线图', '光滑图');
grid on;
hold off; %绘图叠加关闭
subplot(2, 2, 3)% 2行2列的第3个
x = -2:.2:2;
y = -2:.2:2;
% meshgrid
[X, Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
% 绘制
mesh(X, Y, Z); %绘制三维网格图
xlabel('x')
ylabel('y')
zlabel('z')
subplot(2, 2, 4)% 2行2列的第4个
surf(X, Y, Z); %绘制三维曲面图
axis off % 隐藏坐标轴
MATLAB作为数学计算平台,并且将其作为机器学习的平台,必然需要MATLAB具有强大的数据导入和导出能力。MATLAB操作的数据性文件包括.mat、.txt、.xls、.xlsx、.csv等。其中,.mat文件是MATLAB平台自身保存数据的格式,.txt为文本文件,.xls和.xlsx为Office Excel文件,.csv为一种特殊格式的纯文本文件。