2011-03-08 68 views
1

我有一個upper triangular矩陣,如:如何加載這種矩陣在MATLAB

A= load('A.txt'); 

1.0 3.32 -7.23 
     1.00 0.60 
       1.00 

我希望將其加載到MATLAB,並且因爲這是對稱的,將其轉換做

a = A + triu(A, 1)'
所以在最後我會有一個矩陣a

1.0 3.32 -7.23 
3.32 1.00 0.60 
-7.23 0.60 1.00 

我現在的問題是在莫loading:

>> A = load('A.txt'); 
??? Error using ==> load 
Number of columns on line 1 of ASCII file C:\A.txt 
must be the same as previous lines. 

有沒有辦法做到這一點?

回答

5

嘗試使用importdata代替,load通常只用於.mat文件。你的文件如何A.txt結構化?如果是這樣,

1.0 3.32 -7.23 
1.00 0.60 
1.00 

那麼你會得到

A = importdata('A.txt') 

A = 

    1.0000 3.3200 -7.2300 
    1.0000 0.6000  NaN 
    1.0000  NaN  NaN 

所以,你將不得不在最後兩排,轉移,這樣

A(2,:) = circshift(A(2,:),[0 1]) 
A(3,:) = circshift(A(3,:),[0 2]) 

A = 

    1.0000 3.3200 -7.2300 
    NaN  1.0000 0.6000 
    NaN  NaN  1.0000 

,然後替換的NaN 0s並使用您的表達式來創建對稱矩陣。

A(isnan(A)) = 0; 

a = A + triu(A, 1)'; 

A = 

    1.0000 3.3200 -7.2300 
    3.3200 1.0000 0.6000 
    -7.2300 0.6000 1.0000 
+0

@darkcminor:你說得對,看我的最新答案。你對這種轉變的概括是正確的,但是我使矩陣對稱的方法不是。新答案應該更好地工作 – Ghaul 2011-03-08 15:53:32

+0

使用'A(isnan(A))= 0是否更有效率? a = A + triu(A,1)'; (isnan(A))= A(isnan(A)');'我有一個問題A(isnan(A))= 0會使下三角0,對不對? – cMinor 2011-03-08 15:58:11

+0

是的,A(isnan(A))= 0會將所有的NaN設置爲0.不確定效率,將不得不測試它,但我目前沒有Matlab。 – Ghaul 2011-03-08 19:20:27