当前位置: 首页 > news >正文

【菜鸟入门!】Matlab零基础快速入门教程

        数学建模竞赛中,编程软件是必不可缺少的,比如大家都熟知的MATLAB多数同学们都会经常用到,今天给大家介绍一些MATLAB的基本元素,希望帮助大家更好的掌握编写基本的函数!

变量和数组

       MATLAB 程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合,并且拥有一个数组名。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据所对应行标和列标。标量在 MATLAB 中也被当作数组来处理——它被看作只有一行一列的数组。

       数组可以定义为向量或矩阵。向量一般来描述一维数组,而矩阵往往来描述二维或多维数组。在本书中,当我们讨论一维数组时用向量表示,当我们讨论二维或多维向量时用矩阵。如果在特殊情况下,同时遇到这两种数组,我们就把他们通称为“数组”。

       数组的大小(size)由数组的行数和列数共同决定,注意行数在前。一个数组所包含的数据多少可由行数乘列数得到。例如,下列数组的大小为

数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据所对应的行标和列标。如果这个数组是一个行向量或列向量,则只需要一个下标。例如上面的数组 A(2 1)为 3,C(2)为 2。一个MATLAB变量是一段包含一个数组的内存区,并且拥有一个用户指定的变量名。通过适当的命令和它的变量名随时可以就调用它和修改它。

MATLAB 的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31个字符是有效的;如果超过了 31个字符,基余的字符将被忽略。如果声明两个变量,两变量名只有第32个字符不同,那么MATLAB将它们当作同一变量对待。

编程隐患

确保你所声明的变量名前 31 个字符是独一无二的。否则,MATLAB 将无法辨认出它们的不同。

       当你编写程序时,给变量起一个有意义的名字非常的重要。有意义的名字极大的提高了程序的可读性和可维护性。像 day,month 和 year 这样的名字意义非常明确,即使第一次看到也能理解。尽管空格不能用在 MATLAB 变量名中,但是可以用下划线代替空格创造出有意义的变量名。比如,changerate 可以写成 change_rate

好的编程习惯 

给你的变量起一个描述性的且易于记忆的变量名。例如,货币汇率可以 exchange_rate为变量名。这种方法将使得你的程序更加明确且易于理解。

        在你所写的程序的开头列出一数据字典(data dictionary)十分的重要.数据字典列举了你在本程序中用到的所有变量的定义。它的定义应包括本条目的所要描述的内容和它在执行时所在的单元。当编写程序时,编定数据字典看似没有必要。但是设想一下,在过了一段时间后,你或其他人要对此程序修改,这时数据字典就显得十分的有用。

好的编程习惯

给每个程序创建一个数据字典以增强程序的可维护性。

       在 MATLAB 语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。所以变量NAME,Name,name在MATLAB中是不同的。所以已用过的小写变量名与一个新建大写的变量名重名,这时使用时要特别地小心。在一般情况下,我们一律用小写字母来表示。

好的编程习惯

在每次用到一个变量时,我们要确保变量名的大小写的精确匹配。在变量名中只使用小写字母是一个好的编程习惯。

       两个最常见的变量类型是char型和double型。double 型的变量包括由64位双精度浮点数构成的标量或数组。这种变量可以代表实数,虚数和复数。每个值的实部和虚部的变化范围为正负10­308~10308,拥有15到16位有效数字。这是基本的数字数据类型。

       无论什么时侯,你将一个数值赋值于一个变量名,那么 MATLAB 将自动建立一个double型变量。例如,下面语句创建了一个以var为变量名的double型变量,包含了一个 double型的单个元素,存储了复数值(1+i)

图片

       char型的变量包括由16位数值构成的标量或数组,每一个16位数代表一个字符。这个类型的经常用于字符串操作,当一个字符或字符串赋值于一个变量名时,系统会自动建立一个char型变量。例如,下面的这个语句创建了一个char 型变量comment,并存储了一个字符串在其内。当这个语执行后,系统将会建立一个1×26的字符串数组。

图片

       像C语言这样的语言中,变量类型和变量在使用之前必须强制声明。这种语言我们叫它强类型语言。相对地,像MATLAB这样的叫做弱类型语言。通过简单的赋值形式就可以创建变量,变量类型取决于创建时的类型。

MATLAB 变量的初始化

当变量初始化时,MATLAB 将会自动建立变量。有三种方式初始化 MATLAB 中的变量:

1.用赋值语句初始化变量

