013_NaN_in_Matlab中的非数与调试方法

news2024/9/23 17:17:18

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 undefined
    operations 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.coloradmin.cn/o/1596344.html

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

相关文章

00_STM32CubeMX如何新建一个工程

STM32CubeMX如何新建一个工程 STM32CubeMX如何新建一个工程以使用PA1口点亮LED为例子 STM32CubeMX如何新建一个工程 以使用PA1口点亮LED为例子 1.创建一个新工程 2.搜索芯片,然后双击 3.点击PA1引脚,设置为输出口 4.文件一定要保存到英文路径&#xff…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)(latent space,一般为高斯分布)到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型,它通过学习一个可逆且易于计算的转换来将复杂的概…

Linux多进程开发2 - 进程间通信

1、进程间通信的概念 进程是一个独立的资源分配单元,不同进程之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。但是,进程不是孤立的,不同的进程需要进行信息的交换和状态的传递等&…

【Datawhale LLM学习笔记】一、什么是大型语言模型(LLM)

文章目录 1. 什么是大模型2. 检索增强生成 RAG一、什么是 RAG二、RAG 的工作流程 3. langChain介绍一、什么是 LangChain二、LangChain 的核心组件 4. 开发 LLM 应用的整体流程一、何为大模型开发二、大模型开发的一般流程三、搭建 LLM 项目的流程简析(以知识库助手…

明日周刊-第6期

最近一周杭州的天气起起伏伏,下雨就凉,不下雨就热。但是夏天的感觉确实是越来越浓烈了,又是一年夏,在这个夏天大家都有什么新的计划呢。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、我国自主研发科技壮举震惊全球航天界…

SpringBoot删除菜品模块开发(SpringMVC分割参数、事务管理、异常处理、批量删除)

需求分析与设计 一:产品原型 在菜品列表页面,每个菜品后面对应的操作分别为修改、删除、停售,可通过删除功能完成对菜品及相关的数据进行删除。 删除菜品原型: 业务规则: 可以一次删除一个菜品,也可以批…

Zookeeper中的节点类型和实现持久化的两种方式

进入zookeeper的bin目录,执行./zkServer.sh start ../conf/zoo.cfg启动! Zookeeper内部的数据模型 类似于数据结构中的树,同时也很像文件系统的目录, 节点的类型 持久节点:create /znode 创建出的节点&#xff0c…

如何在Linux系统部署Tale并实现无公网IP远程管理内网博客网站

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale,Tale…

一本免费开源的电子书籍!这个 71.8k star 的项目,让你轻轻松松学会算法【文末有福利】

话说作为一名程序员,肯定都少不了在准备面试的时候刷 LeetCode 的算法题吧。虽然面试考察的算法题在工作中用到的非常少,但是确实是能让我们对常用的数据结构有更深刻的理解,以及对思维逻辑有很大的提升。不过枯燥的刷题可能让新手无从下手&a…

C++入门:类与对象(1)

本篇作为学习类与对象后的一些记录与感想,不适用于第一次接触类和对象的朋友。 目录 1.面向过程和面向对象 2.类 2.1类的基础知识 2.2 类中的访问限定符 2.3类中的函数声明定义分离(如何在不同的文件中实现同一个类) 2.4类的封装 2.5类…

Python+selenium的web自动化之元素的常用操作详解

前言 今天呢,笔者想和大家来聊聊pythonselenium的web自动化之元素的常用操作,废话不多说直接进入主题吧 一、常用操作 关键代码: 点击:ele.click()输入内容:ele.send_keys("内容")清空内容:el…

conda配置多版本python

安装conda 以下任选下载 Anaconda Miniconda 配置conda环境变量 比如windows,在配置我的电脑中的环境变量,在系统变量的Path中新增下面内容 需要根据实际目录进行更改 D:\soft\miniconda3 D:\soft\miniconda3\Scripts D:\soft\miniconda3\Library\bi…

嵌入式驱动学习第七周——GPIO子系统

前言 GPIO子系统是用来统一便捷地访问实现输入输出中断等效果。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦&#xff0…

云卓LS-01喊话器说明书-新版中文

一: 概述 LS-01 无人机喊话器适用于搭载无人机进行交通管制、现场指挥、应急救援、人群疏导、防疫宣传、景区安防、鱼塘巡视、林业防控等场景。产品具有喊话、警报、播放多媒体文件等多种功能。喊话器外壳采用尼龙加纤材质,具有抗、抗震、轻便灵活、外观新颖、质量稳…

NXopen C++ 装配体部件遍历 体积质量计算 NewMassProperties

打开装配体&#xff0c;逐一遍历部件测量体积&#xff0c;最后计算出装配体的总的体积和质量 NX1953VS2019 //1、模板文件添加头文件* #include <NXOpen/UnitCollection.hxx> #include <NXOpen/ScCollectorCollection.hxx> #include <NXOpen/Unit.hxx> #inc…

github 双因素验证

环境 华为手机 下载app 华为应用市场下载 输入对应验证码&#xff0c;然后一路下一步即可 联系方式 手机&#xff1a;13822161573 微信&#xff1a;txsolarterms QQ&#xff1a;419396409

实验一:配置IP地址

实验环境 主机A和主机B通过一根网线相连 需求描述 为两台主机配置IP地址&#xff0c;验证IP地址是否生效&#xff0c;验证同一网段的两台主机可以互通&#xff0c;不同网段的主机不能直接互通 一.实验拓扑 二.推荐步骤 1.为两台主机配置P地址&#xff0c;主机A为192.168.1.…

多无人机集群协同避障

matlab2020a正常运行 场景1规划结果 场景2规划结果 场景3规划结果 代码地址&#xff1a; 多无人机集群协同避障效果&#xff08;5架&#xff09;资源-CSDN文库

解决Ant Design Vue使用Modal对话框无法关闭的问题,本地可以关闭对话框但是打包后不能关闭对话框的问题。

首先说为什么会导致这个问题&#xff1a;因为现在vue官方的最新版本是3.4.x&#xff0c;可能是vue最新版本的部分代码与Ant Design不兼容导致的。 解决&#xff1a;所以将vue版本固定在vue3.4以下&#xff0c;就可以了。 1.删除node_modules和package-lock.json&#xff08;如…

8.基础乐理-纯八度

一个音听上去是高还是低&#xff0c;是由音的振动频率决定的&#xff0c;也就是每一秒多少 Hz 所决定的&#xff0c;Hz数越小音听上去就越低&#xff0c;Hz数越大音听上去就越大&#xff0c;钢琴从左到右&#xff0c;Hz数 在逐渐增大&#xff0c;当两个音的振动频率数越接近简单…