永远不要假设像vpa(sin(pi / 4))这样的数字精确到完全精度,因为MATLAB通常会使用浮点运算来计算vpa调用内的数字,因此只能精确到大约16位数。

但是,它似乎在这里是正确的。例如,我们知道这一点

sin(pi/4) == sqrt(2)/2让我们测试一下结果。我将使用100位数的精度,比较vpa和我自己的HPF工具。

>> vpa(sin(pi/4),100)

ans =

0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864

>> vpa(sqrt(sym(2))/2,100)

ans =

0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864

>> sqrt(hpf(2,100))/2

ans =

0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864

>> sin(hpf('pi',100)/4)

ans =

0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864因此,我的猜测是解析器已将输入识别为符号工具箱可以更准确地计算的内容。正如我之前所说,但要小心。什么是罪(pi / 12)?

>> vpa(sin(pi/12),100)

ans =

0.25881904510252073947640383266843855381011962890625

>> vpa('sin(pi/12)',100)

ans =

0.2588190451025207623488988376240483283490689013199305138140032073150569747488019969223679746942496655

>> vpa(sin(sym('pi')/12),100)

ans =

0.2588190451025207623488988376240483283490689013199305138140032073150569747488019969223679746942496655

>> sin(hpf('pi',100)/12)

ans =

0.2588190451025207623488988376240483283490689013199305138140032073150569747488019969223679746942496655在第一种情况下,解析器没有保存我们。在其他人中,我强迫MATLAB计算正确的值。事实上,一些努力会给我们sin(pi / 12)的价值,如sqrt(2)*(sqrt(3) - 1)/ 4。

>> DefaultNumberOfDigits 100

>> (sqrt(hpf(3)) - 1)*sqrt(hpf(2))/4

ans =

0.2588190451025207623488988376240483283490689013199305138140032073150569747488019969223679746942496655关键是,不要相信解析器在这里保存你。

编辑:作为Amro评论的测试,我恭敬地说MATLAB在这里做了一些有趣的事情。看到vpa能够返回pi的正确的前100位数,即使作为双精度数传递pi也是如此。因为pi(作为一个双精度数)在第16个十进制数字之后是不正确的,所以有一些可疑的事情发生了。

>> vpa(pi,100)

ans =

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

>> vpa('pi',100)

ans =

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

vpa('pi',100) - vpa(pi,100)

ans =

0.0作为对这一事实的测试,让我们看看HPF发现了什么。 HPF实际上采用IEEE 754值,如存储在double中,然后将其转换为HPF编号。

>> hpf(pi,100)

ans =

3.141592653589793115997963468544185161590576171875

>> hpf('pi',100)

ans =

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

>> hpf('pi',100) - hpf(pi,100)

ans =

0.0000000000000001224646799147353177226065932275001058209749445923078164062862089986280348253421170679821480800000000很明显,MATLAB能够将pi识别为不仅仅是传递的双精度值。

EDIT2:

事实上,一些戏剧告诉我这里发生了什么。 VPA是棘手的,而不是解析器。考虑7/13分数。如果我们将它构建为double,那么打印出存储在其完整荣耀中的浮点值,我们认为它并不是真正准确的。这是预期的。

>> sprintf('%.100f',7/13)

ans =

0.53846153846153843591793020095792599022388458251953125000000000000000000000000000000000000000000000007/13是重复的十进制值。这是正确的数字:

>> vpa('7/13',100)

ans =

0.5384615384615384615384615384615384615384615384615384615384615384615384615384615384615384615384615385现在,假设我们尝试创建相同的数字。在这里我将以7/13的速度传递asa double,但我会在底部的十进制数字中出错

>> sprintf('%.100f',0.538461538461538461777777777)

ans =

0.5384615384615384359179302009579259902238845825195312500000000000000000000000000000000000000000000000在这里,我们看到vpa捕获并纠正了我所做的'错误',认识到我传入的内容实际上与我在7/13中传递时的值相同。

>> vpa(0.538461538461538461777777777,100)

ans =

0.5384615384615384615384615384615384615384615384615384615384615384615384615384615384615384615384615385当然,如果我将值作为字符串传递,那么vpa就会出错。

>> vpa('0.538461538461538461777777777',100)

ans =

0.538461538461538461777777777这解释了为什么vpa能够捕获并正确计算vpa(sin(pi / 4),100),达到所要求的全部精度。 sin(pi / 4)被计算为double,但是vpa将其视为与sqrt(2)/ 2的双精度版本相同的数字。

当然要小心。例如,vpa不够智能,无法捕捉pi的这种简单转变。

>> vpa(pi + 1,100)

ans =

4.141592653589793115997963468544185161590576171875

>> vpa(pi,100)

ans =

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