2.用 input 函数从键盘输入初始化变量

01用赋值语句初始化变量

最简单的创建和初始化一个变量的方法是用赋值语句赋予变量一个或多个值。赋值语句的一般形式如下

图片

       var 是变量名,expression 可以是一个标量、一个数组或常量、其他变量和数学运算符号(+、-)的联合。这个表达式(expression)的值是通过一般的数学运算法则计算出来的,然后将产生的结果存储到变量 var 中。下面是一些用赋值语句初始化的变量:

       第一个例子创建了一个 double 类型的标量变量,存储了一个虚数 40i。第二个例子创建了一个表达式 var2,把 var/5 的值存储于内。第三个例子创建了一个数组 array,并存储了一个 4 元素的行向量于内。最后一个例子显示了多个赋值语句可写在同一行,中间用逗号或分号隔开。注意如果在赋值语句执行时变量已经存在,那么这个变量原有的值将被覆盖。

       正如第三个例子显示的,数据数组也可以初始化变量。我们可以用是括号()和分号建立数组。所有元素按行阶排序,换句话说,每一行的值从左向右,顶部的行置于最前,底部的行置于最后。在一行内单个数值可用空格或逗号隔开,而行与行之间要与则用分号隔开,或另起一行书写。下面的表达式都是合法的,能用于建立一个变量:

注意一个数组每一行元素的个数必须完全相同,每一列元素的个数也必须完全相同.

图片

这样的表达式是非法的,因为第一行有3个元素,第二行有只有 2个元素. 

编程隐患

每一行元素的个数必须完全相同,每一列元素的个数也必须完全相同.试图创建一个不同行(列)拥有不同数目元素的数组,在编译时将会出现错误. 

用于初始化数组的表达式可以包括代数符号或事先已经定义好的数组.例如赋值语句

图片

定义了数组 a=[0 8]和数组 b=[8 7 0 8]. 

       当我们创建一个数组时,不是每一个元素都必须定义.如果要定义一个特殊的数组,或只有一个或几个元素没有定义,那么之前的那些元素将会自动创建,并初始化为 0.例如,如果数组 c 事先没有定义,语句 c(2,3)=5 将会创建一矩阵

图片

 。相似地,指定一个值赋予一个存在的数组,但超过了这个数组的大小。例如,假设存在一数组 d=[1 2],下面这个语句

图片

将会制造出数组 d=[1 2 0 4]. 

        在每个赋值语句末的分号有特殊的目的:无论在何时一个表达式在赋值语句中被赋值,分号将会中止变量值的重复。如果句末没有分号,变量值将会自动显示在命令窗口(The Command Windows)中。

        如果在赋值语句末有分号,这种重复将会消失。重复是一个用于检查你的工作极好的方法,但是它降低了运行速度。因此,我们在一般情况下总是禁止重复。尽管如此,重复计算的结果提供了一个强大的应急调试器。如果你不能确定一个特定的赋值语句结果是多少,这时你可以去掉这个语句后的分号,当这个语句编译时,结果会显示在命令窗口(The Command Windows)。

好的编程习惯

在 MATLAB 赋值语句后加上一个分号来禁止变量值在命令窗口(The Command Windows)的重复。这将大大提高编译的速度。

好的编程习惯

如果你在调试程序时需要检测一个语句的结果,可能把句后的分号去掉,这样结果将会出现在命令窗口(The Command Windows)。

02用捷径表达式赋值

       创建一个小数组用一一列举出元素的方法是比较容易的,但是当我们创建包括成千上万个元素的数组怎么办?把每一个元素列举出来则不太现实。

       MATLAB 提供一种专门的捷径标记法,这种方法用克隆运算符(colon operator)适用于上述情况。克隆运算符指定一系列的数值,它指定了这个系列数的第一值,步增和最后一个值。它的一般顺序始下

图片

       first代表数组的每一个值,incr代表步增量,last代表这个数组的最后一个值。如果步增量为1,那么步增量可省略,而变成了first:last格式。

例如,表达式 1:2:10 是创建一个 1×5 行向量[1 3 5 7 9]的简便方法。

图片

用克隆标记法初始化一个含有一百个元素的数组

图片

,语句如下

图片

捷径表达式可以联合转置运算符(’)来初始化行向量,或更加复杂的矩阵。转置运算符可以在需要的情况下完成行和列的转换。因为这个表达式

图片

