MATLAB系列06:复数数据、字符数据和附加画图类

news2024/12/24 18:09:20

MATLAB系列06:复数数据、字符数据和附加画图类

  • 6. 复数数据、字符数据和附加画图类
    • 6.1 复数数据
      • 6.1.1 复变量( complex variables)
      • 6.1.2 带有关系运算符的复数的应用
      • 6.1.3 复函数( complex function)
      • 6.1.4 复数数据的作图
    • 6.2 字符串函数
      • 6.2.1 字符转换函数
      • 6.2.2 创建二维字符数组
      • 6.2.3 字符串的连接
      • 6.2.4 字符串的比较
      • 6.2.5 在一个字符串中查找/替换字符
      • 6.2.6 大小写转换
      • 6.2.7 字符串转为数字
      • 6.2.8 数字转为字符串
      • 6.2.9 字符串函数总结
    • 6.3 多维数组
    • 6.4 关于二维作图的补充说明
      • 6.4.1 二维作图的附加类型
      • 6.4.2 作图函数
      • 6.4.3 柱状图
    • 6.5 三维作图
      • 6.5.1 三维曲线作图
      • 6.5.2 三维表面,网格,等高线图象
    • 6.6 总结

6. 复数数据、字符数据和附加画图类

6.1 复数数据

复数是指既包含实部又包含虚部的数。复数的一般形式如下:
C = a + b i C=a+bi C=a+bi
MATLAB 用直角坐标表达复数。每一个复数应有一对实数(a, b)组成。第一个数(a)代表复数的实部,第二个数( b)代表复数的虚部。

6.1.1 复变量( complex variables)

MATLAB将自动创建一个复变量。创建复数的最简单方法是用MATLAB本自带的因有变量i或j, 它们都被预定义为 -1 。 示例:

>> c1 = 4 + 3*i

c1 =

   4.0000 + 3.0000i

6.1.2 带有关系运算符的复数的应用

用关系运算符 = = == ==来判断两复数是否相等,或用关系运算符~=判断两复数是否不相等,这种情况是可能的。这些运算都会产生出我们所期望的结果。例如,如果 c1=4+3i 和 c2=4-3i,那么关系运算 c1==c2 将会产生 0,关系运算 c1~=c2 将会产生 1。

但是,比较运算符>, <, <=或>=将不会产生我们所期望的结果。当复数进行此类关系运算时,只对复数的实部进行比较。例如,如果 c1=4+i3 和 c2=4+i8,那么比较运算 c1>c2将会产生 1,尽管 c1 的模要比 c2 的模小。如果我们需要用这些运算对两复数进行比较,我们更加关心的是两复数的模,而不只是实部。复数的模可以由 abs 固有函数计算得到。

6.1.3 复函数( complex function)

image-20240914165432984

6.1.4 复数数据的作图

因为复数数据既包括实部又包括虚部,所以在 MATLAB 中复数数据的作图与普通实数据的作图有所区别。例如,考虑下面的函数
y ( t ) = e − 0.2 t ( c o s t + i sin ⁡ t ) y(t)=e^{-0.2t}\left(cost+i\sin t\right) y(t)=e0.2t(cost+isint)
如果我们用传统的 plot 命令给这个函数作图,只有实数数据被作出来,而虚部将会被忽略。

方式一:在相同的时间轴画出函数的实部和虚部

t = 0:pi/20:4*pi;
y = exp(-0.2*t) .* (cos(t) + i * sin(t));
plot(t, real(y),'b-');
hold on;
plot(t, imag(y),'r--');
title('\bfPlot of Complex Function vs Time');
xlabel('\bf\itt');
ylabel('\bf\ity(t)');
legend('real','imaginary');
hold off;
image-20240914165923552

方式二:如果有一个复参数提供给plot函数它会自动产生一个函数的实部-虚部

t = 0:pi/20:4*pi;
y = exp(-0.2*t) .* (cos(t) + i * sin(t));
plot(y,'b-');
title('\bfPlot of Complex Function');
xlabel('\bfReal Part');
ylabel('\bfImaginary Part');
image-20240914170316980

