MATLAB入门一基础知识

MATLAB入门一基础知识

此篇为课程学习笔记

链接: link

什么是MATLAB

平时所说的MATLAB既是一款软件又是一种编程语言,只是这种高级解释性语言是在配套的软件下进行开发的

MATLAB的一个特性

MATLAB的一个特性,如果一条语句以英文分号‘;’结尾,那么这条语句对应的内容或者运行结果不会在命令窗口中被显示,如果没有分号‘;’则会被显示。

最常见的函数

内置输出函数disp(X)

disp函数是MATLAB的内置输出函数,直接调用它可以在命令窗口中输出你想输出的结果X。
X可以是各种各样的数据,包括数字、字符、矩阵等等。

内置输入函数input()

用于用户对程序内输入数据,具体用法为x = input(prompt)或者str = input(prompt,‘s’),前者表示输入一个数值,后者表示输入一个字符串。
当程序运行到这个地方时,在命令窗口内,需要用户输入一个数据,以回车键结束,那么这个数据会存储到x(如果使用的是字符型输入,则存储到str),其中,prompt表示提示语,一般是一个字符串,而且这个字符串必须有(可以为空字符串"")。

数字转字符函数num2str(A)

用于将数字A转换为字符串,根据这个函数的构造很容易看出它的意思“number to string”。

函数

在MATLAB中,对函数的调用方法分为直接调用和间接调用。

  • 直接调用:一个M文件中只能有一个主函数,这个主函数(与m文件同名)可以被其他文件的函数调用,但其他子函数不能
  • 间接调用:使用函数句柄,创建函数句柄需要使用到操作符@。创建格式为:
Function_Handle = @Function_FileName;

其中Function_Handle变量保存了这个函数句柄,Function_FileName变量是函数所对应的m文件名称或者是MATLAB内部函数的名称。如:

F_Handle = @cos;
x = 0:0.25 * pi : 2 * pi;
F_Handle(x)结果为:
>> learn_Matlabans =1.0000    0.7071    0.0000   -0.7071   -1.0000   -0.7071   -0.0000    0.7071    1.0000

结构体

MATLAB中的结构体和C语言中的结构体类似。创建结构体的方式有两种:

  1. 通过字段赋值创建:
    例如:
Student.Name = 'Sam';
Student.Grade = '6';
Student.Subject = {'Chinese', 'Math', 'English'};
Student.Result = {99,99,99};
Student运行结果:
>> learn_MatlabStudent = 包含以下字段的 struct:Name: 'Sam'Grade: '6'Subject: {'Chinese'  'Math'  'English'}Result: {[99]  [99]  [99]}
  1. 通过struct函数创建:
    例如:
Schedule = struct('Day','Thu','Time','15:00','Number','18')运行结果:
>> learn_MatlabSchedule = 包含以下字段的 struct:Day: 'Thu'Time: '15:00'Number: '18'

补充:repmat 函数定义
B = repmat(A,n)
B = repmat(A,r1,…,rN)
B = repmat(A,r)

这是一个处理矩阵内容有重复时使用,其功能是以A的内容堆叠在(r1xr2)的矩阵B中,B矩阵的大小由r1r2r3*…及A矩阵的内容决定。
如:

Schedule = struct('Day','Thu','Time','15:00','Number','18')
SS = repmat(Schedule,1,2);
SS(1)
SS(2)运行结果:>> learn_Matlab
Schedule = 包含以下字段的 struct:Day: 'Thu'Time: '15:00'Number: '18'
ans = 包含以下字段的 structDay: 'Thu'Time: '15:00'Number: '18'
ans = 包含以下字段的 struct:Day: 'Thu'Time: '15:00'Number: '18'

结构体数组:

newArray = struct('Day', {'Thu', 'Fri'}, 'Time', {'15:00', '13:00'}, 'Number', {12, 2})
newArrary(1)
newArrary(2)运行结果:
>> learn_Matlab
newArray = 包含以下字段的 1×2 struct 数组:DayTimeNumber
ans = 包含以下字段的 struct:Day: 'Thu'Time: '15:00'Number: 12
ans = 包含以下字段的 struct:Day: 'Fri'Time: '13:00'Number: 2

数组类型

在MATLAB中,进行运算的所有数据类型,都是按照数组及矩阵的形式进行存储和运算的,而两者的运算方式完全不同,数组强调的是元素对元素,而矩阵是用线性代数的运算方式。
数组的定义是广义的,数组的元素可以是任何数据类型。利用数组的构建方法可以直接对变量进行赋值:

array = [1 2 3 4 5]
运行结果:
>> learn_Matlab
array =1     2     3     4     5

也可以使用冒号”:“来代表一系列的值:

array = 0:10  % 表示从0开始,步长为1,到10结束的一系列数字序列;
% 序列最后一个数小于等于10
array1 = 0:2:9 % 表示从0开始,步长为2,到9结束的一系列数字序列;
% 序列最后一个数小于等于9>> learn_Matlab
array =0     1     2     3     4     5     6     7     8     9    10
array1 =0     2     4     6     8
运行结果:

空数组的创建:

array = []运行结果:
>> learn_Matlab
array =[]

单元(cell)数组

使用单元数组的目的在于:它可以把不同类型数据归并到一个数组中。单元数组的维数不受限制。

  1. 使用赋值语句创建单元数组:
    与一般数组有所不同的是,单元数组使用花括号”{}“来创建,使用逗号”,“或空格来分隔每一个单元,使用分号”:“来分行。
C = {'x', [1;3;6]; 10, pi}
whos C运行结果:
>> learn_Matlab
C =2×2 cell 数组{'x' }    {3×1 double}{[10]}    {[  3.1416]}Name      Size            Bytes  Class    AttributesC         2x2               490  cell    
  1. 利用cell函数创建空单元数组:
%创建一个m*n的空单元数组,其中每一个单元均为空矩阵
cellName = cell(2, 3)
>> learn_Matlab
cellName =2×3 cell 数组{0×0 double}    {0×0 double}    {0×0 double}{0×0 double}    {0×0 double}    {0×0 double}

单元数组的寻访

在单元数组中,寻访单元和单元中的内容是不一样的,对应的是两种不同的操作。为此MATLAB设计了相对应的操作对象:单元外标识(cell indexing)和单元内编址(content Addressing).
对于单元数组C, **cell(m,n)**指的是单元数组中的第m行第n列的单元,它返回的是一个单元,**cell{m,n}**指的是单元数组中的第m行第n列单元中的内容,返回的是单元中的值。例如:

 C = {2[2 4;3 6;1 3], 'string'; sin(pi/8),3>10, 'code'}v1 = C(2, 2)class(v1)v2 = C{2, 2}class(v2)运行结果:
>> learn_Matlab
C =2×3 cell 数组{[     2]}    {3×2 double}    {'string'}{[0.3827]}    {[       0]}    {'code'  }
v1 =1×1 cell 数组{[0]}
ans ='cell'
v2 =logical0
ans ='logical'

1. 单元数组的合并

a{1, 1} = 'cellclass';
a{1, 2} = [1 2 2];
a{2, 1} = ['q' 'w' 'e'];
a{2, 2} = [6 5 4];
a
b = {'Jan'}
c = {a, b}

2. 删除单元数组中指定的单元
只需要将空矩阵复制给指定的单元即可。

a{1, 1} = 'cellclass';
a{1, 2} = [1 2 2];
a{2, 1} = ['q' 'w' 'e'];
a{2, 2} = [6 5 4];a{2, 2} = []
a(1, 2) = {[]}运行结果:
>> learn_Matlab
a =2×2 cell 数组{'cellclass'}    {1×3 double}{'qwe'      }    {0×0 double}
a =2×2 cell 数组{'cellclass'}    {0×0 double}{'qwe'      }    {0×0 double}

3. 使用reshape函数改变单元数组的形状
reshape函数的调用格式:

teimC = reshape(C, m, n)
%该函数将单元数组C改变为一个具有m行n列的新单元数组。

例如:

C = {ones(3), 'hello,world', zeros(5), [21, 3, 2]}
newC = reshape(C,2,2)运行结果为:
>> learn_Matlab
C =1×4 cell 数组{3×3 double}    {'hello,world'}    {5×5 double}    {1×3 double}
newC =2×2 cell 数组{3×3 double   }    {5×5 double}{'hello,world'}    {1×3 double}

map容器类型

map的本意是映射,就是将一个量映射到另一个量,map中的内容是键值对,即一个key对应一个value。map中存储的数据可以是任何类型的。

  • 创建map对象
mapObj = containers.Map({key1,key2,……}, {value1, value2,……})
%当键和值是字符串时,需要稍做变更
mapObj = containers.Map({'key1', 'key2',……}, {'value1', 'value2',……})

例如:

