2015-02-07 85 views
0

我想製作一個Matlab函數,它需要兩個矩陣A和B(具有相同的大小),並以某種方式將它們組合起來以提供可用於Latex表的輸出。Matlab串連接

我希望輸出矩陣的第一行由矩陣A的第一行組成,它們之間帶有&符號(&),並以雙反斜槓結尾。

第二行應該是B的第一行,在它們周圍帶括號,中間帶有&符號。對於A和B的其餘部分依此類推。

如果我讓A=rand(1,2),我可以通過使用[num2str(A(1)), ' & ', num2str(A(2)),' \\']等。

但我想能夠做到這一點對任何矩陣A的大小這樣做​​的函數。我想我必須以某種方式製作單元格結構。但是如何?

+0

所以基本上你要打印的矩陣C乳膠代碼? 'C = nan(size(A)。* [2,1]); C(1:2:end)= A; C(2:2:end)= B;' – Daniel 2015-02-07 13:06:56

回答

1

這可能是一個辦法 -

%// First off, make the "mixed" matrix of A and B 
AB = zeros(size(A,1)*2,size(A,2)); 
AB(1:2:end) = A; 
AB(2:2:end) = B; 

%// Convert all numbers of AB to characters with ampersands separating them 
AB_amp_backslash = num2str(AB,'%1d & '); 

%// Remove the ending ampersands 
AB_amp_backslash(:,end-1:end) = []; 

%// Append the string ` \\` and make a cell array for the final output 
ABcat_char = strcat(AB_amp_backslash,' \\'); 
ABcat_cell = cellstr(ABcat_char) 

採樣運行 -

A = 
    183 163 116 50 
    161 77 107 91 
    150 124 56 46 
B = 
    161 108 198  4 
    198 18 14 137 
    6 161 188 157 
ABcat_cell = 
    '183 & 163 & 116 & 50 \\' 
    '161 & 108 & 198 & 4 \\' 
    '161 & 77 & 107 & 91 \\' 
    '198 & 18 & 14 & 137 \\' 
    '150 & 124 & 56 & 46 \\' 
    ' 6 & 161 & 188 & 157 \\' 
+0

%1d做什麼? – 2015-02-07 13:20:45

+1

@Studenttea與'num2str('%1d')',我們告訴MATLAB將所有數字轉換爲字符並且沒​​有空格分隔兩個數字。 但是,如果同一列的數字之間的數字數目不同,仍可能留有間距。所以'%1d'是 這個信號給MATLAB沒有額外的間隔。用''%1d'',我們增加了更多的東西,並告訴MATLAB 也連接一個空格,一個連字符和另一個連接同一行中下一個元素的空格。 希望這是有道理的! – Divakar 2015-02-07 13:27:14

+0

如果打印矩陣AB,它是十進制格式,但輸出是在形式nne + nn(「科學?」)。我們在哪裏告訴matlab做到這一點?我更喜歡小數(0.09988)。 – 2015-02-07 15:50:00

1

您可以使用sprintf,就會重複的格式規範爲需要多次,直到所有的輸入變量處理:

%combine both to one matrix 
C=nan(size(A).*[2,1]); 
C(1:2:end)=A; 
C(2:2:end)=B; 
%print 
sprintf('%f & %f \\\\\n',C.') 

移調(.')需要修復的順序。