把双精度复数转换为有理数形式的实部和虚部
2016-04-21 16:36
543 查看
Mathematica中涉及到下面的几个函数:
把小数表示成各个位数及其十进制指数的形式(但丢失符号位)
从
考虑到符号的丢失,需要通过
这些主要对实数操作,对复数操作的时候,还需要用
对于向量和矩阵操作的时候,可能用到
举个例子可能更加生动具有可操作性。比如,这个mat二进制数据格式的文件(如果这个链接失效了,用户可以自己用随机数发生器生成一些数据作为练习之用),包含了 18×1818\times 18 的复数矩阵 AA 和 18×118\times 1 的实向量 bb。
如何把它们都变成有理数表示的形式呢?
先用
所得到的
复矩阵A18×18A_{18\times 18} 放在
和
从上面可以看出,向量的转换简单一些;实数的转换尤其是。但对矩阵、尤其是复数矩阵作转换时,颇为繁琐。好在万变不离其宗。稍作调整之后,这样就完成了转化。
下面这些图片不知道怎么回事??
RealDigits
把小数表示成各个位数及其十进制指数的形式(但丢失符号位)
FromDigits
从
RealDigits的结果,还原这个数,但表示为有理数形式(无法恢复丢失的符号位信息)
Sign
考虑到符号的丢失,需要通过
Sign函数获取符号,然后相乘。
这些主要对实数操作,对复数操作的时候,还需要用
Im和
Re函数提取出虚部和实部之后分别处理;然后把实部和虚部乘以虚数单位相加得到转换并复原的复数。
对于向量和矩阵操作的时候,可能用到
Map,
Apply之类的命令(函数)。
举个例子可能更加生动具有可操作性。比如,这个mat二进制数据格式的文件(如果这个链接失效了,用户可以自己用随机数发生器生成一些数据作为练习之用),包含了 18×1818\times 18 的复数矩阵 AA 和 18×118\times 1 的实向量 bb。
如何把它们都变成有理数表示的形式呢?
先用
Import导入数据:
data=Import["e:\\Downloads\\data1.mat"];
所得到的
data是一个包含了两个元素的
List:
复矩阵A18×18A_{18\times 18} 放在
data[[1]]中,而实数向量 b18×1b_{18\times 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]]]
从上面可以看出,向量的转换简单一些;实数的转换尤其是。但对矩阵、尤其是复数矩阵作转换时,颇为繁琐。好在万变不离其宗。稍作调整之后,这样就完成了转化。
下面这些图片不知道怎么回事??
相关文章推荐
- ip首部校验和计算
- Word2016 中插入数学公式和代码高亮
- HTML5 canvas 计时器
- 作业六:团队项目——编写项目的Spec
- Win7旗舰版蓝屏解决办法
- Eclipse中引用了lint工具,打包时报错
- iOS 9.3 升级后无法真机测试 Could not find Developer Disk Image
- 微信企业版电脑版 v1.0 官方版
- 将某目录文件打成tar包
- 伪静态URLRewrite学习笔记
- iOS远程推送代码分析
- postgres数据库创建主分表的语法
- 干货:结合Scikit-learn介绍几种常用的特征选择方法
- 近5年133个Java面试问题列表
- Just write the code
- VB--乘法
- Qt中使用Firebird 和 Firebird Embedded
- winform学习目录
- Json字符串转成XML
- hdu3746(next数组解决)