MATLAB:打印格式化的表格

时间:2012-12-24 08:45:24

标签: string matlab matrix

我正在研究MATLAB上的迭代程序(Jacobi迭代法解决A x = b ),这使我可以进行N次迭代。

到目前为止,我可以对迭代进行编码,但我希望改进结果的表示。

我的节目输出:

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

从左到右依次为迭代列(从0开始)的x值:

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);

从左到右依次为迭代列(从0开始)的x值:

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

等等,我到底该怎么做?

我正在考虑在循环中插入------ upi |中间和------以及循环中的迭代次数,让它生成所需的N个。

到目前为止,我在搜索中找到的最接近的例子是

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

但是,我仍然无法弄清楚如何将这个想法融入我的代码中。这种输出在MATLAB中是否可行?

任何人都可以帮助我吗?提前谢谢。

我正在修读MATLAB课程,但仅用了几个月的课程,我学到的东西并不多。但我正在寻找挑战。

2 个答案:

答案 0 :(得分: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 :(得分:0)

首先请注意,命令窗口并非真正用于提供自定义输出。如果要显示每列上方带有数字的表,则变量查看器(通过双击工作区中的变量打开)可以解决问题。

但是,如果您想在计算仍处于活动状态时打印结果,可以查看其中一个:Printing a formatted Table。答案是here