目录
1.帮助命令
2.数据类型
3.元胞数组和结构体
4.矩阵操作
4.1 矩阵的定义与构造
4.2 矩阵的四则运算
4.3 矩阵的下标
5.程序结构
5.1 for循环结构
5.2 分支结构
7.基本绘图操作
7.1.二维平面绘图
6.2 三维立体绘图
7.图形的保存与导出
8.补充
语句后⾯加;的作⽤是:程序运⾏时不在命令⾏窗⼝显⽰改⾏的运算结果。
format compact:%输出行间距设置为紧凑模式
format loose:%恢复到默认的松散模式
需要注意的是,
format
函数的设置只会影响当前 MATLAB 会话中的输出行间距,不会改变实际的数据或变量。此外,该设置对于图形和其他非命令行的输出可能没有影响。
%% 独占一行的注释
% 普通注释
clear all 删除所有变量
clc 删除命令行窗口内容
变量命名规则:区分大小写;长度不超过63
10/3=3.3333 /是真除法
abs('a') %输出97 单引号表示字符
abs('ab') %输出97 98
char(97) %输出'a'
num2str(97) %输出'a'
length('adjkasnjfka') #输出的是字符串长度
A=[1 2 3;4 5 6;7 8 9] %定义矩阵
B=A' %转置
C = A(:) %竖向拉长
D = inv(A) %逆矩阵(必须时方阵才能求逆矩阵)
A * D (相当于A×A的逆)
在MATLAB中,可以使用inv函数或者det函数来判断一个矩阵是否可逆。
·inv函数用于计算矩阵的逆。如果一个矩阵是可逆的,inv函数将返回该矩阵的逆矩阵。如果矩阵不可逆(奇异矩阵),inv函数将引发一个异常。
·det函数用于计算矩阵的行列式。如果一个矩阵的行列式不等于零,则说明该矩阵是可逆的;如果行列式等于零,则说明该矩阵是不可逆的。
E = zeros(10,5,3) 创建一个10行5列3维的全0矩阵
E(:,:,1) = rand(10,5) %rand生成均匀分布的伪随机数。分布在(0~1)之间
rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’
rand():生成[0,1)的小数
rand(m):生成m X m的方阵,随机小数填充
rand(m,n):生成m X n的矩阵,随机小数填充
rand(m,n,p):生成m X n X p的矩阵,随机小数填充
a+(b-a)*rand():[b,a]区间小数
‘double’和'single':指定数据类型,放在rand的最后一个参数位置
randi是生成的整数,rand是[0,1]的小数。
randi(iMax):生成[0,iMax]的整数
randi(iMax,m):生成m X m的方阵,数值区间[0,iMax]
randi(iMax,m,n):生成m X n的矩阵,数值区间[0,iMax]
randi(iMax,m,n,p,...):后面的全部都是维度m X n X p X ...
randi([iMin,iMax],m,n):生成m X n的矩阵,数值区间[iMin,iMax]
randn(m):m X m
randn(m,n):m X n
randn(m,n,p):m X n X p
·只有randi能够指定[iMin,iMax],rand、randn都不可以。
·randi生成的是整数,rand、randn生成的是小数。
·randn只能指定维度。
元胞数组:是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的布局类型,概念理解上,可以认为它和C语言里面的结构体、C++里面的对象很类似。元胞数组是MATLAB中的特色数据类型,它不同于其它数据类型(如字符型,字符数组或者字符串,以及一般的算数数据和数组)。它特有的存取数据方法决定了它的特点,它有给人一种查询信息的感觉,可以逐渐追踪一直到所有的变量全部翻译成基本数据信息。它的class函数输出就是cell(细胞)
元胞数组
A = cell(1,6) %定义
A{2} = eye(3) %2021版本前的matlab下标从1开始
A{5} = magic(5) %魔方:该矩阵无论横、竖还是斜三个方向上的数的和总是相同的
B = A{5}
结构体
注意定义里面是逗号隔开,访问时候用点。
>> books=struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40]) books = 包含以下字段的 struct: name: {'Machine Learning' 'Data Mining'} price: [30 40] >> books.name ans = 1×2 cell 数组 'Machine Learning' 'Data Mining' >> books.price ans = 30 40 >> books.name(1) ans = cell 'Machine Learning' >> books.name{1} ans = Machine Learning
>> A=[1,2,3,4,5,6,7,8,9]%直接定义矩阵
A =
1 2 3 4 5 6 7 8 9
>> B=1:2:9 %第二个参数为步长,不可缺省,[1,9]包含最后一个数值
B =
1 3 5 7 9
>> C = repmat(B,3,2) %重复执行3行2列
C =
1 3 5 7 9 1 3 5 7 9
1 3 5 7 9 1 3 5 7 9
1 3 5 7 9 1 3 5 7 9
>> D = ones(2,4) %生成一个2行4列的全1矩阵
D =
1 1 1 1
1 1 1 1
>> A = [1 2 3 4; 5 6 7 8]
A =
1 2 3 4
5 6 7 8
>> B = [1 1 2 2; 2 2 1 1]
B =
1 1 2 2
2 2 1 1
>> C=A+B %对应位置相加
C =
2 3 5 6
7 8 8 9
>> C=A*B' %'是转置符号
C =
17 13
41 37
>> C=A'*B
C =
11 11 7 7
14 14 10 10
17 17 13 13
20 20 16 16
>> A
A =
1 2 3 4
5 6 7 8
>> B
B =
1 1 2 2
2 2 1 1
>> A.*B %对应位置相乘
ans =
1 2 6 8
10 12 7 8
>> A./B %对应位置相除
ans =
1.0000 2.0000 1.5000 2.0000
2.5000 3.0000 7.0000 8.0000
>> G = A / B %相当于A*B的逆 G*B = A G*B*pinv(B) = A*pinv(B) G = A*pinv(B),相当于A乘B
G =
1.8333 -0.1667
3.1667 1.1667
>> A * inv(B)
错误使用 inv
矩阵必须为方阵。
>> A * pinv(B) %pinv可以不是方阵
ans =
1.8333 -0.1667
3.1667 1.1667
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(2,3) %矩阵坐标从1开始数,访问第二行第二列元素
ans =
7
>> A(2,:) %访问第二行所有元素
ans =
23 5 7 14 16
>> A(:,3) %访问第三列所有元素
ans =
1
7
13
19
25
>> find(A>20) %返回的是大于20的元素的下标,竖着数
ans =
2
6
15
19
23
>> A(6)
ans =
24
>> sum=0;
>> for i=1:5
sum=sum+i*i;
end
>> sum
sum =
55
sum=0;
for i=1:5
cur=1;
for j=1:i
cur=cur*j;
end
sum=sum+cur;
end
disp(sum); %153
%打印九九乘法表
for i=1:9
for j=1:i
a(i,j)=i.*j;
end
end
disp(a);
>> test01
1 0 0 0 0 0 0 0 0
2 4 0 0 0 0 0 0 0
3 6 9 0 0 0 0 0 0
4 8 12 16 0 0 0 0 0
5 10 15 20 25 0 0 0 0
6 12 18 24 30 36 0 0 0
7 14 21 28 35 42 49 0 0
8 16 24 32 40 48 56 64 0
9 18 27 36 45 54 63 72 81
x=0:0.01:2*pi;
y=sin(x);
figure; %建立一个幕布
plot(x,y);
title('y=sin(x)');
xlabel('x');
ylabel('y');
xlim([0 2*pi]); %设置x坐标值的范围
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','--','Color','b');
set(H2,'LineStyle',':','Color','k');
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 %使整个图(连同坐标系)呈方块
hold on是当前轴及图像保持而不被刷新,准备接受此后将绘制的图形,多图共存,即启动图形保持功能,当前坐标轴和图形都将保持,从此绘制的图形都将添加在这个图形的基础上,并自动调整坐标轴的范围。
hold off使当前轴及图像不再具备被刷新的性质,新图出现时,取消原图。即关闭图形保持功能。
hold on 和hold off,是相对使用的。
如果直接用截图的方式截取matlab生成的图像,会影响图像的清晰度。因此我们建议:可以用如下方法保存与导出图形。
1)如图
2)编辑→复制选项
可调节相应元素
3)编辑→图窗属性
4)文件→导出设置
通过调节宽度、高度等像素值属性,可以让图片即使很小,文字依然清晰。
Matlab基础的部分到这就结束了,下面作一点补充~
[x,y,z] = peaks(30); %peaks命令用于产生双峰函数或者是用双峰函数绘图
mesh(x,y,z)
grid
>> peaks
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)