matlab入门基础
0 在线MATLAB编程网站
在线MATLAB编程网站:https://octave-online.net/
1. 清空环境变量及命令
ctrl+T %注释
Ctrl+R %取消注释
clear all % 清除Workspace中的所有变量
clc % 清除Command Window中的所有命令
2.运行程序
在编辑m文件的上面有个绿色的三角,点它可以运行程序
也可以选中所有的代码,点鼠标右键,选evaluate selection来运行
3.矩阵运算
A = [1 2 3; 4 5 2; 3 2 7]
B = A' #矩阵的转置,即行与列互换
C = A(:) #将行向量转换为列向量
D = inv(A) # A的逆矩阵
A * D # 为单位矩阵
E = zeros(10,5,3) # 表示3个10*5的矩阵
E(:,:,1) = rand(10,5) #将E(:,:,1)置为随机生成的10行5列的数组,rand是0-1的均匀随机分布,而randn是均值为0方差为1的正态分布
E(:,:,2) = randi(5, 10,5) #将E(:,:,1)置为随机生成的10行5列的数组,最大值为5r = randi(imax,m,n).
E(:,:,3) = randn(10,5)
4 元包数组
# 和上面的三维数组是不同,三维数组的每一个子数组的维度都是一样的,元包数组可以不同。
A = cell(1, 6)# 初始化,把A初始化为一个n行m列的空cell类型数据。
A{2} = eye(3) #对第二个矩阵进行赋值,返回的是单位矩阵
A{5} = magic(5) #用于产生魔方矩阵,它的每行、列以及对角线的数之和相等
B = A{5}
5 结构体
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30 40])
books.name
books.name(1)
books.name{1}
6 矩阵的基本操作
A = [1 2 3 5 8 5 4 6]
B = 1:2:9 # 生成从1到9间隔为2数
C = repmat(B, 3, 1) # 复制B,注意,它是将B作为一个整体进行复制。将B转换为三行一列。repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成
D = ones(2, 4) # 产生全1矩阵
7 矩阵的四则运算
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' # 表示标准的矩阵乘法,注意:矩阵a的列数必须与矩阵b的行数相同,B'表示矩阵的转置
F = A .* B # 表示点乘,矩阵A与矩阵B的各个元素分别相乘得到F
G = A / B % 等价于 G*B = A G*B*pinv(B)=A*pin(B) G=A*pin(B),pin(B) # 表示B的逆矩阵
H = A ./ B # 点除
8 矩阵的下标索引
A = magic(5)
B = A(2,3)
C = A(3,:)
D = A(:,4)
[m, n] = find(A > 20)# 注意:数组在找的时候是从第一列从上到下开始
9 MATLAB逻辑与流程控制
一共四种方式
- 第一种: if … else … end
A = rand(1,10) # 随机产生1行10列0到1的数
limit = 0.75;
B = (A > limit); % B is a vector of logical values。B为0或1的数组
% all函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0。
% any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。
if any(B)
fprintf('Indices of values > %4.2f: \n', limit);
disp(find(B))
else
disp('All values are below the limit.')
#disp('你要输出的字符串'),
end
- 第二种: for … end
k = 10;
hilbert = zeros(k,k); % Preallocate matrix,生成一个全0矩阵
for m = 1:k
for n = 1:k
hilbert(m,n) = 1/(m+n -1);
end
end
hilbert
-第三种: while … else
n = 1;
nFactorial = 1;
while nFactorial < 1e100 %1e100表示10的100次方
n = n + 1;
nFactorial = nFactorial * n;
end
n
factorial(69) %factorial为阶乘函数,即69的阶乘
factorial(70)
prod(1:69) % prod是连乘的形式,即从1乘到69
prod(1:70)
- 第四种:switch … case … end
myScript.m文件
mynumber = input('Enter a number:');
switch mynumber
case -1
disp('negative one');
case 0
disp('zero');
case 1
disp('positive one');
otherwise
disp('other value');
end
10 Matlab脚本文件和函数文件
第一种:脚本文件
定义:可以直接执行的文件就是脚本文件
myScript.m文件
** 第二种:函数文件**
区别:不能直接运行,需要输入一定的参数才能执行
myScript.m
mynumber = input('Enter a number:');
output = myFunction(mynumber)
myFunction.m
function output=myFuction(input)
switch mynumber
case -1
disp('negative one');
case 0
disp('zero');
case 1
disp('positive one');
otherwise
disp('other value');
end
11 MATLAB基本绘图操作
参考网站:https://www.cnblogs.com/lihuidashen/p/3443735.html
1. 二维平面绘图
x = 0:0.01:2*pi;
y = sin(x);
figure
plot(x, y)
title('y = sin(x)')
xlabel('x')
ylabel('sin(x)')
% xlim([xl xr]);ylim([yl yr]);用于限定x轴y轴上线限制
xlim([0 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
% plotyy(X1,Y1,X2,Y2):以左、右不同纵轴绘制X1-Y1、X2-Y2两条曲线。
%[AX,H1,H2]=plotyy(...):返回AX中创建的两个坐标轴的句柄以及H1和H2中每个图形绘图对象的句柄。AX(1)为左侧轴, AX(2)为右侧轴。
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
%get(a)表示可以得到a的所有对象
AX1=get(AX(1),'Ylabel')
% 设置左侧轴标签
set(AX1,'String','Slow Decay')
% 设置标签颜色
set(AX1,'color','b');
% 设置线条风格
set(H1,'LineStyle','--');
% 设置线条颜色
set(H1,'color','b');
set(get(AX(2),'Ylabel'),'String','Fast Decay')
set(H2,'LineStyle',':');
set(H2,'color','r');
xlabel('Time (\musec)')
title('Multiple Decay Rates')
%设置图例,legend() 有两个参数 Position 和来 FontSize 分别设置 图例位置源/大小, 字体zd大小
legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});
2. 三维立体绘图
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on
axis square
3. 图形的保存与导出
% (1) Edit → Copy Figure
% (2) Toolbar → Save
%写论文时要求图像格式不低于多少
% (3) print('-depsc','-tiff','-r300','picture1')
% 在写论文的时候常遇到单列排版和双列排版的问题,当双列排版时,如果像素宽度设置为400,发现图片不能完全显示。此时只能对图片进行缩小,会发现可以虽然能够完全显示了,但是图片中的文字出现模糊。如果像素宽度设置为200,发现能够很好的避免上述情况的发生。
% (4) File → Export Setup
12 MATLAB文件的导入
1. mat格式
注意:mat文件在默认的Windows资源管理器中是以Microsoft Access Table Shortcut (.mat)的形式存在的。此时,使用load命令就可以将其打开了。形式如下:
% 将变量保存到生成的.mat文件中,也可以通过save('data.mat','a','b')的方式
save data.mat x y1 y2
clear all
% 加载.mat文件
load data.mat
2. txt格式
myfile.txt文件:包含一些字符串和数字
data.txt文件
方式一:
delimiterIn = ' '; % 字符分隔符
headerlinesIn = 1; % 文件头的行数
A = importdata('myfile.txt', delimiterIn, headerlinesIn);
A
data = A.data
textdata = A.textdata
colheaders = A.colheaders
方式二:
% 可将txt文件中的数据导入到矩阵中
M = importdata('myfile.txt');
S = M.data;
save 'data.txt' S -ascii
T = load('data.txt');
isequal(S, T)
3. xls格式
xlswrite('data.xls',S)
W = xlsread('data.xls');
isequal(S, W)
xlswrite('data.xlsx',S)
U = xlsread('data.xlsx');
isequal(S, U)
4. csv格式
csvwrite('data.csv',S)
V = csvread('data.csv');
isequal(S, V)