方式三:画出极坐标图

t = 0:pi/20:4*pi;
y = exp(-0.2*t) .* (cos(t) + i * sin(t));
polarplot(angle(y),abs(y));
title('\bfPlot of Complex Function');
image-20240914170459104

6.2 字符串函数

一个 MATLAB 字符串是一个 char 型数组。每一个字型占两个字节。当字符串被赋值于一个变量时,这个变量将被自动创建为字符变量。 示例:

>> str='hello world!';
>> whos str
  Name      Size            Bytes  Class    Attributes

  str       1x12               24  char     

6.2.1 字符转换函数

我们可以利用 double 函数把变量从字型转化为 double 型。

>> x=double(str)

x =

   104   101   108   108   111    32   119   111   114   108   100    33

我们可以利用 char 函数把 double 型数据转化为字符型数据。所以函数 char(x)产生的结果

>> x=char(x)

x =

    'hello world!'

6.2.2 创建二维字符数组

我们可以创建二维字符数组,但一个数组中每一行的长度都必须相等。如果其中的一行比其他行短,那么这个字符数据将会无效,并产生一个错误。例如,下面的语句是非法的,因为他两行的长度不同。

name = ['Stephen J. Chapman'; 'Senior Engineer'];

创建二维字符数组的最简单的方法是用 char 函数。函数将会自动地寻找所有字符串中最长的那一个。其他用空格补全

>> name = char('Stephen J. Chapman','Senior Engineer')

name =

  2×18 char 数组

    'Stephen J. Chapman'
    'Senior Engineer   '

我们可以应用 deblank 函数去除多余空格。例如,下面的语句去除 name 数组中第二行的多余空格,产生的结果与原来的进行比较。

>> line2 = name(2,:)

line2 =

    'Senior Engineer   '

>> line2_trim = deblank(name(2,:))

line2_trim =

    'Senior Engineer'

>> size(line2)

ans =

     1    18

>> size(line2_trim)

ans =

     1    15

6.2.3 字符串的连接

函数 strcat 水平连接两字符串,忽略所有字符串末端的空格,而字符串的空格保留。示例:

>> result = strcat('string 1 ','String 2')

result =

    'string 1String 2'

函数 strvcat 用于竖直地连接两字符串,自动地把它转化为二维数组。示例:

>> result = strvcat('Long String 1 ','String 2')

result =

  2×14 char 数组

    'Long String 1 '
    'String 2      '

6.2.4 字符串的比较

  1. 比较两字符串,看是否相同

    • strcmp判断两字符串是否等价

    • strcmpi忽略大小写判断两字符串是否等价

    • strncmp判断两字符串前 n 个字符是否等价

    • strncmpi忽略大小写判断两字符串前 n 个字符是否等价

  2. 判断单个字符是否相等

    我们可以利用 MATLAB 关系运算符对字符数组中的每一个元素进行检测,看是否相同,但是我们要保证它们的维数是相同的,或其中一个是标量。例如,你可以用相等运算符( ==)来检测两字符串是否相匹配。

    >> a = 'fate';
    >> b = 'cake';
    >> result = a == b
    
    result =
    
      1×4 logical 数组
    
       0   1   0   1
    

    所有的关系运算符( >, >=, <, <=, ==, ~=)都是对字符所对应的 ASCII 值进行比较。与 C 语言不同, MATLAB 中没有一个内建函数,对两字符串在整体进行“大于”或“小于”的关系运算。

  3. 在一字符串内对字符进行判断

    有两个函数可对一个字符串内的字符逐个进行分类。

    • isletter用来判断一个字符是否为字母
    • isspace判断一个字符是否为空白字符(空格, tab,换行符)

    示例:

    >> mystring = 'Room 23a'
    
    mystring =
    
        'Room 23a'
    
    >> a = isletter(mystring)
    
    a =
    
      1×8 logical 数组
    
       1   1   1   1   0   0   0   1
    

6.2.5 在一个字符串中查找/替换字符

