007_how_to_start_learning_Matlab学习的启动与加速

Matlab学习的启动与加速

1. 前言

这个专题的Matlab博文系列,来到了传奇的007,我又准备放下技术工作的写作,来一点务虚和规划的内容。

这个系列的开始,也是一个随机发生的小概率事件,本来Python(PyQt)、JavaFX(Kotlin)和F#三个系列的写到F#的时候已经有点觉得失去了激情,可能还需要一个契机才有可能回到F#的写作,因为那个用F#做的项目已经大概告一段落,本来向着好好写写Domain Driven F#什么的。

接着因为硕士组里有个孩子缺篇EI,其实那孩子的中文期刊文章写得挺好,工作进展也不错,但是学校又那种奇怪的要求,于是就赶工弄一个EI会议的文章。既然是赶工,那就用Matlab吧。

Matlab是一个很很好的工具,M语言不是很好的语言。当年我硕士的时候,还用Matlab编过软件(包含GUI),反正体验不太美妙。

脚本语言的通病,写着写着就不知道变量和参数是什么,注释一堆加上改来改去,有时候注释没更新还不如没注释。当然既然是Matlab,那个规模就不会太大,好好调试怎么也能凑活着出图交账。

我自己没有正经学过Matlab,断断续续用过不少,也帮别人打过好多下手,就是给人家的Simulink模型调试数据、修改别人的Matlab脚本,或这自己要简单出个图(chart)之类的。

这次编一个小模型,弄点Monte Carlo模拟,突然激情上来,有点想把多年Matlab使用的经历和认识到的一些问题和技巧写下来,也算是给自己一个总结,也许对别人也有点帮助。

2. Matlab的学习

Matlab的学习,从计算器开始。

Matlab和所谓的M脚本语言,本质上就不是什么通用编程语言,最初的设计应该是作为一个需要开展数值计算的工程设计人员、科学家用的工具,用时髦的话来说,就是一个Domain Specific Language(DSL)领域特定语言。

但是随着Matlab的功能越来越强大,用户群体也越来越广泛,Matlab也在不断地向通用编程语言靠拢,比如加入了面向对象编程(OOP)的特性,比如加入了对.NET、Python等语言的支持。

在这些发展和进步的过程中,非常庆幸MathWorks公司一直没有忘记初心,这就是一个Matrix Laboratory,一个矩阵计算的实验室,一个大型计算器。

所以,对Matlab的学习,应该首先把它当一个卡西欧函数计算器来看待。有任何数字的问题,打开Matlab,在>>提示符下输入,回车,得到结果。

这就是学习Matlab和别的编程语言不完全一样的地方,不需要什么基础,不需要什么环境配置,不需要学会编程和调试,找一台有Matlab的电脑,双击点开,找到>>,就可以开始学习。

因为错误的代价非常的低,学习的起点也非常低。这就是Matlab的学习的第一步。

我家孩子还在二年级,已经学会在Windows、Linux的电脑上打开Matlab,输入1+1,回车,得到结果2。当然我们也可以输入sin(2 * pi / 3),回车,得到结果0.8660

>> sin(2 * pi / 3)ans =0.8660

就这样挺好的。如果出错,Matlab就只会用红色的字体显示错误信息,不会弹出对话框,不会让你重新编译,不会让你重新启动,不会让你重新配置,不会让你重新安装。