产生一个 4 元素行向量[1 2 3 4],然后将其转换成 4 元素的列向量

图片

,相似地,表达式

图片

将会创建一个矩阵

图片

03用内置函数来初始化

      数组也可以用 MATLAB 内置函数创始化。例如,函数 zeros 可以初始化任何大小的全为零的数组。用许多形式的 zeros 函数。如果这个函数的参数只是一个标量,那么 MATLAB将会创建一个方阵,行数和列数均为这个参数。如果这个函数有两个标量参数,那么第一个参数代表行数,第二个参数代表列数。因为 size 函数所返回的一个数组的行数和列数,所以它可以联合 zeros 函数来创建一个相同大小零矩阵。下面是一些用到 zeros 函数的例子。

这些语句产生下列的数组

相似地,ones 函数产生的数组包含的元素全为 1,eye 函数通常用来产生单位矩阵,只有对角线的元素为 1.其他元素为 0.表 2.1 列出一些用于初始化变量的函数. 

04用关键字 input 初始化变量

关键字 input 用来提示使用者和直接从键盘输入初始化变量.当脚本文件(Script files)时,它可以用来提示使用者输入.input 函数在命令窗口(The Command Windows)显示提示语句,并等待用户输入一个值.例如,下面的赋值语句: 

图片

当这个语句被编译时,MATLAB 打印出字符串 enter an input value:,然后等待用户回复.如果要只输入一个数,那么只需要直接键入,如果要输入一个数组,则必须带上中括号([]).不管怎样,当按下回车键时.在窗口输入的任何值都会被储入变量 my_val.如果只按下回车键,那么这个变量就存储了一个空矩阵. 

如果 input 函数中有字符's'做为它的第二个参数,输入的数据就被当字符串.因此,语句

图片

把数值 1.23 存储到 in1 中.而语句

图片

把字符串 1.23 存储到 in2 中. 

了解更多数学建模干货,可关注GZH“数模乐园”

相关文章:

【菜鸟入门!】Matlab零基础快速入门教程

数学建模竞赛中,编程软件是必不可缺少的,比如大家都熟知的MATLAB多数同学们都会经常用到,今天给大家介绍一些MATLAB的基本元素,希望帮助大家更好的掌握编写基本的函数! 变量和数组 MATLAB 程序的基本数据单元是数组。一…...

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起,形成一个高性能计算的集群系统。通过集群组网技术,可以实现多个GPU设备之间的协同计算,提供更大规模的计算能力,适用于需要大规模并行计算的应用场景。 常用的组网技术&…...

go垃圾回收

1 go 垃圾回收变更 Go 语言的垃圾回收器(GC)自其诞生以来一直在不断演进和优化,以提高性能、减少暂停时间和对程序执行的影响。以下是一些关键的改进和变更点: 并发标记周期: Go 语言从一开始就采用了并发标记&#xf…...

如何做代币分析:以 LEO 币为例

作者: lesleyfootprint.network 编译:cicifootprint.network 数据源:LEO 代币仪表板 (仅包括以太坊数据) 在加密货币和数字资产领域,代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数…...

数制和码制

目录 几种常见的数制 数制 基数 位权 常见的四种数制 十进制数 二进制数 八进制数 十六进制数 不同进制数的相互转换 例如 例如 编码 二-十进制码 例如 格雷码 例如 原码、反码和补码 几种常见的数制 关键术语 数制:以一组固定的符号和统一的规则来表示数值…...

Git Bash中安装tree

文章目录 问题描述解决办法A备选办法BRef 问题描述 在Git Bash中使用tree报错: tree # bash: tree: command not found解决办法A 下载二进制文件: https://gnuwin32.sourceforge.net/packages/tree.htm -> 选binary。下载后解压.zip 把解压后的tre…...

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

C++练手题系列一

第 1 题 【 问答题 】 • 有多少种二叉树 输入n(1<n<13)&#xff0c;求n个结点的二叉树有多少种形态 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 整数n 输出答案 样例输入 3 样例输出 5 第 2 题 【 问答题 】 • 城堡问题 1 2 3 4 5 6 7 ################…...

(下)async/await高级用法,你会多少种呢?

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 前言 众所周知&#xff0c;在 ECMA17 中加入了两个关键字 async、await&#xff0c;简单来说它们是基于 Promise 之上的语法糖&#xff0c;可以让异步操作更加简洁明了。在掌握async、await的基础用法后&#xff0…...