MATLAB 提供了许多的函数,用来对字符串中的字符进行查找或替换。

  • 函数findstr返回短字符串在长字符串中所有的开始位置。示例:

    >> test = 'This is a test!';
    >> position = findstr(test,'is')
    
    position =
    
         3     6
    
  • 函数strmatch是另一种匹配函数。它用来查看二维数组行开头的字符,并返回那些以指定的字符序列为开头行号。示例:

    >> array = strvcat('maxarray','min value','max value')
    
    array =
    
      3×9 char 数组
    
        'maxarray '
        'min value'
        'max value'
    
    >>  result = strmatch('max',array)
    
    result =
    
         1
         3
    
  • 函数strrep用于进行标准的查找和替换操作。它能找到一个字符串中的所有另一个字符串,并被第三个字符串替换。这个函数形式为

    result = strrep(str,srch,repl)
    

    其中 str 是被检测的字符串, srch 是要查找到的字符串, repl 是用于替代的字符串,示例:

    >> test='This is a test!'
    
    test =
    
        'This is a test!'
    
    >> result = strrep(test,'test','pest')
    
    result =
    
        'This is a pest!'
    
  • 函数strtok返回输入字符串中第一次出现在分隔符前面的所有字符。默认的分隔符为一系列的空白字符。strtok的形式如下

    [token, remainder] = strtok(string, delim)
    

    其中 string 是输入字符串, delim 是可选择的分隔符, token 代表输入字符串中第一次出现在分隔符前面的所有字符, remainder 代表这一行的其余部分。例子:

    >> [token, remainder] = strtok('This is a test!')
    
    token =
    
        'This'
    
    
    remainder =
    
        ' is a test!'
    

    你可以利用函数strtok把一个句子转换为单词。

6.2.6 大小写转换

函数 upper 和 lower 分别把一个字符串中所有转化大定和小写。例如

>> result = upper('This is test 1!')

result =

    'THIS IS TEST 1!'

>> result = lower('This is test 2!')

result =

    'this is test 2!'

在大小转换时,数字和符号不受影响。

6.2.7 字符串转为数字

MATLAB 把由数字组成的字符串转化为数字要用到函数 eval。示例:

>>  a = '3.141592';
>> b = eval(a)

b =

    3.1416

字符串可以用 sscanf 函数转化为数字。 函数 sscanf 两种最普通的转义序是“%d”,“%g”,它们分别代表输出为整数或浮点数。示例:

>> value1 = sscanf('3.141593','%g')

value1 =

    3.1416

>> value2 = sscanf('3.141593','%d')

value2 =

     3

6.2.8 数字转为字符串

MATLAB 中有许多的字符串/数字转换函数把数字转化为相应的字符串。我们在这里只看两个函数 num2str 和 int2str。示例:

>> x=5317;
>> y=int2str(x);
>> whos y
  Name      Size            Bytes  Class    Attributes

  y         1x4                 8  char               

>> whos x
  Name      Size            Bytes  Class     Attributes

  x         1x1                 8  double    

函数 num2str 为输出字符串的格式提供更多的控制。第二个可选择的参数可以对输出字符串的数字个数进行设置或指定一个实际格式。例如:

>> p=num2str(pi,7)

p =

    '3.141593'

>> p=num2str(pi,'%10.5e')

p =

    '3.14159e+00'

6.2.9 字符串函数总结

image-20240914213158043 image-20240914213120441

6.3 多维数组

多维数组是二维数组的扩展。每增加一维,它们所对应的每个元素就会多一个下角标。示例:

>> a=[1 2 3 4;5 6 7 8]

a =

     1     2     3     4
     5     6     7     8

>> a(:,:,2)=[9 10 11 12;13 14 15 16];
>> a(:,:,3)=[17 18 19 20;21 22 23 24]

a(:,:,1) =

     1     2     3     4
     5     6     7     8


a(:,:,2) =

     9    10    11    12
    13    14    15    16


a(:,:,3) =

    17    18    19    20
    21    22    23    24

>> a(1,1,2)

ans =

     9