>> sin(2 * pi / 3
sin(2 * pi / 3↑
无效表达式。调用函数或对变量进行索引时,请使用圆括号。否则,请检查不匹配的分隔符。是不是想输入:
>> sin(2 * pi / 3)

是不是很好?这就是Matlab的学习的第一步。

3. 从数字到矩阵

当然,一个成熟的工程师或者一个即将成为科学家的后备天才,他们不会满足于标量,他们会使用向量表达更高维度的数据,会用高阶张量来表达协变和逆变的关系,会描述高阶空间的转换和变换。

这就是Matlab的第二步,从数字到张量。

Matlab的张量,就是矩阵。矩阵是一个二维的张量,是一个行列的表格,是一个数字的数组。在Matlab里,矩阵是一个变量,是一个对象,是一个数据类型。

>> A = [1, 2; 3, 4]A =1     23     4

这个时候,线性代数的知识就派上用场了,我们可以用矩阵乘法、矩阵转置、矩阵求逆、矩阵行列式等等一系列的操作。

>> B = [1, 2; 3, 4]B =1     23     4>> A * Bans =7    1015    22>> A'ans =1     32     4>> inv(A)ans =-2.0000    1.00001.5000   -0.5000>> det(A)ans =-2.0000

4. 从计算到绘图

Matlab的第三步,就是从计算到绘图。当开始计算向量、矩阵的时候,我们就会发现一个新的需求,就是把计算的结果可视化。标量的计算,我们可以直接看到结果,但是向量、矩阵的计算,我们就需要把结果绘制成图表才能更直观的理解。

Matlab的绘图功能非常强大,可以绘制各种类型的图表,包括线图、柱状图、饼图、散点图、等高线图、三维图等等。

>> x = 0:0.1:2*pi;
>> y = sin(x);
>> plot(x, y);

Matalb的绘图函数还包括了很多的参数,可以设置线型、颜色、标记、标题、坐标轴等等。

>> plot(x, y, 'r--o');
>> title('sin(x)');
>> xlabel('x');
>> ylabel('y');

在这里插入图片描述

只需要学会使用一个命令help plot或者doc plot,就可以查看更多更多参数、示例和其它相关的函数。

5. 从启动到加速

前面标量计算、矩阵计算、绘图,已经可以解决很多问题,可以看到这个过程中,完全不需要过多的编程知识,连什么文件、脚本、函数这些基本概念都不需要知道,就是算个数,画个图。

但是接下来的路径就会稍微有一点点颠簸。

flowchart TDA[启动Matlab软件,输入命令,计算/绘图] --> B[使用edit命令/菜单按钮新建文件,编辑脚本]B --> C[保存/运行脚本,搜索路径]C --> D[矩阵和矩阵索引的概念和相关约定]D --> E[元组/函数的定义和约定]E --> F[更复杂的图表定制能力]E --> G[数据输入、输出和文件操作]E --> H[学科和任务对应的专门计算:统计、微分方程、优化、信号处理等]

在这里插入图片描述

基本上,作为一个工程师/研究人员,掌握这些就足够应付一般的科研工作。

6. 这个系列的规划

最后回到这个系列文章。一开始,我都是用到哪里写到哪里,当我写了6篇之后,我有点上头,决定要写300篇。我猜最后可能写不到300篇,但是我会把上面的路径遍历一下,把我认为重要的知识点和技巧写下来。

最后有几个认知:

  1. Matlab是一个计算工具,其内嵌的脚本应该被当做一个DSL;
  2. DSL的共同特点是约定特别多,所以学习DSL的第一步是识别约定和遵守约定;
  3. 约定会节省大量的思考,也会形成简洁有效的表达,但是约定也会带来很多的困惑和错误;
  4. 遇事不决先打几个命令试一下,工程师浑身油污不是没有原因的;
  5. help命令、doc命令、edit命令、lookfor命令是Matlab的好朋友;
    ,所以学习DSL的第一步是识别约定和遵守约定;
  6. 约定会节省大量的思考,也会形成简洁有效的表达,但是约定也会带来很多的困惑和错误;
  7. 遇事不决先打几个命令试一下,工程师浑身油污不是没有原因的;
  8. help命令、doc命令、edit命令、lookfor命令是Matlab的好朋友;
  9. 约定,在强调一下约定,一切以计算器输出为准,搞什么语言警察对于工程师来说没有意义,试下,能用就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/571422.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂:什么是工单系统?市面上有哪些好用的工单系统?

什么是工单管理系统?工单系统如何帮助企业解决管理问题?市面上有哪些好用的工单管理系统?不同工单管理系统适用于什么企业?工单管理系统如何定价? 5000字长文,我写了整整一天!梳理了大家对工单…

Vscode循环弹出窗口输入密码的窗口 ‘s password:

今天使用Vscode,连接远程服务器一直不断的弹出窗口,要求输入密码,导致无法显示远程文件。误以为是产品id没有上传成功,导致服务器内没有commid id对应的文件。参考vscode通过ssh链接服务器卡在downloading with wget,但是处理完仍…

成都欣丰洪泰文化传媒有限公司电商服务的新领军者

在当今电商行业风起云涌的时代,成都欣丰洪泰文化传媒有限公司以其独特的视角和专业的服务,成为业内的佼佼者。专注于电商服务,公司不仅为品牌商提供全方位的电商解决方案,还致力于推动整个行业的发展。 一、电商服务的领航者 成都…

【爬虫基础】第2讲 使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库,它提供了一系列用于处理 URL 的函数和类,包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request:它是最基本的HTTP请求模块,可以用来模拟发送请求。只…

部署vue+springboot网站到服务器【踩坑总结版】

目录 前言1.购买服务器2.安装xftp和xshell3.打包前端代码(vue)4.打包后端代码5.nginx6.踩坑 前言 先说下个人基础情况,在此之前从来没有碰过服务器,对服务器可以说是一窍不通。linux命令了解的较为基础,上一次学习还是…

23届嵌入式被裁,有什么好的就业建议?

最近看到了一个提问,原话如下: 本人23届毕业生,就业方向嵌入式软件,坐标深圳,工作3月公司裁员,目前接近12月开始找工作。 boss上投递简历,校招岗,比较有规模的好公司基本已读不回&am…

华为防火墙二层墙(VAN/SVI/单臂路由)

二层墙只能做地址池形式的NAT。 交换机安全策略防火墙二层墙 路由器安全策略防火墙三层墙 交换机的光口是不能直接插线的,光模块,包括进和出 长距离:单模 短距离:多模 防火墙自身的ping流量需要单独配置

docker容器虚拟化-4

文章目录 虚拟化网络单节点容器间通信不同节点容器间通信 虚拟化网络 Network Namespace 是 Linux 内核提供的功能,是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自网络栈信息。不管是虚拟机还是容器,运行的时…

高阶数据结构 <红黑树>

本文已收录至《数据结构(C/C语言)》专栏! 作者:ARMCSKGT 目录 前言正文红黑树简介红黑树整体结构红黑树节点的定义红黑树主体类设计红黑树的插入函数情况一:变色情况二:变色旋转单旋情况双旋情况 完整插入代码 关于红黑树红黑树检…

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言,制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点,美摄科技凭借其深厚的技术积累和创新能力,推出了面向企业的H5/小程序视频方案解决方案,为企业提供了一种轻量化、高效、便捷的视频制作方式…

对于提高Web安全,WAF能有什么作用

数字化时代,网络安全已经成为了一个不可忽视的重要议题。网络攻击事件频发,各种安全隐患层出不穷,如何有效地保护我们的网络空间,确保信息安全,已成为一项迫切的任务。而Web应用防火墙,正是守护网络安全的一…

如何处理Flutter应用程序中的内存泄漏

大家好,我是咕噜铁蛋!今天,我想和大家分享一下如何处理Flutter应用程序中的内存泄漏问题。在Flutter开发中,内存泄漏是一个常见且需要重点关注的问题,它可能会导致应用程序性能下降,甚至引发崩溃。因此&…