阅读笔记 | REFORMER: THE EFFICIENT TRANSFORMER

阅读论文&#xff1a; Kitaev, Nikita, Łukasz Kaiser, and Anselm Levskaya. “Reformer: The efficient transformer.” arXiv preprint arXiv:2001.04451 (2020). 背景与动机 这篇论文发表较早&#xff0c;主要关注Transformer的效率问题。标准的Transformer模型在许多自然…...

光路科技:工业以太网交换机引领工业互联网新篇章

随着全球范围内工业4.0的浪潮不断涌动&#xff0c;工业互联网作为其核心驱动力&#xff0c;正引领着工业生产向智能化、网络化的崭新阶段迈进。在这一转型的浪潮中&#xff0c;光路科技凭借其卓越的工业互联设备与创新解决方案&#xff0c;正为工业互联网领域的发展注入新的活力…...

航拍无人机技术,航拍无人机方案详解,无人机摄影技术

航拍无人机是利用遥控技术和摄像设备&#xff0c;在空中进行拍摄和录像的无人机。这种无人机通常具有高清摄像设备、图像传输设备、GPS定位系统、智能控制系统等&#xff0c;可以轻松实现各种拍摄角度和高度&#xff0c;广泛应用于影视制作、旅游景区航拍、城市规划、环保监测等…...

【ArcPy】游标访问几何数据

访问质心坐标相关数据 结果展示 代码 import arcpy shppath r"C:\Users\admin\Desktop\excelfile\a2.shp" with arcpy.da.SearchCursor(shppath, ["SHAPE","SHAPEXY","SHAPETRUECENTROID","SHAPEX","SHAPEY",&q…...

Java云计算k8s

云计算k8s k8s简介容器技术的发展使用kubeadm安装k8skubectlKubernetes 架构k8s节点节点与控制面之间的通信控制器k8s kubectl命令详解k8s容器Kubernetes 对象Kubernetes 对象管理Kubernetes 对象管理 指令式命令Kubernetes 对象管理 指令式对象配置k8s对象管理 声明式对象配置…...

蜂窝物联:物联网大数据云平台功能模块简介

蜂窝云平台可远程获取现场环境&#xff08;如温室大棚、稻田&#xff09;的空气温湿度、土壤水分温度、二氧化碳浓度、光照强度及视频图像&#xff0c;通过数据模型分析&#xff0c;可以自动控制湿帘、风机、喷淋滴灌、内外遮阳、顶窗侧窗、加温补光、增氧机等设备&#xff1b;…...

Docker镜像导出/导入

Docker镜像导出/导入 一、前言 在实际操作中&#xff0c;为了便于docker镜像环境和服务配置的迁移&#xff0c;我们有时需要将已在测试环境主机上完成一系列配置的docker镜像或运行中的容器镜像导出&#xff0c;并传输到生产或其他目标环境主机上运行。为此&#xff0c;本文主…...

SwiftUI 如何在运行时从底层动态获取任何 NSObject 对象实例

概览 众所周知,SwiftUI 的推出极大地方便了我们这些秃头码农们搭建 App 界面。不过,有时我们仍然需要和底层的 UIKit 对象打交道。比如:用 SwiftUI 未暴露出对象的接口改变视图的行为或外观。 从上图可以看到,我们 SwiftUI 代码并没有设置视图的背景色,那么它是怎么变成绿…...

LeetCode 2161.根据给定数字划分数组

给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot 。请你将 nums 重新排列&#xff0c;使得以下条件均成立&#xff1a; 所有小于 pivot 的元素都出现在所有大于 pivot 的元素 之前 。 所有等于 pivot 的元素都出现在小于和大于 pivot 的元素 中间 。 小于 pivot 的元素…...

ip获取+归属地实现

1.背景 现在的社交平台一般都需要展示用户的归属地,这个功能有下面二个主要功能点,接下来我们来介绍下具体实现。 IP 获取 IP 转归属地 2.ip获取 2.1 Http请求 对于controller的请求,我们只需要写个拦截器,将用户的ip设置进上下文即可,非常方便。 @Override public bo…...

Python的错误和异常

文章目录 python的语法错误异常异常处理用户自定义异常定义清理行为预定义的清理行为 python的语法错误 语法错误&#xff08;Syntax Error&#xff09;是指代码不符合Python语言的语法规则。当解释器在执行代码之前对其进行解析时&#xff0c;如果发现代码中有语法错误&#…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...