-1

我想将数据(双精度,15 个小数点)转换为另一种类型的数据(四精度,34 个小数点)。所以,我使用vpa了这样的功能:

data = sin(2*pi*frequency*time);
quad_data = vpa(data,34);

但是,结果的类型是sym, not double。当我检查sym类型数据的每个单元格时,1x1 sym在每个单元格中都创建了。我尝试fft使用 'quad_data' 来使用函数,但它不起作用。有什么解决方案可以将双精度类型的小数点从 15 更改为 34?

4

2 回答 2

3

MATLAB 当前支持的唯一数值浮点类型是 double、single 和 half。可以通过 Symbolix 工具箱(例如,vpa)或第 3 方代码(例如,John D'Errico 的 FEX 提交的高精度浮动 HPF 类)来实现扩展精度类型。但即便如此,通常也只支持浮点函数的一个子集。如果您尝试使用的函数不支持变量类型,那么您必须提供自己的函数。

此外,您一开始并没有正确构建 vpa 对象。通常,您会先将操作数转换为 vpa,然后对它们进行算术运算。像处理数据一样首先以双精度进行算术运算,然后转换为扩展精度 vpa,只会将垃圾添加到值中。例如,首先设置数字,然后使用 vpa('pi') 将 pi 的完整扩展精度版本作为 vpa 变量。

于 2021-02-10T21:18:34.317 回答
1

为此目的,有一个商业3 rd方工具箱,称为Multiprecision Computing Toolbox for MATLAB

该工具实现了您期望从double输入中获得的许多数学运算,并且根据网站上的基准,它比 vpa 快得多。

披露:我与这个工具的创建者没有任何关系,但是我可以说我们在实验室的一个项目中使用这个工具有很好的经验。


我可以给出的另一个建议是在 MATLAB 提供接口(例如,C、python、java)的另一种语言\环境中进行高精度算术,并且应该实现 quad 数据类型。

于 2021-02-11T05:18:36.180 回答