scheduleMap = containers.Map({'Mon', 'Tue', 'Wed', 'Thu', 'Fri'}, {'Maths', 'Chinese', 'History', 'Geography', 'Biology'})运行结果:
>> learn_MatlabscheduleMap = Map - 属性:Count: 5KeyType: charValueType: char

可以使用MapName.property来访问Map的属性,如:

scheduleMap.KeyType 运行结果:
ans ='char'

也可以先创建一个空的Map,再通过键值对的对应来补充其内容。

  • 读取Map对象
    可以通过keys()函数来查看所有的key,也可以通过values()函数来查看所有的值。
    如:
keys(scheduleMap)
values(scheduleMap)运行结果:
ans =1×5 cell 数组{'Fri'}    {'Mon'}    {'Thu'}    {'Tue'}    {'Wed'}
ans =1×5 cell 数组{'Biology'}    {'Maths'}    {'Geography'}    {'Chinese'}    {'History'}

读取格式如下:

valueName = mapName(keyName)
%当键名是一个字符串时,需要使用单引号将键名括起来

例子:

course = scheduleMap('Wed')输出为:course ='History'

如果需要对多个键进行访问时,可以使用values函数:

values(scheduleMap,{'Mon', 'Thu'})输出为:
ans =1×2 cell 数组{'Maths'}    {'Geography'}
  • 编辑Map对象
    从map中是删除键值对:
%使用remove函数的格式:
remove('mapName', 'keyName')

例如:

scheduleMap = containers.Map({'Mon', 'Tue', 'Wed', 'Thu', 'Fri'}, {'Maths', 'Chinese', 'History', 'Geography', 'Biology'})remove(scheduleMap, 'Thu')keys(scheduleMap)
values(scheduleMap)输出为:
ans = Map - 属性:Count: 4KeyType: charValueType: char
ans =1×4 cell 数组{'Fri'}    {'Mon'}    {'Tue'}    {'Wed'}
ans =1×4 cell 数组{'Biology'}    {'Maths'}    {'Chinese'}    {'History'}

添加键值对:
需要注意的是:原Map对象里的key是什么类型的,新添加的key就得是什么类型的。

%调用格式为
existingMapObj(newKeyName) = newValue

例如:

scheduleMap('Sta') = 'public'
keys(scheduleMap)
values(scheduleMap)输出为:
ans =1×6 cell 数组{'Fri'}    {'Mon'}    {'Sta'}    {'Thu'}    {'Tue'}    {'Wed'}
ans =1×6 cell 数组{'Biology'}    {'Maths'}    {'public'}    {'Geography'}    {'Chinese'}    {'History'}

修改key:
如果需要在保持值不变的情况下,对键名进行修改,则首先要删除键值对,然后再添加。
修改value:通过复制操作覆盖原有的值。

基本矩阵操作

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

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

相关文章

Ghidra Software Reverse Engineering Framework

安装 Install JDK 17 64-bit 下载 JDK 17 64-bit,并解压 vi ~/.bashrc export JAVA_HOME/usr/local/java/jdk1.8.0_361(jdk路径) export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/bin:$PATHsource…

【题解】JZOJ6703 tree

题意 给定 n n n 个点的树,每个点有点权,每次询问点权大于等于 x x x 的点构成的子图有多少个连通块,动态修改点权,保证修改后点权不小于修改前。 题解 首先有一个显然的结论:森林的连通块个数 点数 - 边数。 这…

LeetCode 332. Reconstruct Itinerary【欧拉回路,通路,DFS】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Vue3+ElementUI使用

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"initial-scale1.0,maximum-scale1.0,minimum-scale1.0,user-scalable0, widthdevice-width"/><!-- 引入样式 --><lin…

【C++】list的模拟实现【完整理解版】

目录 一、list的概念引入 1、vector与list的对比 2、关于struct和class的使用 3、list的迭代器失效问题 二、list的模拟实现 1、list三个基本函数类 2、list的结点类的实现 3、list的迭代器类的实现 3.1 基本框架 3.2构造函数 3.3 operator* 3.4 operator-> 3…

JavaScript 基础 - 第1天笔记

JavaScript 基础 - 第1天 了解变量、数据类型、运算符等基础概念&#xff0c;能够实现数据类型的转换&#xff0c;结合四则运算体会如何编程。 体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变量存储数据的“容器”掌握常见运算符的使用&#xff0c;了…

bug总结问题集和知识点集(一)

