本帖最后由 tangbot 于 2018-9-27 12:53 编辑

640.jpeg (17.39 KB, 下载次数: 2)

2018-9-27 12:48 上传

公众号:理念世界的影子

文不可无观点,观点不可无论据。

转载请注明出处

MATLAB功能强大,编程方便,是国际广泛使用的计算软件。目前已有很多书籍介绍其在工程上的应用,但很少有从程序设计语言的角度写的书或文章。

MATLAB是什么

+

20世纪70年代末MATLAB诞生了,新墨西哥州大学计算机系主任Cleve Moler为了让学生方便地进行矩阵计算,封装了当时代表矩阵计算最高水平的线性代数计算库LINPACK和EISPACK的接口,建立了交互式计算平台MATLAB,作为免费软件向公众开放。

80年代初,Steve Bangert主持开发了解释器程序,Steve Kleiman完成了图形功能设计,John Little和Cleve Moler主持开发了数学分析模块,编写了用户指南,形成了MATLAB的第一个商业版。

5.0版后,MATLAB引入了更多的数据结构,如多维矩阵等,使其更易于使用。5.3版本后,MATLAB核心由Fortran转为了C语言。

7.2版本后,MATLAB版本采用R2006a命名,至此,MATLAB版本每年发布两次并按后缀a和b命名。

如今MATLAB既是一门编程语言,也指一种编程环境,它是一成套集成的软件体系,并具有如下特点:

一切皆为数组的数据类型设计,语言抽象能力大幅跨越,大大提升了代码简洁性和可读性;

动态类型(无需显式数据类型声明)、弱类型(变量获得类型后仍可赋值为另一种数据类型)的解释型语言。MATLAB采用了一种运行期间才去确定数据类型,而且数据类型可变的语言,以程序执行效率为代价,大大解放了编程的学习成本和人力成本;

方便、强大的图形绘制功能。MATLAB内置强大、易于使用、具备自动化控制能力的数据图形和交互界面制作功能,达到数据计算、数据展示的一体化;

丰富、强大的工具箱支持。MATLAB始终跟踪最新的数值计算库(BLAS、LAPACK等),保证了矩阵计算函数的正确和高效;同时MATLAB吸收了工业界,尤其是控制领域的大量成果,形成了完善的工具箱支持;Simulink的引入更进一步释放了其威力。发展至今基本上可以说,对于日常工作,MATLAB内部的函数和功能,几乎没有缺的,而只有你不知道的;

堪称典范的强大的帮助系统。

正是以上特点的综合作用,MATLAB业已发展为国际广泛使用的计算软件。

受众和体例

+

本公众号不会对MATLAB基础操作做太多介绍,由于在大多数情况下,可将MATLAB视为一种更方便的C语言,特别是针对数学运算高度优化的C语言。因此公众号着重阐述MATLAB的不同之处,较适用于有一定C语言或MATLAB语言基础,特别是对C语言感兴趣的读者。

为了提高兴趣(和阅读量),所有篇均有至少一个示例。示例均为笔者原创编制,简单示例不超过20行,复杂示例不超过50行,并对重要行有所解释。读者可以拷贝示例运行。示例内会包含本篇重要知识点,如果对知识点熟悉可以不读。但仍建议一读,因为里面有笔者自己的理解和体会,可以不夸张地说,有着不同于任何教科书的描述。

后续文章由于要用到数据结构的二进制解析,为表达方便,使用的是MATLAB 2010b的32位版本。几乎为10年前版本,因此和很多读者的界面可能不一致,但笔者坚信,界面再新,编程理念和核心应该不会变。

拼图游戏示例

+

pintu.m

1   function pintu

2   pintu=[2 4 3;1 0 6;7 5 8];

3   pintudone=[1 2 3;4 5 6;7 8 0];

4   disppintu();

5   assignin('caller', 'move', @move); % 点击时需使用函数

6

7       function move(m, n) % 嵌套函数中可使用父函数中的参数

8           [i, j, ~]=find(pintu==0);% 找到为0的格子坐标

9           if(norm([m-i n-j])==1)% 移动相邻格子

