Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用matlab做高精度计算?【第三辑】(完)

如何用matlab做高精度计算?【第三辑】(完)

作者头像
巴山学长
发布于 2022-06-23 06:54:14
发布于 2022-06-23 06:54:14
1.7K00
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:0
代码可运行

高精度计算是一种程序设计的算法。由于中央处理器的字长限制,如32位CPU中一个整数最大只能取值4,294,967,295(=2^32-1),因此在超范围数值计算中,往往要采用模拟手段。通常使用分离字符的方法来处理数字数组。 维基百科【高精度计算】

辑中,给大家介绍了如何使用matlab自带工具箱以及大神John D'Errico开发的工具箱实现高精度计算。本辑作为用matlab做高精度计算的压轴辑,将给大家介绍一款效率远超前面两辑中所介绍的工具箱的高精度计算神器 —— Multiprecision Computing Toolbox for MATLAB (AdvanpixMCT)

正式开始之前先通过官方的测试对比表来看看AdvanpixMCT工具相较于自带VPA、Maple以及Mathematica效率:

(截自www.advanpix.com)

(截自www.advanpix.com)

从上面两张表不难看出,无论是矩阵计算还是常规计算,AdvanpixMCT都力压另外三者,计算效率可以说是远远超越matlab的VPA以及Maple,大幅领先Mathematica,我想这也是为什么AdvanpixMCT会成付费工具箱的原因。

AdvanpixMCT提供的计算支持涵盖如下领域:

  • 实数和复数、全矩阵和稀疏矩阵、多维数组
  • 初等和特殊数学函数
  • 线性方程组的求解器(包括直接和迭代稀疏求解器)
  • 矩阵分析函数和因式分解
  • 特征值和特征向量,包括广义和大规模问题。
  • 奇异值分解
  • 非线性方程组的求解器(使用Levenberg-Marquardt和其他信任区域方法进行fsolve)
  • 数值积分(包括自适应quadgk和全套高斯正交)
  • 优化和多项式
  • 常微分方程求解器
  • 数据分析和傅里叶变换
  • 数论函数

前两辑中关于如何定义和使用高精度计算工具箱已经讲得非常多了,AdvanpixMCT的使用跟它们并无太多差异。在安装好免费7天试用版后,可以通过以下代码块中示例代码进行测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>> mp.Digits(34);                   % Setup default precision to 34 decimal digits (quadruple).
>> format longG                     % Toolbox shows all digits in case of 'long' formats.
% Simple expressions evaluation in quadruple precision:
>> x = mp('pi/4')                          
x = 
    0.7853981633974483096156608458198757
 
>> y = mp('sqrt(2)/2')
y = 
    0.707106781186547524400844362104849
 
>> A = repmat(x,10,10);  % Create mp-matrix by scalar replication.
>> norm(y-cos(A))        % Calculations are done with 34 digits precision.
ans = 
    9.629649721936179265279889712924637e-35
 
