matlab基础学习

写在前面的话这是一个补充深化MATLAB基础概念与操作的推送系列,初学入门&查漏补缺必备。部分图片来源MATHWORKS官网

图片

#第一话#主要介绍一下MATLAB最基本与最核心的概念和最有用的软件界面操作如果你是刚刚准备学,也能完全看懂这一话。如果你有什么建议,可以给我留言。

本推送中截图版本为2019b,其实各个版本界面差别不大。大家在安装的时候尽量选择b版本,代表当年下半年发布,通常比同期a版本更优。


 

图片

(动态绘图,源码在文末)

1. 简介:首先MATLAB 是“Matrix Laboratory”的缩写形式,即它的全称是矩阵实验室,而不是数学(Maths)实验室,对于初学者来讲其实蛮容易搞错的。这意味着MATLAB非常强调矩阵(或者叫数组也无妨,因为大多数情况下我们会将这两个概念混用)运算,而其他编程语言大多利用循环逐个处理数值(即矩阵元素),如C++。因此,所有 MATLAB 变量其实都是多维数组(可以理解成广义的矩阵)。由此在编程中要注意:在MATLAB中要尽量少用循环语句,尤其是多重循环,而应采用矩阵操作,体量较大的代码将看出循环语句在MATLAB中的劣势。据统计,同样的循环下MATLAB执行循环的的时间将会是C++的20倍左右。

图片

具体关于数组的基操参见下方搬运过来的截图:

图片

图片


2. 界面:MATLAB启动页面是下方这样的,多个版本的差别不是非常大,默认的三列框是MATLAB特有的风格。左侧是"当前文件夹",顾名思义,告诉你目前运行代码在哪个文件夹,如果不指定路径,生成的文件也都将默认保存在这个文件夹;同时,导入在当前文件夹下的文件也无无需指定路径。中间最大的一块是"命令行窗口",可以理解成输入一句代码就执行一句代码的窗口,各种报错信息也都将在这里出现;最右侧是"工作区",用于存储变量的值,从这里可以看到当前运行结果中有哪些变量。

图片

工作区中变量的保存操作很重要,也容易被初学者忽略。.mat文件是存储变量的文件,另外用好save 和 load 函数。

图片

如果你对当前页面布局不满意,可以设置一个属于自己的样式,在【主页】-【布局】里可以更改,并且可以保存设置,一键还原。根据个人习惯设置,方便拖动之后能够一键还原;舒适的界面可以给你带来好的编码心情。总的来说,默认的布局适合输入一行执行一行的运行方式,而编辑大段的.m文件时就不太合适,这个时候可以选择下方第二张图的布局(小编自定义);即便是布局被自己调的乱七八糟,如第3张图,也可以一键还原布局到第二张。

图片

图片

图片


3. 语句:使用 MATLAB 时,可发出创建变量和调用函数的命令。例如,通过在命令行中键入以下语句来创建名为 a 的变量,而不需要事先定义变量类型

图片

如果语句以分号结束,MATLAB 会执行计算,但不在命令行窗口中显示输出。也就是说,分号(必须是英文的分号)在MATLAB中用于抑制输出到命令行窗口。因为输出也是要占用时间的,所以非必要的语句我们在后面都会加上分号。很多错误都是由于分号是中文分号造成的,请注意仔细检查。


4. 历史记录:将光标放在命令行窗口>>处,之后按住方向上键可以查看之前输入过的命令以节省时间,甚至关闭MATLAB之后再重新打开,那些历史输入也都在,望周知。

图片

图片


5. 函数浏览器:当我们按住shift+F1的时候会弹出MATLAB自带的函数浏览器,里面集合了所有的函数,按照功能模块进行了聚类,没事的时候可以看看,对MATLAB的功能有所了解,当你想拍脑袋自己写函数之前不妨先来看看MATLAB是否已经自带了。另外当你想要执行某个功能不知道用什么函数或者忘了函数的具体名字或者不知道该输入那些参数时候,可以调出这个窗口在上方进行搜索。

图片

 一般用关键词搜索,常见函数都有中文介绍了基本,一看就懂,鼠标放在函数上不动还会有更加具体的介绍弹出。我们需要重点关注的是函数参数和返回值的数据类型以及数据的个数,否则就会报错。

图片

图片


6. 函数提示器:当我们写出某个函数,但是忘了参数应该输入什么的时候可以将光标放在函数名后的括号之内,快捷键ctrl+F1来快速查看函数提示。

图片


7. 函数介绍:在命令行窗口输入help 函数名,将弹出较为详细的函数介绍;

图片