>> a(1,1,:)

ans(:,:,1) =

     1


ans(:,:,2) =

     9


ans(:,:,3) =

    17

6.4 关于二维作图的补充说明

6.4.1 二维作图的附加类型

在 MATLAB 帮助工作台中列出超过 20 种类型的作图。例如针头图(Stem Plots),阶梯图(stair plots), 条形图,饼图(pie plots),罗盘图(compass plots)。 在针头图中的每一个值都用一个圆圈和垂直于 x轴的直线连接而成。在阶梯图中的每一个值都是用连续的竖直的长条线来表示,形成阶梯状效果。条形图可分成水平条形图和竖直条形图。饼图用不同的扇区代表不同的变量。最后罗盘图是另一种极坐标图它的每一值用箭头来表示。

image-20240914214054346
  1. 条形图

    x = [1 2 3 4 5 6];
    y = [2 6 8 7 8 5];
    bar(x,y);
    title('\bfExample of a Bar Plot');
    xlabel('\bf\itx');
    ylabel('\bf\ity');
    axis([0 7 0 10]);
    
    image-20240914214537805
  2. 阶梯图

    x = [1 2 3 4 5 6];
    y = [2 6 8 7 8 5];
    stairs(x,y);
    title('\bfExample of a Stairs Plot');
    xlabel('\bf\itx');
    ylabel('\bf\ity');
    axis([0 7 0 10]);
    
    image-20240914214702171
  3. 极坐标图

    x = [1 2 3 4 5 6];
    y = [2 6 8 7 8 5];
    compass(x,y);
    title('\bfExample of a Compass Plot');
    xlabel('\bf\itx');
    ylabel('\bf\ity');
    axis([0 7 0 10]);
    
    image-20240914214911225
  4. 饼状图

    data = [10 37 5 6 6];
    explode = [0 1 0 0 0];
    pie(data, explode);
    title('\bfExample of a Pie Plot');
    legend('One','Two','Three','Four','Five');
    
    image-20240914215037301
  5. 针头图

    x = [1 2 3 4 5 6];
    y = [2 6 8 7 8 5];
    stem(x,y);
    title('\bfExample of a Stem Plot');
    xlabel('\bf\itx');
    ylabel('\bf\ity');
    axis([0 7 0 10]);
    
    image-20240914214420048

6.4.2 作图函数

在前面的所有作图,我们必须创建数组,并把这些数组传递给作图函数。 MATLAB 提供了两个函数可以直接作出图象,而不需要创建中间数据数组。它们是函数数 ezplot 和 fplot。示例:

ezplot('sin(x)/x',[-4*pi 4*pi]);
title('Plot of sinx/x');
grid on;
image-20240914215330022

函数 fplot 与 ezplot 相类似,但更加精确。前两个参数与函数 ezplot 中的相同,但是函数 fplot 还有其他优点。

  1. 函数 fplot 是适应性的,它意味着在自变量范围内函数突然变化显示更多的点。
  2. 函数 fplot 支持 TEX 命令,用来指定坐标图的标题和坐标轴标签,而函数 ezplot 则不能。

在一般情况下,在画函数图象时,你应当使用函数 fplot。

6.4.3 柱状图

柱状图用来显示一系列数据数值的分布。为了创建一个柱状图,在一系列数值中范围被平均划分,并确定某一个范围中数值的个数。 示例:

y = randn(10000, 1);
hist(y, 15);
image-20240914215732480

该语句创建一个包含有 1000 个符合正分布的随机数数组并产生了一个取值范围 15 等分的柱状图。

6.5 三维作图

6.5.1 三维曲线作图

t = 0:0.1:10;
x = exp(-0.2*t) .* cos(2*t);
y = exp(-0.2*t) .* sin(2*t);
plot3(x,y,t);
title('\bfThree-Dimensional Line Plot');
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfTime');
axis square;
grid on;
image-20240914220001247

6.5.2 三维表面,网格,等高线图象

image-20240914220406824

三维网格:

[x,y] = meshgrid(-4:0.2:4,-4:0.2:4);
z = exp(-0.5*(x.^2+y.^2));
mesh(x,y,z);
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfz');
image-20240914220500806

三维表面:

[x,y] = meshgrid(-4:0.2:4,-4:0.2:4);
z = exp(-0.5*(x.^2+y.^2));
surf(x,y,z);
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfz');
image-20240914220602701

三维等高线:

[x,y] = meshgrid(-4:0.2:4,-4:0.2:4);
z = exp(-0.5*(x.^2+y.^2));
contour(x,y,z);
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfz');
image-20240914220811085

6.6 总结

image-20240916111631808 image-20240916111647361

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

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

相关文章

通信工程学习:什么是ONU光网络单元

ONU&#xff1a;光网络单元 ONU&#xff08;Optical Network Unit&#xff0c;光网络单元&#xff09;是光纤接入网中的用户侧设备&#xff0c;它位于光分配网络&#xff08;ODN&#xff09;与用户设备之间&#xff0c;是光纤通信系统的关键组成部分。以下是关于ONU光网络单元的…

Web后端开发技术:RESTful 架构详解

RESTful 是一种基于 REST&#xff08;表述性状态转移&#xff0c;Representational State Transfer&#xff09;架构风格的 API 设计方式&#xff0c;通常用于构建分布式系统&#xff0c;特别是在 Web 应用开发中广泛应用。REST 是一种轻量级的架构模式&#xff0c;利用标准的 …

构建响应式API:FastAPI Webhooks如何改变你的应用程序

FastAPI&#xff0c;作为一个现代、快速&#xff08;高性能&#xff09;的Web框架&#xff0c;为Python开发者提供了构建API的卓越工具。特别是&#xff0c;它的app.webhooks.post装饰器为处理实时Webhooks提供了一种简洁而强大的方法。在本文中&#xff0c;我们将探讨如何使用…

Git使用教程-将idea本地文件配置到gitte上的保姆级别步骤

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

剖析Spark Shuffle原理(图文详解)

Spark Shuffle 1.逻辑层面 从逻辑层面来看&#xff0c;Shuffle 是指数据从一个节点重新分布到其他节点的过程&#xff0c;主要发生在需要重新组织数据以完成某些操作时。 RDD血统 Shuffle 触发条件&#xff1a; reduceByKey、groupByKey、join 等操作需要对数据进行分组…

制作OpenLinkSaas发行版

发行版配置 作为软件研发效能一站式解决方案&#xff0c;OpenLinkSaas提供了众多的功能。再不同的场景中&#xff0c;所需要的软件功能是有差异的。OpenLinkSaas提供了发行版配置功能&#xff0c;以便在不同场景下组合所有的功能。 修改代码下面的src-tauri/src/vendor_cfg.rs…

软考高级:嵌入式-嵌入式实时操作系统调度算法 AI 解读

讲解 嵌入式实时操作系统中的调度算法主要用于管理任务的执行顺序&#xff0c;以确保任务能够在规定时间内完成。针对你提到的几种调度算法&#xff0c;我会逐一进行通俗解释。 生活化例子 假设你在家里举办一个家庭聚会&#xff0c;家里人轮流使用一个游戏机玩游戏。你作为…

springboot+redis+缓存

整合 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 连接redis&#xff0c;配置yml文件 主机 端口号 数据库是哪一个 密码 配置类 p…

嵌入式最常用的接口之一:SDIO 介绍

SDIO简介 SDIO(Secure Digital Input Output)是一种基于SD卡技术的扩展接口标准,允许外部设备通过标准的SD卡槽连接并通信。与传统的SD卡仅限于存储数据不同,SDIO设备通过该接口进行多种功能扩展,如网络连接、GPS、蓝牙、摄像头等。这使得SDIO成为一种广泛应用于移动设备…

html实现好看的多种风格手风琴折叠菜单效果合集(附源码)