目录 一 bug问题集1. 端口被占用 二 oracle1. oracle查看版本怎么操作2. oracle数据库&#xff1a;参数个数无效![在这里插入图片描述](https://img-blog.csdnimg.cn/6a2eebc164f9406c81525371893bbd11.png)3. ORACLE数据库如何完整卸载? 三 mybatis1. mybatis用注解如何实现模…

Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例

Java手写最大子数组和算法&#xff08;如Kadane算法&#xff09;和最大子数组和算法&#xff08;如Kadane算法&#xff09;应用拓展案例 1. 算法思维导图 以下是使用mermaid代码表示的Kadane算法的实现原理&#xff1a; #mermaid-svg-rI7hVAVsP1qtjZK7 {font-family:"tr…

学习Node js:raw-body模块源码解析

raw-body是什么 raw-body的主要功能是处理HTTP请求体的原始数据。它提供了以下核心功能&#xff1a; 解析请求体&#xff1a;可以从HTTP请求中提取原始数据&#xff0c;包括文本和二进制数据。配置选项&#xff1a;通过配置项&#xff0c;可以设置请求体的大小限制、编码方式…

【LeetCode-简单题KMP】232. 用栈实现队列

文章目录 题目方法一&#xff1a;用输入栈和输出栈模拟队列 题目 方法一&#xff1a;用输入栈和输出栈模拟队列 只有输出栈为空的时候才能将输入栈的元素补充到输出栈&#xff0c;否则输出栈不为空&#xff0c;如果再从输入栈往输出栈填充元素&#xff0c;就会弄乱队列的先进先…

【SpringMVC】拦截器JSR303的使用

【SpringMVC】拦截器&JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权…

合同矩阵充要条件

两个实对称矩阵合同的充要条件是它们的正负惯性指数相同。 正惯性指数是矩阵正特征值个数&#xff0c;负惯性指数是矩阵负特征值个数。 即合同矩阵的充分必要条件是特征值的正负号个数相同。 证明&#xff1a; 本论证中的所有矩阵先假设为对称矩阵&#xff0c;但不限于对称…

接口测试——接口协议抓包分析与mock_L1

目录&#xff1a; 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口&#xff1a;不同的系统之间相互连接的部分&#xff0c;是一个传递数据的通道接口测试&#xff1a;检查数据的交换、传递和控制…

设计模式之职责链模式

职责链模式:使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求&am…

ajax 中 success 方法的 return

做前后台交互时会经常用到 ajax&#xff0c;有时候会遇到这样的情况&#xff0c;我们在 a 方法中调用 b 方法&#xff0c;b 方法里是一个 ajax&#xff0c;成功请求后会返回一个结果 data&#xff0c;而我们希望通过 b 方法的返回值获取到 data&#xff0c;我们的代码可能是这样…

TCP详解之三次握手和四次挥手

TCP详解之三次握手和四次挥手 1. TCP基本认识 1.1 什么是 TCP TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 1.2 TCP协议段格式 我们先来看看TCP首部协议的格式 我们先来介绍一些与本文关联比较大的字段&#xff0c;其他字段不做详细阐述。 序列号&#xff1a…

2023面试知识点一

1、新生代和老年代的比例 默认的&#xff0c;新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )&#xff0c;即&#xff1a;新生代 ( Young ) 1/3 的堆空间大小。老年代 ( Old ) 2/3 的堆空间大小。其中&#xff0c;新生代 ( …

213. 打家劫舍 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 213. 打家劫舍 II 题目解读 你是一个专业的小偷&#xff0c;现在要偷一排屋子&#xff0c;但是你不能偷相邻的两间屋子&#xff08;这一排房子的首尾是相连的&…

什么是性能调优?方法有哪些?流程是怎样的?

一、性能调优的含义 性能调优通俗来讲就是对计算机硬件、操作系统和应用有相当深入的了解&#xff0c;调节三者之间的关系&#xff0c;实现整个系统&#xff08;包括硬件、操作系统、应用&#xff09;的性能最大化&#xff0c;并能不断的满足现有的业务需求。 在判定软件存在…

将本地构建的镜像推送到远程镜像库,构建多种系统架构支持的Docker镜像并推送到Docker Hub

目录 推送到 Docker Hub前提&#xff1a;需要在 [Docker Hub](https://hub.docker.com/) 创建账户、创建仓库。1. 创建 Dockerfile 和构建镜像&#xff1a;docker build -t2. 登录到远程镜像库&#xff1a;docker login3. 将镜像标记为远程仓库地址&#xff1a;docker tag4. 推…