0

我正在 MATLAB 上开发一个迭代程序(解决 A x = b的 Jacobi 迭代方法),它允许我进行 N 次迭代。

到目前为止,我可以编写迭代代码,但我想改进结果的呈现方式。

我的程序的输出:

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

x从左到右按迭代列的值(从 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);

从左到右按迭代列(从 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 的课程,但是只有几个月的课程,我还没有学到很多东西。但我正在寻找挑战。

4

2 回答 2

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 
于 2012-12-24T09:22:26.213 回答
0

首先请注意,命令窗口并非真正设计用于提供自定义输出。如果您想在每列上方显示一个带有数字的表格,变量查看器(通过双击工作区中的变量打开)可以做到这一点。

但是,如果您想在计算仍处于活动状态时打印结果,您可以查看其中之一:打印格式化表格。答案就在这里

于 2012-12-24T09:02:02.513 回答