2010-03-22 22 views
4

如果我有求解方程的系統中,這:C++:數學庫使用回代算法

A * f = g; 
A: upper triangular matrix (n x n) 
f: (n x 1) 
g: (n x 1) 

需要解決使用f回代算法。我會說,自己寫一篇文章並不難,但是,如果有一個圖書館在那裏,那麼爲什麼不呢。

回答

2

升壓uBlas應該工作。至少如果我正確理解你的問題,你可能要先看lu_substitute()inplace_solve()

+0

非常感謝,圖書館看起來非常健壯,但它比我需要的多一點,所以我最終寫了自己的。但是我肯定會推薦ppl來看看這個庫。 ':M1&tsm(\t M1&m1,const T&t,const M2&m2,C)' – 2010-03-23 17:01:58

3

使用LAPACK。它已經安裝在許多系統上,並且有許多實現可用於沒有它的系統。

具體來說,你想要的程序是dtrtrsstrtrs,這取決於你的數據是雙精度還是單精度。

+0

快速瀏覽一下他們的網站:「LAPACK是用Fortran90編寫的......」並不是說你不能用C++來調用Fortran,但它可能有些不方便。 – 2010-03-22 03:40:25

+1

庫中寫入的語言無關緊要;有一個標準化的C接口,並且該庫可在大多數平臺上使用,因此您通常不需要自己構建它。如果您確實需要基於某種原因構建它,那麼還有一個C庫版本(CLAPACK)。這是行業標準,也是迄今爲止最便攜的解決方案。 – 2010-03-22 03:42:27

0

它是其中之一嗎?我還沒有聽說過之前用「回代換」解決線性方程組的系統。爲什麼它必須被替換?

http://eigen.tuxfamily.org/dox/TutorialAdvancedLinearAlgebra.html

+3

三角矩陣的特殊之處在於不需要因式分解來求解系統,如果矩陣是上三角形,解決它們的標準方法(也稱爲小學代數方法)稱爲「回代換」,因爲您首先求解x [n],然後x [n-1],然後x [n-2]等... – 2010-03-22 03:29:26

+0

哦。我從來沒有聽說過它被稱爲之前。 用eigen做了一個快速檢查。它有它......但不管它是什麼意思,它都不是「正式的」。 http://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#a89efaba57cb2952b65868b4d679ce954 – 2010-03-22 16:44:51

0

爲了簡化&缺乏依賴關係,我會去JAMA+TNT並使用LU class進行因式分解及其solve()方法。似乎沒有辦法用預先存在的上三角矩陣來初始化LU(LU的構造函數沒有假設,只是開始分解),但我認爲你可以按原樣使用它,並且使用性能命中的冗餘保理,或只是採取解決方法,並適應您的需求。