我需要在 Matlab 中存储一些非常小的正数和负数。一种方法是单独存储它们的符号以及它们大小的 log10,这让我可以有效地以双精度存储小至 10^(-
realmax
)=10^(-10^308) 的数字。
但是有没有一种方法可以使用Matlab的
sym
和vpa
来存储这么小的数字,并将大小和符号放在一起,而不是分开,以便稍后我可以提取它们的符号和它们的大小,即它们的绝对值的 log10,双精度?
我尝试了类似
x=sym('-10^(-1e308)')
的操作,但这会产生错误。
您得到的错误非常明确,并告诉您尝试使用
str2sym
:
使用 sym>convertChar 时出错(第 1557 行)
第一个参数中的字符向量和字符串只能指定变量或数字。 要计算表示符号表达式的字符向量和字符串,请使用“str2sym”。
这样做会得到
0
的输出,因此我们应该留意 Cris 的 评论并使用 10^
代替 1e
,以及 str2sym
:
x=str2sym('-10^(-10^308)')
这给了我们一个不同的错误:
使用 str2sym 时出错(第 66 行)
无法将字符串转换为符号表达式: 上下文中的整数太大。
这已经已经在其他地方被询问过
引用链接帖子中 MathWorks 工作人员的话:
此错误意味着计算正在尝试计算指数大于 2^32 的整数^整数之类的内容。生成的整数将占用数 GB 内存并需要很长时间来计算 - 并且对于几乎所有应用程序来说几乎毫无用处。所以符号引擎完全拒绝开始计算它。