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.mzph.cn/news/812337.shtml

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

相关文章

【SVN】clean up报错:Cleanup failed to process the following paths 解决方法

报错来源:代码更新有一个文件既不能接受自己的也不能接受别人的,只能取消,再提交提醒clean up,随后报标题错误。 解决方法:参考https://www.cnblogs.com/pinpin/p/11395438.html 注:如果clean up的时候有…

基于ssm项目校园快递平台系统

采用技术 基于SpringBoot框架实现的web的智慧社区系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 订单管理 快递管理 公告管理 公告类…

基于YOLOv5s的电动车入梯识别系统(数据集+权重+登录界面+GUI界面+mysql)

本人训练的yolov5s模型,准确率在98.6%左右,可准确完成电梯内检测电动车任务,并搭配了GUI检测界面,支持权重选择、图片检测、视频检测、摄像头检测、识别结果拍照和在线标注数据集等功能。 共有4000张左右图片,全部为电…

机器人瓶胚检测工作站(H3U脉冲轴控制)

1、变量定义 2、程序监控1 2、 程序监控2 3、程序监控3 机器人输送料和机构的动作安全尤为重要,下面我们讨论下安全联锁控制逻辑

基于STM32F103单片机的时间同步项目

一、前言 本项目为前一个时间同步项目的更迭版本,由于之前的G031开发板没有外部晶振,从机守时能力几乎没有,5秒以上不同步从机时间就开始飞了。在考虑成本选型后,选择了带有外部有缘晶振的STM32F103C8T6最小单片机,来作…

解决mac本git安装后找不到命令的问题

不熟悉mac配置,折腾了半天,记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包: 安装时提示: 这里的解决办法是按住control键再打开文件安装。 安装完…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是,蓝色背景的画面,需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的,需要新的部件与之般配。 首先新建一个QDoubleSpinBox,并定义其背景色和边框: QDoubleSpinBox { color: white; border:1px…

基于无线物联网的智能配电监控系统设计应用

摘要:阐述基于电力物联网的智能配电监控系统的特点,探讨物联网结构及其关键技术,电力物联网下的智能配电监控系统设计,包括整体结构设计、硬件和软件系统设计。 安科瑞薛瑶瑶18701709087 关键词:电力物联网&#xff…

【好用】推荐10套后端管理系统前端模板

后台管理系统前端模板是开发者在构建后台管理系统时使用的一种工具,它提供了预先设计好的界面和组件,以帮助开发者快速搭建出功能完善、用户体验良好的管理系统。以下是V哥整理的10款流行的后台管理系统前端模板,它们基于不同的技术栈和设计理…

zookeeper分布式应用程序协调服务

一、zookeeper基本介绍 1.1 zookeeper的概念 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、…

[Python图像识别] 五十二.水书图像识别 (2)基于机器学习的濒危水书古文字识别研究

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。目前我进入第二阶段Python图像识别,该部分主要以目标检测、图像…

CVPR 2024 | Retrieval-Augmented Open-Vocabulary Object Detection

CVPR 2024 - Retrieval-Augmented Open-Vocabulary Object Detection 论文:https://arxiv.org/abs/2404.05687代码:https://github.com/mlvlab/RALF原始文档:https://github.com/lartpang/blog/issues/13 本文提出了一种新的开放词汇目标检…

去除pycharm运行pytest的默认参数--no-header --no-summary -q

进入pycharm设置(Settings),找到高级设置(Advanced Settings)—>Python–>Pytest:不添加"–no-header --no-summary -q"(Pytest:do not add “–no-header --no-summary -q”)

2024年妈妈杯数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成,图 ’ 是一个简化的物流 网络示意图。其中,分拣中心作为网络的中间环节,需要将包裹按照不同 流向进行分拣并发往下一个场地,最终使包裹…

Android中基于DWARF的stack unwind实现原理

一、简介 在软件开发中,unwind stack(栈回溯 或 调用栈展开)是调试和异常处理中至关重要的一环,通过理解其实现原理,可以更好地理解程序的执行流程,更有效地进行调试和错误排查。 本文主要介绍 AArch64 架构下的两种最典型的栈回溯…

RabbitMQ的介绍

为什么使用 MQ? 流量削峰和缓冲 如果订单系统最多能处理一万次订单,这个处理能力在足够应付正常时段的下单,但是在高峰期,可能会有两万次下单操作,订单系统只能处理一万次下单操作,剩下的一万次被阻塞。我们…

.NET JWT入坑

前言 JWT (JSON Web Token) 是一种安全传输信息的开放标准,由Header、Payload和Signature三部分组成。它主要用于身份验证、信息交换和授权。JWT可验证用户身份,确保访问权限,实现单点登录,并在客户端和服务器之间安全地交换信息…

SQLite 在Android安装与定制方案(十七)

返回:SQLite—系列文章目录 上一篇:SQLite超详细的编译时选项(十六) 下一篇:SQLite Android 绑定(十八) 安装 有三种方法可以将 SQLite Android 绑定添加到应用程序: 1、通过…

C++的stack和queue类(三):适配所有容器的反向迭代器

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类: 单向:forward_list双向:list随机:vector / deque 迭代器按功能分类: 正向反向const list的反向迭代器…