Matlab零基础入门

x33g5p2x  于2022-05-27 转载在 其他  
字(3.1k)|赞(0)|评价(0)|浏览(778)

前言:本篇是随笔,一段时间没用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)

A{2}=eye(3)

3.3 magic

生成n阶幻方,无论横竖斜三个方向上的三个数的和总是相同的。
把3*3的幻方矩阵放入A的第一个盒子

A{1}= magic(3)

3.4 结构体

注意下初始化方式略有不同,可以理解成键值对。

books=struct('name',{{'machine learning','data mining'}},'price',[30,40])

books.name

books.name(1)     得到cell

books.name{1}    得到字符串

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);

相关文章