Matlab零基础入门
Posted 林慢慢脑瓜子嗡嗡的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab零基础入门相关的知识,希望对你有一定的参考价值。
前言:本篇是随笔,一段时间没用Matlab,简单复习了下,都是入门知识,零基础可读
文章目录
1. 初步认识界面和命名
四个区:文件区、命令行窗口、编辑器以及工作区
1.1 建立脚本(即编辑器),后进行命令;
1.2 脚本名称不保存就输入内容会在文件夹的名字右上角显示*号;
1.3 变量名必须以字母开头!
1.4 文件名建议最好是字母开头。
组成:字母、数字、下划线
1.5 编辑器内选中所需执行内容,右键可单独进行执行
1.6 Matlab所有的索引 index都是从1开始的,对于非码农而言的科研人员相当友好。
2. 数据类型和矩阵
2.1 数据类型
五种:数字;字符和字符串;矩阵;元胞数组;结构体
2.2 clc 和 clear all的区别
clc : 清除命令行窗口的所有命令
clear all : 清楚工作区的所有变量
2.3 注释:matlab软件的注释跟C++、Java这类语言还不一样, %%是横线加粗的注释 %是普通注释
2.4 加减乘除,+ - * /
2.5 字符串: 用单引号引起来(注意区分C++的双引号)。
2.6 区分 abs 、char 、num3str 把数字转换为字符串
对字符操作的话,abs是ASCII转10进制,char10进制转ASCII。
备注:abs函数:数值的绝对值和复数的模值, 函数的定义域包括复数。
“num2str(65)”是把数字65,转换成字符串‘65’
2.7 length计算字符串长度 length(s)
类似其他语言的length
2.8 矩阵运算
定义矩阵:
A=[1 2 3;4 5 6; 7 8 9]
转置矩阵:
B=A'
拉长矩阵(竖向拉长):
C=A(:)
求逆矩阵 :
D=inv(A)
生成全0的矩阵:
E=zeros(4,2,3)
E矩阵3维,4行, 3列 全为0
2.9 rand、randi和randn的区别
演示几个:
在一维生成随机数,随机数范围是0~1
E(:,:,1) = rand(4,2)
在二维生成随机数,随机数范围0~10
E(:,:,2) = randi(10,4,2)
在三维生成标准正态分布的随机数
E(:,:,3) = randn(4,2)
3.元胞数组和结构体
3.1 元胞数组
类似C++中的结构体类型
例:
A = cell(1, 6)
3.2 eye(3)
生成3行3列单位矩阵(对角线为1,其余为0)
A2=eye(3)
3.3 magic
生成n阶幻方,无论横竖斜三个方向上的三个数的和总是相同的。
把3*3的幻方矩阵放入A的第一个盒子
A1= magic(3)
3.4 结构体
注意下初始化方式略有不同,可以理解成键值对。
books=struct('name','machine learning','data mining','price',[30,40])
books.name
books.name(1) 得到cell
books.name1 得到字符串
4. 矩阵构造和四则运算
4.1 矩阵构造
B=1:2:9
1-9 步长为2递增跳转
c=repmat(B,3,2)
把B竖着重复三次,横着重复两次
可以理解成把B当成一个最基本的数据,重复B创建一个新的3行2列的矩阵
D=ones(2,4)
两行四列全1的矩阵,其它可在此基础上乘响应的倍数
4.2 矩阵运算
注意下点乘就行
A .* B 对应项相乘
A. / B 对应项相除
A / B 矩阵相除,可以理解成A乘上B的逆矩阵。
4.3 矩阵的下标
注意一点,跟C++的二维数组不同的点在于,matlab矩阵的下标起点为1
A = magic(3)
B = A(1,1)
B=A(:,3) 第三列所有行
C=A(3,:) 取第三行所有列
b=A(:,[1,3]) 取所有行,第1,3列
c=A([2,3],[1,2]) 取第2,3行,以及1,2列
4.4 find的用法:
返回矩阵或向量中非零元素的索引
[m,n]=find(A>5)
返回非零元素下标 find(vector) m行n列
5.逻辑与流程控制
这块没啥注意的,逻辑和C语言类似。
5.1 if end 分支结构
if else end
5.2 for end
例:
和其他语言一样,matlab的for循环也可以嵌套for循环
例:
5.3 while end
while后面的东西成立,则执行,否则 end
例:
5.4 switch case case … otherwise end
6.绘图
6.1 二维平面绘图
figure 在使用plot绘图的时候,默认都是在figure上面,figure可以新建一个空白图像
plot(x,y) 作图函数
title('y=sin(x)') 图标题
xlabel('x') 给x加一个坐标
ylabel('sin(x)') 给y加一个坐标
xlim([0 2*pi]) 给图片能显示的x坐标限制一个最大值
plotyy 共用一个x坐标系,在y上面有不同的取值
自定义颜色:
自定义线型
自定义数据标记点
代码案例:
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')
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time(\\mesec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')
执行到plotyy,理解下共用一个坐标系的意思
增加横纵坐标名称,并为图片增加图片名
改变线型
6.2 三维立体绘图
二维绘图用plot,三维绘图用plot3()
加网格 gird on
各个方向变成正方体 axis square
加标签 xlabel(‘’) ylabel(‘’) zlabel(‘’)
保持原图,后边还要在这个基础上继续画图 hold on
例:
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on
axis square
6.3图形的保存和导出
两个办法导出图片(不要直接截图)
(1) 编辑 ->复制图片->word中粘贴 (导出设置中可以设置大小)
(2) 文件->保存
6.4 图形窗口的分割
subplot(2, 2, 1) 2行2列四个方块第一个图
subplot(2, 1, 2) 2行1列两个块第二个图
subplot(4,4,3) 4行4列第三个
subplot(4,4,8) 4行4列第八个
x = linspace(0, 2*pi, 60);
subplot(2, 2, 1)
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])
问题:matlab代码行加不加分号的区别?
在代码行的后加分号,运行结果不会显示在命令行窗口;不加分号,变量的值会随着运行显示在命令行窗口。
如果不想命令行窗口显示太多东西,可以在代码编写的过程中加上分号,需要知道变量的值的时候在工作区进行查看即可。
nspace(0, 2*pi, 60);
以上是关于Matlab零基础入门的主要内容,如果未能解决你的问题,请参考以下文章