在命令行窗口输入doc 函数名,将在函数浏览器中弹出最为详细的函数介绍;会给出实例代码,可以复制到MATLAB进行操作,也会有非常详细的原理和操作说明。如果英文水平较好,可以访问英文页面,将更全面。

图片


8. 帮助文档:用好帮助文档 帮助文档在右上角不起眼的位置,但是却非常重要。可以作为一本参考书来查阅,平时没事的时候可以多看看,不仅有代码的介绍,甚至有算法原理的介绍。可以进行搜索,也可以按照目录树进行浏览。

图片

图片


9. 注释:在MATLAN中%表示注释,%会一直管到这行的结束,但是换行就不管用了。

两个连续的百分号%%将代表分节,适当采用分节能让代码看着更加整齐,如下方第二张图,选中的节将变成绿色,其他基本没有大的差别。

 


10. 换行:大家可能注意到MATLAB窗口右边有一条细线(如上图),这不是你的显示器坏了,这是MATLAB打印输出控制线;试想如果一行代码过长,那么打印在A4纸上将会有问题,所以这是一条提醒线,实际忽略也无妨。但是为了保持整齐,一行代码最好不要过线,可以采用换行的方式。在要换行的地方输入三个英文句号,即可换行。原来的两行应该是第一张图,换行的效果是第二张图,成功的换行之后应该有自动缩进。此外,在编程过程如果觉得代码缩进混乱,不太美观,可以先全选代码后按快捷键ctrl+I自动缩进

图片

图片

文章开头的gif图源码

%peterluor
%适用于在一幅图中表现给图过程,即图形的增长过程
%主要用来绘制三维的欧拉公式
clc;clear;clf;close all;
%获得数据
tmax = 4*pi;
t = 0:0.01:tmax;
tmp = exp(1i*t);
x = real(tmp);
y = imag(tmp);
[a,b] = size(x);
y1 = zeros(a,b) ;
x1 = zeros(a,b);

%确定首幅图的样式,并指定标题,坐标轴标题等样式
plot3(x(1,1),t(1,1),y(1,1),'black');

hold on
plot3(x(1,1),t(1,1),y1(1,1),'blue');
plot3(x1(1,1),t(1,1),y(1,1),'b');
axis([-1,1,0,tmax,-1,1])
str = [char(13,10)','peterluor的动态绘图'];
title({str},'interpreter','latex')
% xlabel('实轴');
% ylabel('时间轴');
% zlabel('虚轴');
grid off;
set(gcf,'Position',[0,0,600,600], 'color','w');
set(gca,'ydir','reverse')   %反转坐标轴


%确保图像在采集的过程中包括坐标轴及标题
ax = gca;
ax.Units = 'pixels';
pos = ax.Position;
ti = ax.TightInset;
rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];

%在指定的范围内获得图像文件
frame = getframe(ax,rect);
im=frame2im(frame);

%创建gif文件,指定其样式,写入首帧图像
k = 1;
%用胞元存储采集到的图像,方便后面反转图像用
[I{k},map{k}]=rgb2ind(im,256);
imwrite(I{k},map{k,1},'peterluor.gif','gif','Loopcount',Inf,'DelayTime',0.2);
 k = k + 1;
 
 %画图并采集到gif中
steptmp = 20;   %每幅图要画的点数
i = steptmp;
while i < (b-1)
    x_1 = x(1,(i-steptmp+1):i+1);
    t_1 = t(1,(i-steptmp+1):i+1);
    y_1 = y(1,(i-steptmp+1):i+1);
    y1_1 = y1(1,(i-steptmp+1):i+1);
    x1_1 = x1(1,(i-steptmp+1):i+1);
    plot3(x_1,t_1,y_1,'black');
    hold on
    plot3(x_1,t_1,y1_1,'g');
    plot3(x1_1,t_1,y_1,'r');
    
    %下面是制作gif的主要代码,除了调节间隔时间外,一般不需要改动 
    ax = gca;
    ax.Units = 'pixels';
    pos = ax.Position;
    ti = ax.TightInset;
    rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];
    frame = getframe(ax,rect);
    im=frame2im(frame);
    [I{k},map{k}]=rgb2ind(im,256);
    %写入模式为“追加”模式
    imwrite(I{k},map{k},'peterluor.gif','gif','WriteMode','append','DelayTime',0.1);  
    k = k + 1;
    
    i = i + steptmp;
end

%将图像按相反的顺序再写入到gif中
for i = (k-1):-1:1
imwrite(I{i},map{i},'peterluor.gif','gif','WriteMode','append','DelayTime',0.1);  
end

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值