文章目录 1.设计来源1.1 风格1 -图文结合手风琴1.2 风格2 - 纯图片手风琴1.3 风格3 - 导航手风琴1.4 风格4 - 双图手风琴1.5 风格5 - 综合手风琴1.6 风格6 - 简描手风琴1.7 风格7 - 功能手风琴1.8 风格8 - 全屏手风琴1.9 风格9 - 全屏灵活手风琴 2.效果和源码2.1 动态效果2.2 源…

等保测评中的个人信息保护:重点与策略

在信息安全等级保护&#xff08;等保&#xff09;测评过程中&#xff0c;个人信息保护成为企业必须重视的关键环节。随着《个人信息保护法》等法规的出台&#xff0c;个人信息保护不仅是企业通过等保测评的重要指标&#xff0c;更是企业社会责任和用户信任的基础。将探讨等保测…

Leetcode 每日一题:Evaluate Division

写在前面 今天依旧是一道来自图论的题目&#xff0c;而今天这道题目的难度也是相对于前面分享过的题目中难度最大的一种。题主在第一次做这道题的时候根本没有反应过来这道题目可以转化为 图 来解决。而这道题目将一个 二维数组的乘除 运算转化为 图论 的过程需要一定的数学思…

如何在Android上实现RTSP服务器

技术背景 在Android上实现RTSP服务器确实是一个不太常见的需求&#xff0c;因为Android平台主要是为客户端应用设计的。在一些内网场景下&#xff0c;我们更希望把安卓终端或开发板&#xff0c;作为一个IPC&#xff08;网络摄像机&#xff09;一样&#xff0c;对外提供个拉流的…

rhat Linux虚拟机桥接网络配置

本文物理机安装Windows10系统&#xff0c;虚拟机安装redhat7.7。 0、基本概念 VMware中的桥接模式&#xff08;Bridged Mode&#xff09;是一种虚拟机网络配置方式&#xff0c;它允许虚拟机直接连接到宿主机的物理网络&#xff0c;使得虚拟机能够像物理机一样访问外部网络。 在…

高颜值,实力派丨捷顺科技旗舰级人脸识别门禁、速通摆闸新品发布

9月12日&#xff0c;捷顺科技成功举办以“全新进化&#xff0c;定义非凡”为主题的2024智慧人行线上新品发布会&#xff0c;正式推出两款全新一代的智慧人行领域旗舰级产品——人脸识别门禁Y20、速通摆闸3910A。 作为国内最早进入出入口控制管理行业的企业之一&#xff0c;捷顺…

深度学习-生成式检索-论文速读-2024-09-14

深度学习-生成式检索-论文速读-2024-09-14 前言: 生成式检索&#xff08;Generative Retrieval&#xff0c; GR&#xff09;是一种结合了生成模型和检索系统的人工智能技术方法。这种方法在处理信息检索任务时&#xff0c;不仅依赖于已有数据的检索&#xff0c;还能生成新的、…

unity的学习

因为需要构建一个三维物理环境,所以学习了unity,半天就可以,非常简单清晰 1.安装 去官网下载unity hub . 然后需要下载editor,但注意已经有了vs2022就不要再下一次了,下的时候会全放c盘,再安装.c盘都装不下了. 如果美游vs2022,就先自己把vs2022安装好,再安装unity hub.(其实不…

Vue自定义指令以及项目中封装过的自定义指令

自定义指令 Vue 自定义指令是 Vue.js 框架中一个非常强大的功能&#xff0c;它允许你注册一些全局或局部的自定义 DOM 操作指令&#xff0c;以便在模板中复用。自定义指令通过 Vue.directive() 方法进行全局注册&#xff0c;或者在组件的 directives 选项中局部注册。 自定义…

YOLOV8输出预测框的坐标信息

结果&#xff1a;&#xff08;前提是对应类别的yolov8模型已经训练好&#xff09; 具体实现&#xff1a; 在ultralytics\utils\plotting.py里面 CtrlF搜索box_label 再次照片的最后一行输入&#xff1a; # 左上角cv2.putText(self.im, f"({p1[0]}, {p1[1]})", (p1…

计算机毕业设计选题推荐-共享图书管理系统-小程序/App

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…