% Assemble matrix row by row:
% (Butcher tableau for Gauss-Legendre method: https://goo.gl/izuFWg)
>> a1 = mp('[ 5/36              2/9-sqrt(15)/15   5/36-sqrt(15)/30 ]');
>> a2 = mp('[ 5/36+sqrt(15)/24  2/9               5/36-sqrt(15)/24 ]');
>> a3 = mp('[ 5/36+sqrt(15)/30  2/9+sqrt(15)/15   5/36             ]');
>> a = [a1;a2;a3];                  % Concatenate rows into final matrix 
 
% Create mp-matrices by conversion from double
>> A = mp(rand(5));
>> B = mp(eye(5));
>> [V,D] = eig(A,B);
>> norm(A*V - B*V*D,1)/(norm(A,1) * norm(B,1))
ans = 
    8.1433805952291741154581605524001229e-34
 
% Create sparse matrix with accumulation using triplets:
>> i = [6 6 6 5 10 10 9 9]';                      
>> j = [1 1 1 2 3 3 10 10]';
>> v = mp('[100 202 173 305 410 550 323 121]')';  % Prepare vector of nonzeros
>> S = sparse(i,j,v)                              % Form quadruple precision sparse matrix
S =
    (6,1)      475
    (5,2)      305
    (10,3)     960
    (9,10)     444

高精度计算真的有那么重要吗?在某些情况下,还非得使用高精度计算才好使,比如处理病态特征值问题,目前唯一可靠的办法就是通过扩展计算精度来的达到较准确的计算。下面通过AdvanpixMCT提供的案例一起来看看精度对处理病态特征值问题到底又多重要,这里选用特征值敏感的Grcar矩阵来作为演示。Grcar矩阵是只含有-1,0,1三种元素的特征矩阵,在matlab中可以通过调用galleray函数实现Grcar矩阵的生成,如8*8的Grcar矩阵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gallery('grcar',8)
ans =
     1     1     1     1     0     0     0     0
    -1     1     1     1     1     0     0     0
     0    -1     1     1     1     1     0     0
     0     0    -1     1     1     1     1     0
     0     0     0    -1     1     1     1     1
     0     0     0     0    -1     1     1     1
     0     0     0     0     0    -1     1     1
     0     0     0     0     0     0    -1     1

理论表明,Grcar矩阵与其转置矩阵应该具有相同的特征值。下面就通过简单的代码来看看什么叫差之毫厘、谬以千里。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% MATLAB浮点数精度
A = -gallery('grcar',150);
figure('Color','w');
plot(eig(A),'k.'), hold on, axis equal
plot(eig(A'),'ro')
 
% MATLAB VPA高精度计算(34位精度)
digits(34); 
A = vpa(-gallery('grcar',150));
eA = eig(A);
cA = eig(A');
figure('Color','w');
plot(eA,'k.'), hold on, axis equal
plot(cA,'ro')

(a) 浮点数计算结果

(b) VPA高精度计算结果

图(a)、(b)中,黑色点是150*150大小Grcar矩阵特征值图,红色是其转置矩阵特征值图。尽管Grcar矩阵的条件数cond(A) = cond(A') = 3.6106不高,但是使用双精度浮点数计算依然导致了极大的误差产生。

基本的介绍到此就接近尾声了,感兴趣的伙伴可以自己根据帮助文档研究更多应用场景。

AdvanpixMCT作为强大MATLAB高精度计算工具箱,其售价也不算便宜,学术单用户版售价249美元,而企业单用户版售价996美元。对于学生用户,可通过发送邮件获取专属的5折优惠。即便五折,换成人民币也是830多元左右。本来也是想入手的,但是想想还是有点舍不得,800元都可以买Endnote 20版的个人版授权了(PS:咱已入坑)。AdvanpixMCT采用的是VMProtect强加密方法以及一些特殊的文件关联方式,安装之后如超过7天试用期,即便卸载之后重新安装依然无法再次使用,除非重装系统。

不过咱也想到一种笨笨的办法,那就通过虚拟机快照的方式来实现。首先,在虚拟机中安装好MATLAB并关机,再者创建虚拟机快照,之后再开机,然后安装AdvanpixMCT,使用期结束后,使用快照将虚拟机系统还原,然后再次安装AdvanpixMCT,又可以试用7天,如此循环往复,直至千秋万代。温馨提示:AdvanpixMCT试用版目前是没有任何功能限制的,即全部功能都是能够试用

参考资料:www.advanpix.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
如何用matlab做高精度计算?【第一辑】
对于跟咱一样的普通使用者而言,往往并不关心如何去实现高精度计算,更不会去研究相应的算法。咱这里讲的高精度计算也指的是计算过程中保持数据的精度不丢失。因为内容较多,计划分成三辑进行分享。
巴山学长
2022/06/23
2.2K0
如何用matlab做高精度计算?【第一辑】
如何用matlab做高精度计算?【第二辑】
在上一辑中,给大家介绍了如何使用matlab自带工具箱实现高精度计算(详见:如何用matlab做高精度计算?【第一辑】)。本期给大家带来两款来自File Exchange源代码共享资源库的宝贝,它们都是出自大神John D'Errico之手。前者是专门用于处理超大值整数运算的 —— Variable Precision Integer Arithmetic,对应数据类型为vpi,后者是用于处理浮点数计算的 —— HPF (a big decimal class),对应数据类型为hpf。
巴山学长
2022/06/23
1.3K0
如何用matlab做高精度计算?【第二辑】
高精度数学计算的瑞士军刀,mpmath库详解与应用示例
hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。
一点sir
2024/05/09
4150
高精度数学计算的瑞士军刀,mpmath库详解与应用示例
优化方法,通过MATLAB提升复杂数学模型的计算精度
总之,通过选择合适的数值计算方法、使用高级的数值计算函数和工具箱、增加计算的精度、控制计算误差以及优化算法参数调整等方法,可以提升MATLAB中复杂数学模型优化问题的计算精度。
一凡sir
2023/08/09
1.3K0
Matlab 使用经验分享(常用函数介绍;矩阵常见计算)
大家好!最近有很多朋友询问我关于 Matlab 的使用,于是我决定写一篇博客来分享一下我的经验。对于数学和编程爱好者来说,Matlab 是一个非常有用的工具。我自己在数学实验和数学建模竞赛中也经常使用它。那么,为什么 Matlab 这么受欢迎呢?
命运之光
2024/03/20
3800
Matlab 使用经验分享(常用函数介绍;矩阵常见计算)
常见向量范数和矩阵范数及其MATLAB实现
,Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,matlab调用函数norm(x, 2)。
狼啸风云
2019/01/28
8.1K0
Matlab系列之符号运算(上)(祝大家双节快乐~)
看到文章的名字,可能很多人都没懂意思,如果叫它的另一个名字:代数运算,或许你就懂了;与正常的数值计算对数值处理有点不一样,符号运算处理的是符号;符号除了可以代表数以外,还可以代表多项式、函数、数学结构等等,MATLAB的符号数学工具箱(Symbolic Math Toolbox简称sym)具有丰富的内容,工具箱中符号表达式的计算都是在Maple内核下运行。Maple是一款数学软件,具体我也没了解过,反正符号运算功能很强就对了
狂人V
2020/10/10
2.5K0
Matlab系列之符号运算(上)(祝大家双节快乐~)
MATLAB命令大全+注释小结
一、常用对象操作:除了一般windows窗口的常用功能键外。 1、!dir 可以查看当前工作目录的文件。   !dir& 可以在dos状态下查看。 2、who  可以查看当前工作空间变量名,    whos 可以查看变量名细节。 3、功能键: 功能键             快捷键           说明 方向上键           Ctrl+P          返回前一行输入 方向下键           Ctrl+N          返回下一行输入 方向左键           Ctrl+B  
Angel_Kitty
2018/04/09
2.5K0
matlab命令,应该很全了!「建议收藏」
1、!dir 可以查看当前工作目录的文件。 !dir& 可以在dos状态下查看。
全栈程序员站长
2022/11/10
7.2K0
商业数学分析软件Matlab最新中文版,Matlab分析软件安装教程下载
MATLAB是一款非常强大的科学计算软件,它可以帮助用户进行数据分析、可视化、建模和仿真等工作。无论是学术界还是工业界,MATLAB都是非常受欢迎的工具之一。
用户10436734
2023/03/20
1K0
商业数学分析软件Matlab最新中文版,Matlab分析软件安装教程下载
从零开始学算法:高精度计算
前言:由于计算机运算是有模运算,数据范围的表示有一定限制,如整型int(C++中int 与long相同)表达范围是(-2^31~2^31-1),unsigned long(无符号整数)是(0~2^32-1),都约为几十亿.如果采用实数型,则能保存最大的double只能提供15~16位的有效数字,即只能精确表达数百万亿的数.因此,在计算位数超过十几位的数时,不能采用现有类型,只能自己编程计算. 高精度计算通用方法:高精度计算时一般用一个数组来存储一个数,数组的一个元素对应于数的一位(当然,在以后的学习中为了加
Angel_Kitty
2018/04/08
1.3K0
朝花夕拾之Matlab矩阵表示
MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。
glm233
2020/09/28
7300
朝花夕拾之Matlab矩阵表示
MATLAB在数据分析中的应用:从统计推断到机器学习建模
MATLAB作为一种强大的计算工具,广泛应用于数据分析、统计计算与建模。本文将介绍如何使用MATLAB进行基本的统计分析与数据建模,重点讲解常用的统计方法、数据处理技巧,以及如何在MATLAB中构建简单的回归模型和进行假设检验。文章还将包含一些代码实例,帮助读者更好地理解与应用这些技术。
一键难忘
2025/02/08
3900
PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
MATLAB一向是理工科学生的必备神器,但随着中美贸易冲突的一再升级,禁售与禁用的阴云也持续笼罩在高等学院的头顶。也许我们都应当考虑更多的途径,来辅助我们的学习和研究工作。 虽然PYTHON和众多模块也属于美国技术的范围,但开源软件的自由度毕竟不是商业软件可比拟的。
俺踏月色而来
2020/08/19
5.6K0
【实验楼-Python 科学计算】SciPy - 科学计算库(下)
使用 eigvals 计算矩阵的特征值,使用 eig 同时计算矩阵的特征值与特征向量:
Ai学习的老章
2019/04/10
9630
【实验楼-Python 科学计算】SciPy - 科学计算库(下)
MATLAB软件怎么下载?科学计算工具MATLAB 2022中文版下载安装
MATLAB是一款广泛用于科学计算和工程领域的软件,其具有强大的数值分析和图形处理能力,在各个领域都得到了广泛应用。而MATLAB软件的独特之处在于其语法简单易学,可以很方便地进行算法设计和仿真,因此备受学术圈和工业界的青睐。本文将从MATLAB的基本操作流程、特色功能、高级操作、常用工具箱和应用案例五个方面进行详细的讲解。
用户10436734
2023/04/17
5070
numpy线性代数基础 - Python和MATLAB矩阵处理的不同
http://blog.csdn.net/pipisorry/article/details/39087583
用户7886150
2021/01/03
1.7K0
Matlab学习
此 MATLAB 函数 清除命令行窗口中的所有文本,让屏幕变得干净。运行 clc
裴来凡
2022/05/29
1.4K0
Matlab学习
Matlab矩阵基本操作(定义,运算)
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
全栈程序员站长
2022/07/31
3K0
高等应用数学问题MATLAB求解.第一,二章
这里说了,就是装maple的锅,估计是32位的Maple替换了原本64位matlab自带的maple库,我还能遇到这种事情???
云深无际
2021/09/14
9810
高等应用数学问题MATLAB求解.第一,二章
相关推荐
如何用matlab做高精度计算?【第一辑】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验