10                   [pintu(m, n) pintu(i, j)]=deal(pintu(i, j), pintu(m, n)); % 交换两个值

11                   disppintu();

12               end

13           end

14

15           function disppintu()

16               clc; % 清空屏幕

17               disp('拼图游戏');

18               [m, n]=size(pintu);

19               str=[];

20               for i=1:m

21                   for j=1:n

22                       v=pintu(i,j);

23                       if(v) str=[str sprintf('%d ', i, j, v)]; % 增加超链接

24                       else str=[str '  '];end

25                   end

26                   if(i~=m) str=[str sprintf('\n')];

27                   end

28               end

29               disp(str);

30               if(all(pintu==pintudone)) disp('完成!');end % 判断是否完成

31           end

32

33       end

第2行,3×3排列的矩阵,其中0处为空格,可将任意数字移至空格,此数字处变为空格;

第3行,为矩阵的完成形式;

第4行,显示拼图,拼图中每个数字带有超链接,点击后运行move函数;

第5行,由于超链接中的move函数无法访问函数内部,因此将其作为句柄导出。此处的函数句柄除可以访问move函数外,还可以访问pintu函数中的变量,它是一个带环境的闭包(后面描述);

第7行,嵌套的move函数可以直接使用父函数中的pintu变量,而不需要传递;

第8行,查找pintu为0的坐标,其中~表示占用符,表示这个变量不需要使用,但需要知道这儿有个变量,除了~外,也可以使用ans(MATLAB默认输出变量名);

第9行,求n-i和n-j的平方和,确保移动的格子与空的格子相邻;

第10行,将换空格和移动格位移,此处使用了deal函数,后续会进行说明;

第11行,交换顺序后,再次画出拼图;

第15行,拼图嵌套子程序,清除之前的拼图并重新绘制;

第23行,插入超链接,点击后执行move函数,每个数字对应不同参数值,即本数字所在的坐标位置;

第30行,如果图形对应,则输出完成。其中==返回的为矩阵,使用all保证所有矩阵元素均为1。

运行上述程序即可进行拼图游戏,游戏中,显示的数字带有下划线,鼠标移动至其上后,MATLAB状态栏会显示点击本链接执行的命令,点击后,图形刷新显示。

知识点(入门篇,待续...)

+

性能分析函数

性能分析一般是熟悉语言后的进阶功能,但由于在进行程序分析时常会用到,因此放到最前面,它的使用很简单,使用两套函数基本就够了。

tic/toc:TIC 启动计时器。TIC 和TOC 函数一起工作来计量逝去的时间。TIC自身存储当前时间,稍后使用TOC来计算当前与之前存储时间的间隔。可以使用tic;toc对来获取两者之间时间,也可以使用t1=tic;toc(t1)来获取当前到t1时间。

profile:分析程序执行时间。PROFILE ON启动分析器并清除之前记录。PROFILE VIEWER图形化显示记录结果。

数据类型

MATLAB内部使用15种数据类型,这些类型最终组成矩阵或向量,矩阵或向量最低维数为0×0。

在MATLAB中,所有变量都是数组,如a=3,代表a为1×1数组。MATLAB内部大多数函数均是操作数组并返回数组,如[3 4]==[3 4]并不是返回1,而是[1 1]。

变量赋值与字符显示

1   a=3  % 赋值3到变量a并显示结果到命令窗口

2   b=4; % 赋值4到变量b,输入分号后结果不显示

3   disp(b) % 显示变量b的值

MATLAB自带了一些基本命令。

who显示当前变量,含更多信息的形式为whos。 如b=whos('a')

clear清除工作空间变量,后可接一些控制参数。如clear global

length显示数值各维度大小的最大值,含更多信息的形式为size。如b=length(a)

vertcat/horzcat/cat垂直/水平/根据需要拼接矩阵。如前两者[a;b]/[a,b]等价,cat(2,a,b)与[a,b]等价,cat(1,a,b)与[a;b]等价

exist变量或函数等是否存在。如exist(‘a’)

isempty变量是否为空。如isemtpy([])

