Mathematica中涉及到下面的幾個函數:
RealDigits
把小數表示成各個位數及其十進制指數的形式(但丟失符號位)
FromDigits
從RealDigits
的結果,還原這個數,但表示爲有理數形式(無法恢復丟失的符號位信息)
Sign
考慮到符號的丟失,需要通過Sign
函數獲取符號,然後相乘。
這些主要對實數操作,對複數操作的時候,還需要用Im
和Re
函數提取出虛部和實部之後分別處理;然後把實部和虛部乘以虛數單位相加得到轉換並復原的複數。
對於向量和矩陣操作的時候,可能用到Map
, Apply
之類的命令(函數)。
舉個例子可能更加生動具有可操作性。比如,這個mat二進制數據格式的文件(如果這個鏈接失效了,用戶可以自己用隨機數發生器生成一些數據作爲練習之用),包含了
如何把它們都變成有理數表示的形式呢?
先用Import
導入數據:
data=Import["e:\\Downloads\\data1.mat"];
所得到的data
是一個包含了兩個元素的List
:
復矩陣data[[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]]]
從上面可以看出,向量的轉換簡單一些;實數的轉換尤其是。但對矩陣、尤其是複數矩陣作轉換時,頗爲繁瑣。好在萬變不離其宗。稍作調整之後,這樣就完成了轉化。
下面這些圖片不知道怎麼回事??