码迷,mamicode.com
首页 > 其他好文 > 详细

把双精度复数转换为有理数形式的实部和虚部

时间:2016-04-22 19:40:07      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

Mathematica中涉及到下面的几个函数:

RealDigits
把小数表示成各个位数及其十进制指数的形式(但丢失符号位)

FromDigits
RealDigits的结果,还原这个数,但表示为有理数形式(无法恢复丢失的符号位信息)

Sign
考虑到符号的丢失,需要通过Sign函数获取符号,然后相乘。

这些主要对实数操作,对复数操作的时候,还需要用ImRe函数提取出虚部和实部之后分别处理;然后把实部和虚部乘以虚数单位相加得到转换并复原的复数。

对于向量和矩阵操作的时候,可能用到Map, Apply之类的命令(函数)。

举个例子可能更加生动具有可操作性。比如,这个mat二进制数据格式的文件(如果这个链接失效了,用户可以自己用随机数发生器生成一些数据作为练习之用),包含了 18×18 的复数矩阵 A18×1 的实向量 b

如何把它们都变成有理数表示的形式呢?

先用Import导入数据:

data=Import["e:\\Downloads\\data1.mat"];

所得到的data是一个包含了两个元素的List:

复矩阵A18×18 放在 data[[1]]中,而实数向量 b18×1放在 data[[2]]中。转换它们的代码分别是:

(Map[FromDigits, RealDigits@(Re@data[[1]]), {2}]*
   Sign[data[[1]] // Re] + 
  I *Sign[data[[1]] // Im]* 
   Map[FromDigits, RealDigits@(Im@data[[1]]), {2}])

(FromDigits @@@ RealDigits[data[[2]]])*Sign[data[[2]]]

从上面可以看出,向量的转换简单一些;实数的转换尤其是。但对矩阵、尤其是复数矩阵作转换时,颇为繁琐。好在万变不离其宗。稍作调整之后,这样就完成了转化。

下面这些图片不知道怎么回事??

技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享

把双精度复数转换为有理数形式的实部和虚部

标签:

原文地址:http://blog.csdn.net/lcfactorization/article/details/51210324

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!