disp显示变量值,更具有定制化的形式为sprintf。如disp('abc')

disp有个特殊的功能,它可以显示超链接,包括HTML链接、FTP链接,以及MATLAB命令(使用matlab:前缀)。如

1   disp('hyperlink')

将在窗口显示hyperlink,点击后会执行a=3, b=4命令。

速查手册

+

常用操作符

操作符是语言中最多使用的方法的助记符,对操作符掌握的程序代表了对一种语言掌握的程度。MATLAB自身定义了丰富的操作符,且不少操作符含有多重含义。需要在MATLAB使用中反复体会。

操作符名称含义

@生成λ函数/类文件夹

:冒号生成矩阵、矩阵切片等

,逗号元素分隔/数组列分隔符

!感叹号调用操作系统命令

()圆括号数组下标/函数

+加号正数/包文件夹

[]中括号数组生成、拼接

;分号不显示变量/数值行分隔符/分隔多条命令

'   '单引号字符串

*星号在某些命令中用于模式匹配

.点号小数/结构体/类方法

..点点上层文件夹

…省略号续行

.()结构体动态访问

%百分号注释/输出格式控制

%{%}多行注释

~波浪号函数调用中忽略的参数

{}大括号元胞数组生成

空格字符行中元素分隔符/函数输出分隔符

/或\斜杆或反斜杆访问文件夹

MATLAB中:单行注释符号是“%”,多行注释为%{ %}(但相信大多数人不会用它,因为还有什么比选中行,然后按ctrl+R快捷键更方便的呢);

续行符号是“…”;

字符串使用单引号',而不是双引号”;

在命令后使用分号;可关闭显示变量;

数字采用()访问,下标从1开始。

MATLAB帮助下,Programming Fundamentals/Basic Program Components/Symbol Reference可以看到关于MATLAB这些符号的帮助。

常用运算符

运算符含义

[]/()/{}数组生成、访问

;不显示变量

:生成矩阵、矩阵切片

+加

-减

*乘(矩阵运算)

.*点乘(逐元素运算)

/除(矩阵运算)

./点除(逐元素运算)

\左除(矩阵运算)

.\左点除(逐元素运算)

^指数(矩阵运算)

.^点指数(逐元素运算)

'转置/字符串

.结构体访问

,分隔

>小于

<=小于等于

>=大于等于

==等于

~=不等于

&与(逐元素运算)

|或(逐元素运算)

~非(逐元素运算)

&&标量与

||标量或

注:由于判断矩阵相等时返回矩阵,因此判断算符常联合any(所有都为0则返回0),all(所有都为1则返回1)使用。

操作符和运算符优先级

优先级(从大到小)符号备注

1()

2. '   .^  '   ^

3+   -   ~+-分别代表正负号,为单目运算符

4.*   ./  .\   *   /   \

5+   -

6:

7   >=   ==  ~=

8&

9|

10&&

11||

其中,冒号操作符优先级比加减乘除都要小,在使用时需尤其注意。

微信扫一扫

关注“理念世界的影子”

版权声明:

本文是"洞穴之外"作者原创文章,欢迎转载,须署名并注明来自“理念世界的影子”公众号。

