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     2
     3     4

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

>> B = [1, 2; 3, 4]

B =

     1     2
     3     4

>> A * B

ans =

     7    10
    15    22

>> A'

ans =

     1     3
     2     4

>> inv(A)

ans =

    -2.0000    1.0000
     1.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 TD
    A[启动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. 约定,在强调一下约定,一切以计算器输出为准,搞什么语言警察对于工程师来说没有意义,试下,能用就行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat和Servlet了解

一,服务器概述 先了解下主机-系统-容器和程序这几个之间的关系. 主机:主机是指一台计算机设备,可以是物理服务器或虚拟服务器,用于存储数据、运行应用程序和提供服务。在这种情况下,主机是托管Ubuntu(Linux系统&…

【数据结构】归并排序(不用递归)

大家好,我是苏貝,本篇博客带大家了解归并排序,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 归并排序(用递归) 之前我们写了一篇博客来介绍如何用递归实现归并排序…

回顾皆草木,唯你是青山~

新中式小飞袖连衣裙 每一件衣裳都是时间的礼赞 是炎炎夏日的一抹清新 传统元素与现代时尚设计相结合 面料舒适透气,裙摆飘逸灵动 宛如林间自由洒脱的小仙子~

网络安全:Kali Linux 进行SQL注入与XSS漏洞利用

目录 一、实验 1.环境 2.Kali Linux 进行SQL注入 3.Kali Linux 进行XSS漏洞利用 二、问题 1.XSS分类 2.如何修改beef-xss的密码 3.beef-xss 服务如何管理 4.运行beef报错 5.beef 命令的颜色有哪些区别 6.owasp-top-10 有哪些变化 一、实验 1.环境 (1&a…

数据结构·二叉树(2)

目录 1 堆的概念 2 堆的实现 2.1 堆的初始化和销毁 2.2 获取堆顶数据和堆的判空 2.3 堆的向上调整算法 2.4 堆的向下调整算法 2.4 堆的插入 2.5 删除堆顶数据 2.6 建堆 3 建堆的时间复杂度 3.1 向上建堆的时间复杂度 3.2向下建堆的时间复杂度 4 堆的排序 前言&…

2024年生骨肉冻干深度比较:希喂、NWN、PURPOSE,哪一款更胜一筹?

在科学养宠的当今时代,生骨肉冻干已经成为猫咪日常饮食中不可或缺的一部分。高肉含量的生骨肉冻干不仅易吸收、好消化,更能给猫提供其他猫粮所不能提供的微量物质,更满足猫的全面营养需求。然而,面对市面上琳琅满目的生骨肉冻干品…

鸿蒙OS实例:同步获取应用配置的【versionCode和versionName】

1.同步方式获取 首先需要导包&#xff1a; import bundleManager from ohos.bundle.bundleManager 工具类&#xff1a; public static async getVersionName(): Promise<string> {try {let bundleInfo await bundleManager.getBundleInfoForSelf(bundleManager.Bundle…

从零开始搭建游戏服务器 第七节 创建GameServer

目录 前言正文创建GameServer模块修改配置创建NettyClient连接到登录服登录服修改创建协议游戏服注册到登录服 总结 前言 上一节我们使用自定义注解反射简化了协议解包和逻辑处理分发流程。 那么到了这里登录服登录服的架构已经搭建的差不多了&#xff0c;一些比较简单的、并发…

Android卡顿掉帧问题分析之实战篇

本文将结合典型实战案例&#xff0c;分析常见的造成卡顿等性能问题的原因。从系统工程师的总体角度来看 &#xff0c;造成卡顿等性能问题的原因总体上大致分为三个大类&#xff1a;一类是流程执行异常&#xff1b;二是系统负载异常&#xff1b;三是编译问题引起。 1 流程执行异…

AIGC工具系列之——基于OpenAI的GPT大模型搭建自己的AIGC工具

今天我们来讲讲目前非常火的人工智能话题“AIGC”&#xff0c;以及怎么使用目前的AI技术来开发&#xff0c;构建自己的AIGC工具 什么是AIGC&#xff1f; AIGC它的英文全称为(Artificial Intelligence Generated Content)&#xff0c;中文翻译过来就是“人工智能生成内容”&…

共射极放大电路理论计算

目录&#xff1a; 1、概述 2、理论计算 3、Multisim仿真验证 1&#xff09;静态工作点与放大倍数 2&#xff09;输入阻抗仿真 1、概述 如下图所示的共射极放大电路&#xff0c;本内容主要计算静态工作点电压、电压放大倍数与输入输出阻抗。 2、理论计算 列出方程如下&am…

Apache Hive的基本使用语法

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库&#xff08;如果有表会报错&#xff09; drop database myhive;…

【机器学习300问】54、如何找到有效的组合特征?

一、为什么需要去寻找有效的组合特征&#xff1f; 因为并不是所有的特征组合都会意义&#xff0c;都能带来价值。 例如在房价预测场景中&#xff0c;卧室数量和浴室数量的比值有意义&#xff0c;但房屋面积与建造年份相组合作为新的组合特征&#xff0c;可能就没有实际含义&…

Redis中的事件(二)

文件事件 文件事件的处理器 Redis为文件事件编写了多个处理器&#xff0c;这些事件处理器分别用于实现不同的网络通信需求&#xff0c;比如说: 1.为了对连接服务器的各个客户端进行应答&#xff0c;服务器要为监听套接字关联连接应答处理器2.为了接收客户端传来的命令请求&a…

零基础自学C语言|文件操作

✈为什么使用文件&#xff1f; 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久化…

EFI Driver Model(下)-SCSI 驱动设计

1、SCSI简介 SCSI是Small Computer System Interface&#xff08;小型计算机系统接口&#xff09;的缩写&#xff0c;使用50针接口&#xff0c;外观和普通硬盘接口有些相似。SCSI硬盘和普通IDE硬盘相比有很多优点&#xff1a;接口速度快&#xff0c;并且由于主要用于服务器&…

记一次Tomcat启动失败的经历

首先&#xff0c;下载tomcat10.1.20后&#xff0c;双击启动bin下的startup.bat闪退&#xff0c;查了资料&#xff0c;说是依赖JDK环境和JRE环境&#xff0c;当然&#xff0c;我Java是能正常用的&#xff0c;毕竟写了这么多东西它有没有我还不清楚吗 可问题就来了&#xff0c;既…

软件应用实例,租赁系统软件操作教程,脚手架租赁管理集装箱租赁管理系统教程

软件应用实例&#xff0c;租赁系统软件操作教程&#xff0c;脚手架租赁管理集装箱租赁管理系统教程 一、前言 以下软件操作教程以&#xff0c;佳易王租赁管理系统软件V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、软件可以记录&#x…

GEE土地分类——分类后样本点值提取至点过程中,导出的csv数据表中不存在geometry的位置信息

值提取至点导出的csv数据表中不存在geometry的位置信息 错误提示: {"type":"MultiPoint","coordinates":[]} 问题分析 问题主要出现在在reduceregions中所使用的第二个参数中。在reduceregions中,第二个参数用于指定geometry信息,以便将r…