把雙精度複數轉換爲有理數形式的實部和虛部

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]]]

從上面可以看出,向量的轉換簡單一些;實數的轉換尤其是。但對矩陣、尤其是複數矩陣作轉換時,頗爲繁瑣。好在萬變不離其宗。稍作調整之後,這樣就完成了轉化。

下面這些圖片不知道怎麼回事??










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章