matlab的精度变量,MatLab - 变量精度算术

永远不要假设像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

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

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

相关文章

直流降压的简单方法_量血压的重大误区和简单的降压方法,尽快转告身边人!...

见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故…

php oauth2 和 jwt,jwt-auth: thinkphp 的 jwt (JSON Web Token)身份验证扩展包,支持Swoole...

JWT-AUTHthinkphp的jwt(JSON Web Token)身份验证包。支持Header、Cookie、Param等多种传参方式。包含:验证、验证并且自动刷新等多种中间件。支持Swoole环境要求php > 7.0thinkphp ^5.1.10 || ^6.0.0说明目前支持如下三大类型加密方式:RSA,HASH,DSA。…

hadoop2.8配置_Hadoop2.8.2安装与配置(单机)

解压并移动到/software目录:tar -zxvf hadoop-2.8.2.tar.gzmv hadoop-2.8.2 /software/hadoop在/etc/profile文件添加:export HADOOP_HOME/software/hadoopexport HADOOP_INSTALL$HADOOP_HOMEexport HADOOP_MAPRED_HOME$HADOOP_HOMEexport HADOOP_COMMON…

编译php时的configure,PHP编译configure时常见错误

PHP的安装虽然有时候很简单,可是如果应用一多,我们安装起来就很头痛了!出错最多的就是安装PHP扩展的时候了。其实不管是你是Apache类的应用还是Nginx类的,PHP的安装都不是很简单,虽然网上有很多configure参数&#xff…

matlab热度图确定色标_C++实现类似Matlab的colormap Jet(灰度图生成彩色热度图)

Matlab使用colormap Jet 可以将灰度图像生成彩色的热度图,灰度值越高,色彩偏向暖色调。相反亦然。// ColorMap.h#ifndef COLORMAP_H#define COLORMAP_Hclass colormap{public:static void GroundColorMix(BYTE* color, double x, double min, double max…

php 监听 扫描枪,jquery监听扫码枪获得值

客户一直说 扫码枪要一直获得焦点才能用,用户体验差 ,想做一个 在这个页面 有没有焦点都要获得到值,想了一下 只有用监听的方式了// 写一个监听扫描枪 事件的方法var code ‘‘;var lastTime 0;// 清空临时变量function clearCode() {code …

arcgis标注牵引线_解析ArcGis的标注(三)——标注的放置 与 转注记修改

该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它。写着写着发现ArcGis标注的破事儿好多啊,要想写得自己能看懂着实得费把力气,好想弃坑…

php 上传文件简单实例,php文件上传的简单实例

复制代码 代码如下:if ((($_FILES["file"]["type"] "image/gif")|| ($_FILES["file"]["type"] "image/jpeg")|| ($_FILES["file"]["type"] "image/pjpeg"))&& ($_FILES…

python操作redis集群_python 连接管理作redis集群

python的redis库是不支持集群操作的,推荐库:redis-py-cluster。安装pip3 install redis-py-cluster连接redis集群#!/usr/bin/env python# coding: utf-8from rediscluster import StrictRedisClusterclass RedisCluster(object): # 连接redis集群def __i…

如何将分表汇总到总表_如何把多个Excel表格合并到一起,分表变,总表也自动更新?...

【例】如下图所示,要求把人事部、财务部和销售部3个分表合并到总表中,分表增加或删除人员,总表也会自动更新操作步骤:1、数据-自其他来源-来自MicrosoftQuery。它就是我们今天神秘的主角。2、选取数据源为ExcelFiles*格式&#xf…

dingo php,dingo 配置

Dingo包的大多数配置都预先设置好了,这样你就可以尽快的进入开发模式了,我们也可以参照config/api.php中的env()函数中的内容在.env文件中去设置。当然也可以使用AppServiceProvider中的boot进行设置(这个怎么设置???)…

qt 将int型数据显示在文本框_Qt编写Online judge爬虫

一、前提刚开始接触C/Qt是需要一个项目练练手,当时听说过OJ并且网络不好,就想着把数据获取下来随时使用。后来代码写多了之后听说Python写爬虫更方便,可惜坑已经跳下去了,就一条路走到黑了。这是我代码之路的第一个完整实现完整功…

vim函数跳转 php,求助!! vim-gvim中如何让其显示函数及其参数!!

求助!! vim-gvim中如何让其显示函数及其参数!!(2012-06-05 02:25:34)标签:如何杂谈求助!!vim/gvim中如何让其显示函数及其参数!!用了一段时间的vim,发现在自动补全中发现…

php添加填空,PHP之preg_replace_callback(),将填空题的[[]]替换成______

preg_replace_callback 函数执行一个正则表达式搜索并且使用一个回调进行替换。语法图1这个函数的行为除了可以指定一个 callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。参数说明:$pattern: 要搜索的模式,可…

怎么用php写软件老吴p,11.32 php扩展模块装安

php动态扩展模块添加因为业务需要或者编译php的时候少安装了一个模块,我们现在需要新添加一个模块,那怎么做呢?查看模块/usr/local/php/bin/php -m第一步:去php的安装目录中/ext/目录下查看有没有 你需要安装的扩展模块的包比如&a…

javweb音乐网站_基于javaweb音乐网站设计与实现

基于javaweb音乐网站设计与实现 本科毕业论文(设计)题目:基于JSP的音乐网站的设计与实现姓 名: 学 号: 专 业: 院 系: 指导老师: 职称学位: 讲师/硕士 完成时间: 2015年 …

oracle数据库连接检查,检查Oracle数据库的最大连接

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。[[email protected] sql]# more check_connect_oracle.sh#!/bin/bash#functions: connect oracle server test#author:Tony Wang#modify_date: 2015-06-03.mkdir…

python爬虫进程和线程_python爬虫番外篇(一)进程,线程的初步了解-阿里云开发者社区...

整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故整理此系列番外篇一、进程程序并不能单独和…

ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ

1、ol.layer.Tile及数据源类结构openlayers中,图层(layer)不可缺少的组成部分是数据源(source),天地图是切片的数据服务,对应的图层是ol.layer.Tile,下图是其数据源对应的类结构图,红色部分是重点内容。从图可以看到&a…

linux用户没有创建文件的权限设置密码,Linux学习第五章用户身份与文件权限

一、用户身份与能力Linux系统中一共有三种用户第一种:管理员 root UID 0第二种:系统用户 不需要登录系统 负责单一服务的运行 UID 0-1000第三种:普通用户 日常登录系统操作的用户 UID 1000--uid1000(zhang) gid1000(zhang) groups…