關於eigenvalue 和 eigenvector 的問題 |
尚未結案
|
kcg
一般會員 發表:3 回覆:1 積分:0 註冊:2003-09-15 發送簡訊給我 |
我在這個討論串
http://delphi.ktop.com.tw/topic.php?topic_id=57555
中的
http://www.vector-space.com/free.htm
下載c0.lib 要來計算矩陣的eigenvalue和eigenvector
可是解開後的*.obj & *.lib 一直link錯誤 我只加了這兩行
#include "..\include\c0_init.h"
#pragma link "..\\lib\\c0.lib" 錯誤顯示:
[Linker Fatal Error]Fatal:Unable to open file'subvector.obj' 請問一下該怎麼正確使用這個lib呢?
感謝~
|
kcg
一般會員 發表:3 回覆:1 積分:0 註冊:2003-09-15 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
cowbjt你好:
可以使用TNT這個library:http://math.nist.gov/tnt/
我有用過的經驗,如果有問題再提出來吧~ 順便丟一個LU分解的example可以參考看看
TNT::Array2D |
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
版主您好: 感謝您的分享
這個library真的是很不錯
不過,想請問一下:
我在單純用tnt.h 裡的Array2D時候都很正常
但一用到jama_eig.h,在complie時就會有
"Ambiguity between 'std::sqrt(double)' and 'std::sqrtl(long double)'"
的error 出現說,而引起這個error 的code 是
Real g = sqrt(h); 請問一下,為什麼他會說分不清楚sqrt和sqrtl呢? 謝謝 --------------------------------------------------- 我剛剛看了一下,似乎是因為我宣告Array2D時是用int
TNT::Array2D
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
eigenvalue 與 eigenvector對應的問題
我用matlab 試驗過了,感覺上應該是的 而不知版主兄有沒有試過大型矩陣的宣告
如:
TNT::Array2D< double > scatter_matrix(HEIGHT*WIDTH,HEIGHT*WIDTH);
這裡的HEIGHT*WIDTH = 10304
一般小一點的矩陣3x3、4x4,我試過都很正常,連求解都很正常 但現在是要做圖片的處理所以維度很大
連宣告都過不去了,其中,如果把型態改成int 就ok了
但,後面的算eigenvector的function一定要用到浮點的
所以這裡沒辦法用int 不知道,有沒有人跟我遇過同樣的問題
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
版主兄你好:
用float 來宣告的確就ok了
float 和double 不是只差在精準度嗎
怪了,為什麼會float 可以double 不行呢? 另外,還有二個問題,抱歉問題有點多
1. 我用float 宣告之後是可以
TNT::Array2D< float> scatter_matrix(HEIGHT*WIDTH,HEIGHT*WIDTH);
但是,之後要算這個matrix 的特徵向量
JAMA::Eigenvalue
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
float的size和double不同。
你提到用int可以,那float很有可能可行。 另外時間久是一定的,matrix在求eigenvalue大部份都是用jocobi transform來做的(我不確定TNT是不是..)。complexity一定都在NxN以上,而且你又用了scatter matrix,效率上要再減一個等級…跑一個晚上能有結果或許就可以偷笑了:) TNT有的,要仔細找找他的document。我隨手丟個自已寫的部份程式碼讓你參考: 分數組成的矩陣:
JAMA::LU |
wearefamily
一般會員 發表:12 回覆:16 積分:5 註冊:2004-03-13 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
wearefamily 兄你好:
不知道你的問題解決了沒 至於怎麼用tnt 算eigenvalue 和 eigenvector
其實他的documentation 中都有寫了,沒想像中那麼難 你可以先宣告一個類別如:
JAMA::Eigenvalue
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
呵呵呵
是這樣啊
考完試就把工數還給老師了
看來我要好好K一下了 cowbjt兄
你提到400*400的矩陣要跑三分鐘
我用這個函式庫
例如將
Array2D如此一來原本三分鐘才能解出的矩陣 四秒鐘就可以解出來了 提供給你做參考 發表人 - koshyang 於 2005/05/24 13:35:25 發表人 - koshyang 於 2005/05/24 13:57:02 |
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
koshyang您好:
您可以將您使用的心得分享在
http://delphi.ktop.com.tw/forum.asp?FORUM_ID=79
會員作品發表區(限本人創作發表) ,供有需要的人參考
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
|
cloudman
一般會員 發表:1 回覆:3 積分:0 註冊:2005-07-17 發送簡訊給我 |
cowbjt 大大提到
你可以先宣告一個類別如:
JAMA::Eigenvalue eig(matrix);
matrix 就是要算的那個矩陣 然後利用getV()和getD(),的method 就可以得到eigenvalue 和 eigenvector 了
如:
eig.getV(eig_vector_matrix);
eig.getD(eig_value_matrix);
參數的部份就是用來裝eigenvalue 和 eigenvector 的矩陣了 可是我照這樣去使用 會有出現問題
請問大大有沒有寫好的範例可以提供我參考
謝謝
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
cloudman您好: 以下code 您可以試試,在我這裡跑是正常的
void __fastcall TForm1::Button2Click(TObject *Sender) { Memo1->Text = ""; TNT::Array2D< double > scatter_matrix(4,4); TNT::Array2D< double > eig_value_matrix2(4,4); TNT::Array1D< double > eig_value_matrix(4); scatter_matrix[0][0] = 3; scatter_matrix[0][1] = 4; scatter_matrix[0][2] = 2; scatter_matrix[0][3] = 10; scatter_matrix[1][0] = 4; scatter_matrix[1][1] = 12; scatter_matrix[1][2] = 5; scatter_matrix[1][3] = 7; scatter_matrix[2][0] = 2; scatter_matrix[2][1] = 5; scatter_matrix[2][2] = 21; scatter_matrix[2][3] = 5; scatter_matrix[3][0] = 10; scatter_matrix[3][1] = 7; scatter_matrix[3][2] = 5; scatter_matrix[3][3] = 13; for (int i=0; i < 4; i ) { for (int j=0; j < 4; j ) { Memo1->Text = Memo1->Text FloatToStr(scatter_matrix[i][j]) " "; } Memo1->Lines->Add(""); } Memo1->Lines->Add(""); JAMA::Eigenvalue |
cloudman
一般會員 發表:1 回覆:3 積分:0 註冊:2005-07-17 發送簡訊給我 |
|
lcch
一般會員 發表:0 回覆:1 積分:0 註冊:2005-08-01 發送簡訊給我 |
各位前輩好 我在線代課本有看到一些數據
可是總覺得測起來 jama 好像有點怪 這是我看課本 7.2 的一組數據,下面是課本的名字
Elementary Linear Algebra 8th edition
ANTON-RORRES 課本的矩陣:
0 0 -2
1 2 1
1 0 3 課本的答案:
eigenvalue = 2,2,1
三組basis:
[-1 0 1]
[ 0 1 0]
[-2 1 1] jama求出來的eigenvector
3 3
-0.727607 -7.62509 -0.404061
0.485071 6.05522 -1.01015
0.485071 6.05522 0.404061
jama求出來的eigenvalue
3 3
1.5 0 0
0 1.66667 0
0 0 2 以上是課本裡面一組數據
我測起來覺得有些地方有錯
可否請大家幫忙測測看是不是我這邊的問題 最後還有一個問題
在"jama_eig.h"的檔案裡面
我在compile的時候有錯誤,錯誤是說找不到 max,min
這好像是 algorithm 的函式庫裡面的東西
因為找不到,所以我就自己寫function來頂替
不曉得這邊會不會有錯誤,下面是我自己寫來頂替的function int max( double a1, double a2){
if( a1 > a2 ) return a1 ;
else return a2 ;
} int min( double a1, double a2){
if( a1 < a2) return a1 ;
else return a2 ;
}
|
koshyang
一般會員 發表:2 回覆:7 積分:1 註冊:2004-07-21 發送簡訊給我 |
|
baby95baby95
一般會員 發表:0 回覆:4 積分:0 註冊:2007-09-22 發送簡訊給我 |
|
baby95baby95
一般會員 發表:0 回覆:4 積分:0 註冊:2007-09-22 發送簡訊給我 |
|
fusung
中階會員 發表:26 回覆:169 積分:99 註冊:2003-11-25 發送簡訊給我 |
你好:
建議附上你的程式碼或檔案,不然有心要幫你的人還得先設計問題, 模擬你可能遇到的情況,如此一來降低回覆意願,參考看看囉! ===================引 用 baby95baby95 文 章=================== 後來經過再測試 錯誤發生在 stack overflow 原因判斷是小弟重複宣告特徵值矩陣太多次 造成記憶體不足的問題 想到的方法為 計算後的特徵值矩陣 應該進行delete的動作 但是小弟找不到jama的刪除元件也不知該如何做起 有人能幫小弟一把嗎? 感謝~~
------
The first step toward proving things for yourself is to understand how others have done it before! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |