1.基础使用
1.1基础知识
命令行:
clc 清除界面
clear all 清除界面+清除工作区(变量显示)
注释:
%□行注释
%{
块注释
%}
语句后不加;则马上在命令行中打印出其值
语句后加;则不显示
1.2变量名称:
区分大小写
最长不超过64位
字母开头、可以由字母、数字、下划线组成
1.3脚本文件名称:
尽量以字母开头,后缀为.mat
1.4基本数据类型
工作区可以看到变量命名
没赋值给变量的会赋值给ans
s = 'a'
abs(s) % ascll
char(97) % 没赋值给变量的会赋值给ans
b = num2str(65)
str = 'I love Matlab'
len = length(str)
1.5矩阵的运算
A = [1 2 3;4 5 2;3 2 9] % 二维矩阵
B = A' % 将A转置
C = A(:) % 拍扁(竖着的)
D = inv(A) % 矩阵的求逆矩阵,矩阵必须为方阵。
O = A*D
% 定义0矩阵
E = zeros(10,5,3) % 三维的,10行5列,按照通道打印
% 标准正态分布randn(m,n)
% 随机整数randi(iMax) randi(iMax,m,n) randi([iMin,iMax],m,n)
E(:,:,1) = rand(10,5) %伪随机分布(正态分布0~1)
E(:,:,2) = randn(10,5)
E(:,:,3) = randi([1,10],10,5)
%{
E(:,:,1) =
0.2760 0.7513 0.8407 0.3517 0.0759
0.6797 0.2551 0.2543 0.8308 0.0540 ……
E(:,:,2) =
-1.7947 -0.1941 -1.2078 -2.0518 -0.2991
0.8404 -2.1384 2.9080 -0.3538 0.0229 ……
E(:,:,3) =
10 3 9 8 5
10 5 1 2 5 ……
%}
E(:,:,3) = randi([1,10],10,5)
矩阵的进一步运算
% 矩阵的进一步运算
A = [1 2 6 4 6 8 2 5 9]
B = 1:3:9 % 不可缺少
% 1 4 7 10
C = repmat(B,3,2) % 重复的意思重复3行1列
%{
1 4 7 1 4 7
1 4 7 1 4 7
1 4 7 1 4 7
%}
D = ones(2,4)
% 矩阵的四则运算
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A+B
E = A*B'
%{
17 13
41 37
%}
F = A .* B % 加点的是对应项相乘
H = A ./ B
%{
1 2 6 8
10 12 7 8
%}
G = A/B % C = A*B的逆
下标的定义
% 矩阵的下标与切片
A = magic(5)
B = A(2,3)
C = A(3,:)
D = A(:,2)
[m,n] = find(A>20) %找到大于20的序号值/矩阵 输出:m = …… n = ……
1.6元胞数组 的定义
% 元胞数组
A = cell(1,6) % 1×6 cell 数组 :{0×0 double}……
A{2} = eye(3) % 索引从1开始,生成单位矩阵
A{2}
%{
ans =
1 0 0
0 1 0
0 0 1
%}
A{5} = magic(5) %MAGIC:魔方:生成n阶的幻方
A{5}
% 通过下表赋值
B = A{5}
1.7结构体 的定义
% 结构体
books = struct('name',{{'ML','DM'}},'price',[30,40])
%{
books =
包含以下字段的 struct:
name: {'ML' 'DM'}
price: [30 40]
%}
books.name
books.name(1) % 小括号取出来的是cell: 1×1 cell 数组 {'ML'}
books.name{1} % 中括号取出来的是字符串: 'ML'
1.8程序结构
%%
% 逻辑控制 for 循环变量=初值:步长:终值
% 1^2+2^2+...+5^2
sum = 0
for i=1:5
sum = sum + i^2;
end
sum
% 计算∑(i=0,5)i!
sum = 0
for i=1:5
d=1;
for j=1:i;
d=d*j;
end
sum=sum+d;
end
sum
% 计算10!
i = 0;
sum = 0
while i<=10
sum = sum+i;
i = i+1;
end
sum
%分支结构
a = 100
b = 20
if a>b
"成立"
end
a = 100
b = 200
if a>b
"成立"
else
"不成立"
end
% switch case end
a = 1
b = 2
c = 3
switch a
case 1
"a=1"
a = a+1
case 2
"a=2"
case 3
"a=3"
otherwise
"haha"
end
a
% 执行完一个就自动跳出循环了,只可能执行一个分支
1.9二维图像
%%
% 绘图-2d
x = 0:0.01:2*pi;
y = sin(x);
figure; % 建立一个幕布
plot(x,y);
title('y=sin(x)');
xlabel('x');
ylabel('y');
xlim([0 2*2*pi]) % 设置边缘
样式表
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坐标 ,最后一个参数plot加不加无所谓,但不能改
% 返回的变量?
% 设置坐标标记
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(H1, 'LineStyle',';')
1.10三维图像
样式说明:网格曲面图 - MATLAB mesh - MathWorks 中国
%%
% 三维立体绘图
t = 0:pi/50:10*pi;
figure % 建立一个幕布
plot3(sin(t), cos(t),t)
xlabel('sin(x)')
ylabel('cos(t)')
zlabel('t')
grid on %作用:网格线
axis square % 横竖轴调节
hold on
figure
[x,y,z] = peaks(30);
mesh(x,y,z)
grid
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)