matlab怎样编程形成软件_MATLAB程序设计语言(1)-入门 – MATLAB中文论坛相关推荐

  1. matlab怎样编程形成软件_matlab是什么编程语言?matlab是编程语言吗

    本文引用地址:http://www.eepw.com.cn/article/201808/388132.htm 程序接口 新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自 ...

  2. matlab怎样编程形成软件_Matlab编程笔记之GUI程序转exe

    Matlab同样可以制作出和VC++技术一样的基于对话框的GUI界面. 在Matlab软件中编写GUI程序的方法是:命令行中输入guide,即可进入. Matlab是强大的数学建模软件,我们可以通过M ...

  3. 软件设计师---程序设计语言

    笔记有错误欢迎直接在评论区进行纠正!我将不再维护软件设计师笔记! 程序设计语言上午题n分 低级语言和高级语言 编译程序和解释程序 真题 真题1 真题2 真题3 真题4 程序设计语言的数据成分 真题 真 ...

  4. 软件设计师 程序设计语言

    以下内容来源于哔哩哔哩UP主zst_2001的软件设计师教学视频 程序设计语言 1.编译程序和解释程序 2.程序设计语言基本成分 3.传值调用与传地址调用 3.编译.解释程序翻译阶段 4.符号表 5. ...

  5. 软件设计师——程序设计语言练习

    一.单选题 1.以下关于下图所示有限自动机的叙述中,不正确的是( ) A.该自动机识别的字符串中a不能连续出现 B.该自动机识别的字符串中b不能连续出现 C.该自动机识别的非空字符串必须以a结尾 D. ...

  6. C程序设计语言(第2版) 中文pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书是由C语言研制者编写的一部介 作者简介  · · · · · · Brian W. Kernighan: 贝尔实验室计算科学研究中心高级研究 ...

  7. matlab中结束脚本运行_matlab学习总结(入门篇)

    更新(2020.3.31):发现MATLAB在网络经济学的仿真模拟方面有很大帮助,主要是构造一个 的方阵来刻画任意两个个体之间的关系. 更新(2017.6.11):最近用matlab完成了随机过程的两 ...

  8. matlab需要的软硬件,软件运行硬件环境 软件著作权-用MATLAB写了个小程序,想申请软件著作权,求大神指点...

    您好,请问可以看看您的软件.硬件环境是怎么描述... 硬件环境:就是指你软件运行所需要的的硬件配置: 软件环境:就是指你软件运行所需要的系统的配置. 示例如下: 硬件环境:Intel® Pentium ...

  9. matlab获取当前打开软件的句柄,oop – 如何获取MATLAB句柄对象的ID?

    当我尝试在 MATLAB containers.Map中使用 MATLAB handle objects作为键值时,问题就来了. ld(h1,h2)定义了句柄对象的线性顺序,因此使用句柄对象作为映射的 ...

最新文章

  1. 数据结构之【线性表】(顺序表、链表的基本操作实现)
  2. Pokémon AI,使用DALL-E生成神奇宝贝图鉴
  3. Spring中JdbcTemplate中使用RowMapper
  4. python编程入门t-Python GUI编程完整示例
  5. c语言 文件 long double 读取,读取*.wav音频文件
  6. 【linux草鞋应用编程系列】_3_ 进程间通信
  7. 深度学习笔记之DenseNets
  8. LeetCode 1848. 到目标元素的最小距离
  9. 谈AK管理之基础篇 - 如何进行访问密钥的全生命周期管理?
  10. 【window操作系统下Github版本的回滚问题】
  11. exoplay切换全屏_android - 有没有办法在ExoPlayer中以全屏(横向)模式播放视频 - 堆栈内存溢出...
  12. Word文档转/打印成PDF图片模糊问题解决
  13. UI自动化测试如何生成HTML报告
  14. android启动接受不到boot_complete广播,android-BOOT_COMPLETED从未收到
  15. 关系型数据库设计之从E-R图绘制到数据库表设计
  16. 【SLAM学习笔记4】卡方检验chi-square
  17. ASCII字符和16进制字节数据互转
  18. Android开发项目实战:实现折叠式布局,android组件化开发与sdk
  19. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx
  20. 手把手教程:零基础使用MATLAB完成基于深度学习U-Net模型的遥感影像分类

热门文章

  1. 脏话越多,代码越好!
  2. 春招进来的新人23岁Java开发上来秀了波操作,真是扮猪吃老虎
  3. Python爬虫实战——蚂蜂窝国内目的地全抓取
  4. android widget零基础,Android Widget详解(一)
  5. Win10系统 默认以管理员权限运行所有程序
  6. 牛客-牛客练习赛24-B 凤 凰
  7. pyspider创建淘女郎图片爬虫任务-运行流程解析
  8. .NET 请求被挂起,前端轮询,委托
  9. r语言electricity数据集_怎么学习用 R 语言进行数据挖掘?
  10. 移动页面滚动穿透解决方案(荐)