本文参考B站视频:BV13D4y1Q7RS
由于我对于C语言很熟悉,很多语法是会参考C来学
基础操作
- 清屏
%% 清空环境变量及命令 clear all %清除Workspace中的所有变量(右侧工作区) clc %清除Command Window中的所有命令(命令行窗口)
- 注释
%% %
- 查功能
doc 你要查询的
变量命名
变量命名规则
- 变量名区分大小写
- 变量名长度不超过63位(MATLAB R2012a 32bit和64bit计算机上测试结果)
- 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
- 变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义
数据类型
-
数字
-
字符
s='a' %单引号表示字符串 abs(s) %输出s的ASCII码 char(97) %输出ASCII码对应的字符 num2str(65) % Number To Str输出字符数字65
-
字符串
str='I love MATLAB & Machine Learning' length(str) %字符串长度
-
矩阵
矩阵的定义与构造%% 矩阵的定义与构造 A1 = [1,2,3,4,5,6,5,4,6] B=1:2:9 %1-9隔1取值,第二个参数为步长,不可缺省 C = repmat(B,3,2) %重复执行3行2列 A2 = [1 2 3; 4 5 2; 3 2 7] %3*3 D = ones(2,4) %生成一个2行4列的全1矩阵 E = zeros(10,5,3) %创建一个10行5列3维的全0矩阵 % rand(m,n)生成m*n均匀分布的伪随机数,分布在(0~1)之间 % rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是’single’ % rand(RandStream,m,n)利用指定的RandStream(随机种子)生成伪随机数 F(:,:,1) = rand(10,5) %10*5 % randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机数 % randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵 % randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵 E(:,:,2) = randi(5,10,5) % randn生成标准正态分布的伪随机数(均值为0,方差为1) E(:,:,3) = randn(10,5)
矩阵的运算
%% 矩阵的运算 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的逆 H = A ./ B % ./表示对应项相除 I = A2' % A转置 J = inv(A) % 逆矩阵
数组下标
%% 数组下标 B=A(2,3) C=A(3,:) %第三行 D=A(:,4) %第四列 [m,n]=find(A >20) %找符合()中式子的数字下标
-
元胞数组
%% 元胞数组 A = cell(1,6) A{2} = eye(3) %下标从1开始 eye(3)对角线为1的3*3矩阵 A{5} = magic(5) % magic(5)5*5幻方矩阵 B = A{5} %取A第5个cell
-
结构体
%% 结构体 books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40]) books.name books.name(1) %取cell books.name{1} %取字符串
逻辑和流程控制
循环结构
-
for循环
%% for循环 语法格式: for循环变量=初值:步长:终值(步长可省略,默认为1) 执行语句1 ... 执行语句n end
%【例5-8】求1^2+2^2+3^2+4^2+5^2的和。程序设计为: sum = 0 for n= 1:1:5 sum = sum +n^2; end
sum = 0; for i= 1:5 p= 1; for j=1:i p=p*j; end sum = sum + p; end
-
while循环
%% while 语法格式: while 条件表达式 执行语句1 ... 执行语句n end
% 【例5-11】求1+2+3+4+5+…+10的和。 s= 0 n= 1 while n<= 10 %设置循环条件 s =s+n n =n+1 end
%【例5-12】设计一段程序,求1~100的奇数和程序设计为: x= 1 sum = 0 while x<101 sum= sum+ x; x =x+2 end
分支结构
-
if…end
%% if...end 语法格式: if 条件表达式 ... 语句体 ... end
-
if…else…end
%% if...else...end 语法格式: if 条件表达式 语句体1 else 语句体2 end
-
switch…case…end
%% switch switch 表达式(数值或字符串) case数值或字符串1 语句体1; case数值或字符串2 语句体2; ... otherwise 语句体n; end
switch后面表达式的值为数值变量或字符变量,通过这些值与case后面数值或字符串的值进行比较,与哪一个 case的值相同就执行哪一个case下面的语句体,如果与所有case的值都不相同,则执行otherwise下面的语句体。otherwise语句可以省略,如果省略ptherwise,所有case都不满足时跳出分支结构,另外switch必须与end配对使用。
绘图基本操作
二维平面绘图
%% 二维平面绘图
x = 0:0.01:2*pi %定义x的范围,第二个参数表示步长
y = sin(x)
figure %建立一个幕布
plot(x,y) %绘制当前二维平面图
title('y = sin(x)') %标题
xlabel('x') %x轴
ylabel('sin(x)') %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','--') %参数设置
set(H2,'LineStyle',':')
三位立体绘图
%% 三维立体绘图
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 %使整个图(连同坐标系)呈方体
图像窗口的分割
%% 图像窗口的分割
x=linspace(0,2*pi,60);
subplot(2,2,1)%用来给幕布分格,表示将幕布均等分成2行2列,将图形放到第一个格子中
plot(x, sin(x)-1);
title('sin(x)-1');axis([0,2*pi,-2,0])
subplot(2,1,2)
plot(x, cos(x)+1);
title('cos(x)+1');axis([0,2*pi,0,2])
subplot(4,4,3)
plot(x, tan(x));
title('tan(x)');axis([0,2*pi,-40,40])
subplot(4,4,8)
plot(x, cot(x));
title('cot(x)');axis([0,2*pi, -35,35])