2012-12-24 172 views
0

我正在MATLAB的迭代程序(雅可比迭代法解決甲X = b),它允許我作N次迭代。MATLAB:打印格式的表

到目前爲止,我可以編寫迭代,但我想改進結果的表示。

我的程序的輸出:的x

jacobi(A, b, 20); %N = 20 iterations 

值通過迭代(或多個)(從0開始)的列從左至右:

X = 

列1至9

 0 3.4000 -0.0556 1.3848 1.0250 0.9300 1.0558 0.9813 1.0034 
    0 4.0000 0.8603 2.1810 2.0329 1.9030 2.0453 1.9826 1.9997 
    0 2.5000 4.5444 2.1023 3.3195 2.9782 2.9513 3.0402 2.9831 
    0 2.0000 5.3463 3.5175 4.0772 4.0612 3.9463 4.0266 3.9939 
    0 6.7778 3.8111 5.4106 4.9648 4.9366 5.0513 4.9777 5.0046 

第10列至第18列

1.0026 0.9979 1.0011 0.9998 1.0000 1.0001 1.0000 1.0000 1.0000 
2.0027 1.9977 2.0008 1.9998 1.9999 2.0001 2.0000 2.0000 2.0000 
3.0035 3.0013 2.9984 3.0009 2.9998 3.0000 3.0001 3.0000 3.0000 
3.9990 4.0022 3.9988 4.0004 4.0000 3.9999 4.0001 4.0000 4.0000 
5.0015 4.9979 5.0011 4.9997 5.0000 5.0001 5.0000 5.0000 5.0000 

列19至21

1.0000 1.0000 1.0000 
2.0000 2.0000 2.0000 
3.0000 3.0000 3.0000 
4.0000 4.0000 4.0000 
5.0000 5.0000 5.0000 

沒關係,如果你們從來沒有聽說過這種方法,但我想知道,如果我要插入的字符串,使其成爲

jacobi(A, b, 20); 

值的x按迭代(從0開始)從左至右的列:

X =

列1至9

iteration 
    ---------------------------------------------------------------------------------- 
     0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |  8 
    ---------------------------------------------------------------------------------- 
     0 3.4000 -0.0556 1.3848 1.0250 0.9300 1.0558 0.9813 1.0034 
     0 4.0000 0.8603 2.1810 2.0329 1.9030 2.0453 1.9826 1.9997 
     0 2.5000 4.5444 2.1023 3.3195 2.9782 2.9513 3.0402 2.9831 
     0 2.0000 5.3463 3.5175 4.0772 4.0612 3.9463 4.0266 3.9939 
     0 6.7778 3.8111 5.4106 4.9648 4.9366 5.0513 4.9777 5.0046 

等等,我究竟該怎麼辦?

我正在考慮在下面插入------ up,i | middle和------以及循環中的迭代次數,以使它產生多達所需的N次。

到目前爲止,我已經在搜索中發現的最接近的例子,是

arrayfun(@(x)sprintf('Hole %j',x), 1:18)','UniformOutput',false) 

不過,我仍然無法弄清楚如何將這一想法變成我的代碼。這種輸出可能在MATLAB中嗎?

任何人都可以幫助我嗎?提前致謝。

我正在學習MATLAB課程,但只用了幾個月的課時,我沒有學到很多東西。但我正在尋找一個挑戰。

回答

3

你並不需要爲矩陣本身添加字符串。

這是當顯示格式結果是所有問題的。舉例來說,你可以去下面的解決方案,它採用fprintf和一些字符串格式(沒有循環!):

% # Initialize table properties 
col_w = 11; % # Fixed column width in characters 
fr_n = 4; % # Number of fraction digits 

% # Print header 
hdr_line = repmat(['+', char('-' * ones(1, col_w))], 1, size(X, 2)); 
hdr_fmt = ['|%', int2str(col_w - fr_n - 1)', '.0f', char(' ' * ones(1, fr_n + 1))]; 
fprintf('Iteration:\n%s\n', hdr_line) 
fprintf(hdr_fmt, 0:size(X, 2) - 1) 
fprintf('\n%s\n', hdr_line) 

% # Print values 
data_fmt = [repmat(['|%', int2str(col_w - 1), '.', int2str(fr_n), 'f '], 1, size(X, 2)), '\n']; 
fprintf(data_fmt, X') 

這裏X表示要打印的矩陣(不要忘記在移調X最後一行!)。
樣品輸出col_w = 10fr_n = 4

Iteration: 
+----------+----------+----------+----------+----------+----------+----------+----------+---------- 
| 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  
+----------+----------+----------+----------+----------+----------+----------+----------+---------- 
| 0.0000 | 3.4000 | -0.0556 | 1.3848 | 1.0250 | 0.9300 | 1.0558 | 0.9813 | 1.0034 
| 0.0000 | 4.0000 | 0.8603 | 2.1810 | 2.0329 | 1.9030 | 2.0453 | 1.9826 | 1.9997 
| 0.0000 | 2.5000 | 4.5444 | 2.1023 | 3.3195 | 2.9782 | 2.9513 | 3.0402 | 2.9831 
| 0.0000 | 2.0000 | 5.3463 | 3.5175 | 4.0772 | 4.0612 | 3.9463 | 4.0266 | 3.9939 
| 0.0000 | 6.7778 | 3.8111 | 5.4106 | 4.9648 | 4.9366 | 5.0513 | 4.9777 | 5.0046 
+1

+1,還有'+'符號在哪裏交叉。 LoL – Acorbe

+0

%#打印標題
hdr_line = repmat(['+',char(' - '* ones(1,10))],1,size(X,2));
fprintf('Iteration:\ n%s \ n',hdr_line)
fprintf('|%5.0f',0:size(X,2) - 1)
fprintf('\ n%s \ n 'hdr_line)
%#打印值
fprintf中([repmat( '|%9.4f',1,尺寸(X,2)), '\ n'],X')
哇人這真棒!
我在程序結束時添加了該命令,但數字未對齊,並且當迭代太長時間後,它不會繼續顯示。
我試着把我的代碼放在這裏,但是顯示不好。
我很感激! :) – Wal

+0

哦,男人,我甚至無法正確格式化我的意見! >。< – Wal

0

首先需要注意的是,命令窗口並非真正用於定製輸出。如果你想在每列上方顯示一個數字的表格,變量查看器(通過雙擊工作區中的一個變量打開)可以實現這個功能。

但是,如果要在計算仍處於活動狀態時打印結果,則可以查看其中的一個:Printing a formatted Table。答案是here

+0

感謝的人,我會嘗試看看it.Yeah,我希望它打印出來與花哨的列線的結果。 但第一個鏈接的列固定。我想知道如何讓它像C++一樣在循環中打印出來,作爲答案顯示在命令窗口中。 – Wal