013_NaN_in_Matlab中的非数与调试方法

Matlab中的非数与调试方法

是什么?

Matlab编程(计算器使用)中经常有个错误给你,这句话里可能包含一个关键词NaN。大部分学生都有过被 NaN 支配的痛苦记忆。

NaN 是 Not a Number 的缩写,表示不是一个数字。在 Matlab 中,NaN 是一个特殊的数值,表示一个无效的或未定义的数值。NaN 通常是由于计算错误或者无效的操作导致的。

我们可以通过以下方式创建一个 NaN

a = NaN;

这个 NaN 和Matlab中其他常量,如 truefalse 一样,居然是个函数,当我们直接不带括号的引用它时,按照前面的函数调用规则,它相当于就是NaN()

既然是个函数,我们就要看看它的函数签名,即它的输入参数和输出参数。我们可以通过以下方式查看:

help NaN
NaN    Not-a-Number.NaN is the IEEE arithmetic representation for Not-a-Number.A NaN is obtained as a result of mathematically undefinedoperations like 0.0/0.0  and inf-inf.NaN('double') is the same as NaN with no inputs.NaN('single') is the single precision representation of NaN.NaN(N) is an N-by-N matrix of NaNs.NaN(M,N) or NaN([M,N]) is an M-by-N matrix of NaNs.NaN(M,N,P,...) or NaN([M,N,P,...]) is an M-by-N-by-P-by-... array of NaNs.NaN(..., CLASSNAME) is an array of NaNs of class specified by the string CLASSNAME. CLASSNAME can be either 'single' or 'double'.NaN(..., 'like', Y) is an array of NaNs with the same data type, sparsity,and complexity (real or complex) as the single or double precision numeric variable Y.Note: The size inputs M, N, and P... should be nonnegative integers. Negative integers are treated as 0.See also inf, isnan, isfinite, isfloat.NaN    非数。NaN 是 IEEE 算术表示的非数。NaN可以通过数学上未定义的操作获得,例如 0.0/0.0 和 inf-inf。NaN('double') 和没有输入的 NaN 是一样的。NaN('single') 是 NaN 的单精度表示。NaN(N) 是一个 N×N 的 NaN 矩阵。NaN(M,N) 或 NaN([M,N]) 是一个 M×N 的 NaN 矩阵。NaN(M,N,P,...) 或 NaN([M,N,P,...]) 是一个 M×N×P×... 的 NaN 数组。NaN(..., CLASSNAME) 是一个由 CLASSNAME 指定的类的 NaN 数组。CLASSNAME 可以是 'single' 或 'double'。NaN(..., 'like', Y) 是一个与单精度或双精度数值变量 Y 相同数据类型、稀疏性和复杂性(实数或复数)的 NaN 数组。注意:大小输入 M、N 和 P... 应该是非负整数。负整数被视为 0。另见 inf, isnan, isfinite, isfloat.

什么样?

NaN 是一个特殊的数值,它的特点是:

  • 任何数值和 NaN 进行运算,结果都是 NaN
    • 向量中包含 NaN,那么这个向量的 sum 结果是 NaN
  • 每一个 NaN 都独一无二
    • 两个 NaN 之间进行比较,结果也是 false
    • NaN和任何东西~= 比较,结果都是 true
    • 任何数值和 NaN 进行大小(不等于除外)比较,结果都是 false
  • 可以通过函数 isnan (R2006a)或者 ismissing (R2013b)来判断一个数值是否是 NaN
  • 可以通过函数 anynan (R2022a) 或者 anymissing (R2022a) 来判断一个数组中是否包含 NaN
  • rmmissing (R2016a)可以用于检测和删除数组中的 NaN
  • fillmissing (R2016b)可以用于填充数组中的 NaN

上面这些函数,在不同的版本中引入,使用时要注意版本兼容性。具体的调用可以通过 help 函数查看,或者采用 doc 函数查看详细的文档。

怎么办?

在编程中,我们应该尽量避免产生 NaN。如果我们的程序中出现了 NaN,那么我们应该检查程序的逻辑,找出产生 NaN 的原因,进一步修复它们或者利用 NaN 作判断。

Matlab提供非常好的调试工具。大概我们调试Matlab程序有两种方式:

  1. 通过对怀疑的变量进行 isnan 判断,找出产生 NaN 的原因,以前我都是这么做的。
  2. 通过 dbstop if naninf 命令,可以在程序中出现 NaN 或者 Inf 时,自动停止程序,方便我们调试。

这个函数dbstop在R2016a之后就有了。当然,有了坦克和大炮,谁还会用长矛呢。

假设我们有个脚本或者函数,

a = zeros(1, 20);b = a ./ a;

在命令行中,我们输入

dbstop if naninf

运行脚本,用编辑器的运行按钮,或者在命令行中输入函数或者脚本名称,Matlab的运行自然会停留在产生NaN的地方。

在这里插入图片描述

这个时候我们就可以逐一检查算式中的变量,找出产生NaN的原因。

结论

  1. NaN 是 Matlab 中的一个特殊数值,表示不是一个数字。
  2. NaN 有一些特殊的性质,我们可以通过函数来判断和处理。
  3. 文中提到的函数,有的是在较新的版本中引入的,使用时要注意版本兼容性。

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

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

相关文章

负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测; 2.单变量时间序列数据集,采用前12个时刻预测未来96个时刻的数据; 3.excel数据方便替换,运行环境matlab20…

R: 支持向量机(Support Vector Machine,简称SVM)

在数据科学和机器学习领域中,支持向量机(Support Vector Machine,简称SVM)是一种强大的监督学习算法,常用于分类和回归分析。它的优点之一是可以适用于复杂的数据集,并且在高维空间中表现良好。在本文中&am…