matlab的精度变量,MatLab - 变量精度算术相关推荐

  1. matlab 01变量,MATLAB变量

    序言 在**Matlab**中,变量名由A~Z.a~z.数字和下划线组成,且变量的第一个字符必须是字母. 尽管变量名可以是任意长度, 但是Matlab只识别名称的前N=namelengthmax个字符 ...

  2. matlab矩阵运算带变量,MATLAB矩阵及其数值运算

    matlab矩阵及其数值运算 变量和数据操作 变量与赋值 1.变量命名 在MATLAB6.5中,变量名是以字母开头,后接字母.数字或下划线的字符序列,最多63个字符.在MATLAB中,变量名区分字母的 ...

  3. matlab变量区表示函数,MATLAB中的工作区,变量和函数

    本文概述 工作空间 工作区包含我们在MATLAB中工作时创建的所有变量. 每当我们为变量分配值时, 它都会自动在工作空间中获取空间. 关闭环境后, 工作空间变量将消失, 因此请将这些变量保存在文件中以 ...

  4. 【MATLAB】变量 ( 特殊变量和常量 | 关键字 | 调用优先级 | 数值显示格式 )

    文章目录 一.特殊变量和常量 二.关键字 三.matlab 中的调用优先级 四.数值显示格式 一.特殊变量和常量 ans 变量 : answer 缩写 , 如果计算时没有指定接收变量 , matlab ...

  5. 【MATLAB】变量 ( 变量引入 | 变量类型 )

    文章目录 一.变量引入 ( ans 默认变量 ) 二.变量类型 一.变量引入 ( ans 默认变量 ) 使用 matlab 代码编写如下公式时 , 公式层级很多 , 很复杂 , 需要很多括号进行优先级 ...

  6. matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令

    Matlab 查看内存中的变量,清空屏幕等命令 该文章讲述了Matlab 查看内存中的变量,清空屏幕等命令. 1. 查看内存中的变量 who whos 2. clc 清空屏幕 3. clf 清空当前的 ...

  7. matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12

    MATLAB 与科学计算期末复习题题库(第一部分) 一.填空 1.MATLAB 的主界面是一个高度集成的工作环境,有四个不同职责分工的窗口,分别 为 . . .和 窗口. 2.MATLAB 的值,应在 ...

  8. matlab自动变量名,matlab中如何自动给变量命名?

    在大量数据处理中,如果单独给变量命名,无疑是一项简单.费时.重复性工作.matlab通过eval函数提供了自动命名变量的功能,见下面的例子: %%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...

  9. MATLAB图像处理—imfindcircles的输出变量含义

    MATLAB图像处理-imfindcircles的输出变量含义 1.centers - Coordinates of circle centers(圆心坐标) centers输出的是两列矩阵(two- ...

  10. 【Matlab】系统预定义变量——元胞数组与结构体

    [Matlab]系统预定义变量--元胞数组与结构体 往期回顾 前言 正文 一.元胞数组 1. 元胞数组操作函数 2. 代码实例 二.结构体 1. 结构体操作函数 2. 代码实例 总结 参考文献 往期回 ...

最新文章

  1. 网络分层模型OSI和TCP/IP四层模型
  2. ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!
  3. Linux C 实现一个简单的线程池
  4. mouseevent tips
  5. linux搭建mcpe服务器_Ubuntu Linux下搭建Minecraft我的世界服务器
  6. (转) Hadoop1.2.1安装
  7. 我一个月2000多元钱退休工资,可以完成自驾游全国的心愿吗?
  8. linux系统清理内存,如何清除linux的内存缓存,缓冲和交换空间
  9. 深度优先搜索 详解(C++)
  10. 龙蜥社区8问,你关心的问题都在这里
  11. 【数据预测】基于matlab BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】
  12. 虚幻引擎2D游戏开发教程系列
  13. bzoj2821 作诗(Poetize)
  14. 牛客面经 | BAT、美团、360、滴滴新锐……2W字干货,这不仅仅是一篇面经
  15. bat实现黑客流星雨BAT_bat黑客帝国
  16. Eclipse同屏显示两个代码编辑窗口
  17. 一天上手Aurora 8B/10B IP核(4)----从Streaming接口的官方例程学起
  18. python byte和str转换
  19. htmlUnit的读取js渲染的页面
  20. allegro标注尺寸设置_Allegro中尺寸标注文字的设置

热门文章

  1. php分页技术的作用,分页原理技术细节剖析(php+mysql)实例
  2. 以图搜图 图像匹配_图像匹配,基于深度学习DenseNet实现以图搜图功能
  3. 训练数据的分布对F-measure, recall 和 precision的影响
  4. Android之记住密码与自动登陆实现
  5. Effective Java~3. 私有Constructor 或Enum 强化单例
  6. Java加密与解密的艺术~安全协议~模型分析
  7. 华为5g汽车鸿蒙,网传华为携手极狐造车新图片,搭载5G天线+鸿蒙OS!
  8. java调用三汇语音卡,三汇语音卡
  9. java中使用lua操作redis
  10. 现代软件工程系列 学生的精彩文章 (6) 项目总结