數值計算中矩陣運算

2021-10-02 15:48:34 字數 1265 閱讀 5822

1. 矩陣運算最簡單的方法是使用matlib,因為在matlib中, 矩陣是基本的資料型別,其語法與數**算基本一致,所以適合新手入手,但matlib也有很多不足之處。比如軟體比較龐大,收費,以及效率等問題。

2. 使用python的numpy庫,幾乎能代替matlib,但是程式的除錯難度上公升了一些,花的時間增加了。優點是輕量,部署效率高,能夠快速放到伺服器上跑,同時有一些第三方的輪子。缺點是python本身的效率也偏低。

3. 選擇fortran和c++傳統編譯形語言

相對於 fortran,用 c++ 做數值計算的乙個缺陷就是語言本身(或標準庫) 沒有矩陣型別(以及高維矩陣型別).而且在c++中使用第三方庫的難度要比python中難一些,linux環境下可能更容易。

1.這一段中錯誤比較多,直接定義的c++陣列是在stack中定義的,在heap中定義需要new,更簡單的辦法是直接定義為全域性變數,即在heap中。

2. vector效率低的原因,已經說得很清楚了。lapack庫這裡引入的比較突兀。

3. 目前2023年,eigen3應該是c++中比較流行的矩陣運算庫,大名鼎鼎的tensorflow基於eigen3開發。eigen3的配置只需要標頭檔案,在linux/mac os環境非常容易。缺點是編寫c++語言,開發難度會提高,開發效率會降低,除錯難度會變大,報錯比較複雜。但程式的穩定性,健壯性,效率會提高。一般如果要追求效率,會先用matlib/python實現演算法,然後在移植到c++上做開發。

這裡要明白,直接寫乙個矩陣計算的時間複雜度是o(n^3), 在演算法導論上,有通過分治法(分塊矩陣的辦法)將時間複雜度優化o(n^2.367), 這裡n是矩陣的維數。對於稀疏矩陣,更是可以將時間複雜度提到o(n), 另外,存在一系列的演算法,來提高矩陣乘法的效率。另一方面,可以通過多核cpu的優化進一步提高矩陣相乘的效率。此不難理解為什麼底層就是乙個blas這樣的介面,blas介面存在各種各樣的實現,所以矩陣乘法也可以看做乘法的一種,是一種底層實現。

由此不難理解,lapack和eigen本質上都是基於底層blas介面實現更高階的線性代數執行操作。

MATLAB數值運算,矩陣運算

按線性代數的要求來做 加減要各個維度相等 同型矩陣 相乘要保證前矩陣的行維數 後矩陣的列維數。ns 乘 sm a b a inv b 倒數相當於逆,可以不是同型矩陣,如齊次線性方程求解 a b inv a b 左右除法不一樣 乘方運算 a b b為正整數時,表示a矩陣自乘b次 b為負整數時,可以先將...

bash中的數值運算

第一種,使用 表示式 a 3 b a 2 echo b第二種使用let let c a 4 echo c 第三種,使用expr表示式 注意空格不能少 注意空格和反引號 d expr 4 3 echo d第四種,比較常用,就是放在 expression 中,其實這才是bash的推薦的標準處理方法 a ...

Linux Shell中的數值運算

問題 本案例要求熟悉linux shell環境的特點,主要練習以下操作 使用expr katex parse error expected eof got at position 168 expr命令 乘法操作應採用 轉義,避免被作為shell通 符號。首先定義變數x 1234,然後分別計算與78的...