MindOpt APL向量化建模语法的介绍与应用(2)

前言 在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模…

316_C++_xml文件解析成map,可以放到表格上 + xml、xlsx文件互相解析

xml文件例如&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…

Day:007(2) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy 数据的提取 Scrapy有自己的数据提取机制。它们被称为选择器。我们可以通过使用的选择器re、xpath、css提取数据 提示 不用再安装与引入Xpath,BS4 获得选择器 Response对象获取 正常使用 response.selector.xpath(//span/text()).get() response.selector.css(span::…

开发有哪些常见陷阱?

引言 在当今数字化时代&#xff0c;软件开发已成为推动科技进步和商业发展的重要引擎。然而&#xff0c;软件开发并非一帆风顺&#xff0c;其中蕴藏着许多陷阱和挑战。如何避免这些陷阱&#xff0c;提高软件开发的效率和质量&#xff0c;成为开发者们面临的重要问题 本文将深…

原型模式:复制对象的智能解决方案

在软件开发过程中&#xff0c;对象的创建可能是一个昂贵的操作&#xff0c;特别是当对象的初始化包括从数据库加载数据、进行IO操作或进行复杂计算时。原型模式是一种创建型设计模式&#xff0c;它通过复制现有的实例来创建新的对象实例&#xff0c;从而避免了类初始化时的高成…

单片机方案 发声毛绒小黄鸭

随着科技的不断进步&#xff0c;智能早教已经成为了新时代儿童教育的趋势。智能早教玩具&#xff0c;一款集互动陪伴、启蒙教育、情感培养于一身的高科技产品。它不仅能陪伴孩子成长&#xff0c;还能在游戏中启迪智慧&#xff0c;是家长和孩子的理想选择。 酷得电子方案开发特…

redis 数据迁移到rds2214(TongRDS-2.2.1.3.Load版 by lqw)

​ 文章目录 一.备份redis文件 vi redis.conf &#xff0c;看看有没有这两行设置&#xff0c;有的话改成跟下面的一致&#xff1a; appendonly yes appendfilename “appendonly.aof” 之后连接redis客户端&#xff0c;输入INFO persistence&#xff0c;如图所示即为开启成功…

使用Docker定时备份数据

文章目录 一、Docker镜像制作二、MySQL数据备份三、Minio数据备份四、数据跨服务器传输五、Nginx日志分割六、Docker启动七、Docker备份日志 一、Docker镜像制作 镜像制作目录 mc下载地址 - rsyncd.conf # https://download.samba.org/pub/rsync/rsyncd.conf.5port 873 uid …

远程桌面防火墙是什么?

远程桌面防火墙&#xff0c;是一种针对远程桌面应用的安全防护工具。它可以在保证远程桌面连接的便利性和高效性的对网络连接进行安全性的保护&#xff0c;防止未经授权的访问和潜在的安全风险。 远程桌面防火墙的主要功能是对远程桌面连接进行监控和管理。它通过识别和验证连接…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题2

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题2 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx&#xff1a;liuliu548…

一起学习python——基础篇(18)

上一篇讲述了python中文件夹和文件的检测有无判断、文件夹和文件的创建、文件写入一些内容的方法、文件夹和文件的删除。 这一篇来说一下python的如何读取文件内容。 #文件的路径 testPath"D:/pythonFile/test.txt" #使用open方法&#xff0c;参数为r&#xff1a;表…

C++ 类和对象 上

目录 前言 什么是面向对象&#xff1f;什么是面向过程&#xff1f; 面向过程 面向对象 比较 类 引入 定义 实例化 类的大小 this指针 前言 今天我们来进入C类和对象的学习。相信大家一定听说过C语言是面向过程的语言&#xff0c;而C是面向对象的语言&#xff1f;那么他…

Android 纵向双选日历

这个日历的布局分两部分&#xff0c;一部分是显示星期几的LinearLayout&#xff0c;另外就是一个RecyclerView&#xff0c;负责纵向滚动了。 工具类&#xff1a; implementation com.blankj:utilcode:1.17.3上activity_calendar代码&#xff1a; <?xml version"1.0&…

【CSS面试题】Flex实现九宫格

考察知识&#xff1a; flex布局 水平垂直居中的实现 初始效果 代码关键&#xff1a;给父盒子添加以下属性 flex-wrap: wrap; /* 允许换行 */justify-content: space-around; /* 主轴对齐方式 */align-content: space-around; /* 多行在侧轴上的对齐方式 */<!DOCTYPE html&…

关于阿里云centos系统下宝塔面板部署django/中pip install mysqlclient失败问题的大总结/阿里云使用oss长期访问凭证

python版本3.12.0 项目的版本依赖 问题1 解决方案 sudo vim /etc/profile export MYSQLCLIENT_CFLAGS"-I/usr/include/mysql" export MYSQLCLIENT_LDFLAGS"-L/usr/lib64/mysql" Esc退出编辑模式 &#xff1a;wq退出并且保存 问题二 说是找不到 mysql.h头…

大数据入门之如何利用Phoenix访问Hbase

在大数据的世界里&#xff0c;HBase和Phoenix可谓是一对黄金搭档。HBase以其高效的列式存储和强大的数据扩展能力&#xff0c;成为大数据存储领域的佼佼者&#xff1b;而Phoenix则以其SQL化的操作方式&#xff0c;简化了对HBase的访问过程。今天&#xff0c;就让我们一起看看如…

LC 515.在每个树行中找最大值

515. 在每个树行中找最大值 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3] 提示&#xff1a; 二叉树的节点个数的范围是…

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇8基于stm32的RFID校园门禁系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -----------…