将for循环生成的变化矢量长度的输出值保存/追加到MATLAB中的单独文件中

时间:2016-08-11 12:47:23

标签: matlab

我需要帮助迭代地保存或附加以" dist"和" P"通过for循环中的函数生成。虽然显示输出,但我无法保存来自" dist"的各种输出值。和" P"在单独的文件中 没有覆盖。

输入数据以两个excel文件提供

Test1.xlsx
26
50
52
56
58
59
77
78
79
80

Test2.xlsx
51
52
187
188
189
191
226
227
228
229

我使用的邻接矩阵是adj.xlsx

我使用的matlab代码如下:

adj=xlsread('adjmat.xlsx','Sheet1','A1:JO275')
SP1=xlsread('Test1.xlsx','Sheet1','A1:A10');
INHBP=xlsread('Test2.xlsx','Sheet1','A1:A10');
for i=1:length(SP1)
for j=1:length(INHBP)
[dist,P]=dijkstra(adj,SP1(i),INHBP(j))
end
end

matlab工作区中显示的示例输出如下:

dist =
    27
P =
    26    38    40    50    51
dist =
    27
P =
    26    38    40    50    52
dist =
    78
P =
    26    38    40    50    52    55    60    63    80    82   116   117   119   187
dist =
    88
P =
    26    38    40    50    52    55    60    63    80    82   116   117   119   187   188
dist =
    98
P =
  Columns 1 through 15
    26    38    40    50    52    55    60    63    80    82   116   117   119   187   188
  Column 16
   189
dist =
    73
P =
    26    38    40    70    71    75    76   108   111   113   136   175   178   180   191
dist =
    85
P =
    26    38    40    50    52    55    60    63    80    82   116   117   118   198   226
dist =
    44
P =
    26    38    40    50    52    55    60    63    83   227
dist =
    33
P =
    26    38    40    50    52    55    60    63   166   228

但我希望将结果保存在dist和P的单独文件中(结果是不同的向量长度),例如

dist =
    27
    27
    78
    88
    98
    73
    85
    44
    33


P =
    26    38    40    50    51
    26    38    40    50    52
    26    38    40    50    52    55    60    63    80    82   116   117   119   187
    26    38    40    50    52    55    60    63    80    82   116   117   119   187   188
    26    38    40    50    52    55    60    63    80    82   116   117   119   187   188   189
    26    38    40    70    71    75    76   108   111   113   136   175   178   180   191
    26    38    40    50    52    55    60    63    80    82   116   117   118   198   226
    26    38    40    50    52    55    60    63    83   227
    26    38    40    50    52    55    60    63   166   228

请帮我解决这个问题!!

提前感谢。

Ashalatha Sreshty 分子生物物理学单位 印度理工学院

2 个答案:

答案 0 :(得分:0)

一种方法是根据formatspec向量的长度,在每次计算迭代中为fprintf动态生成P

考虑以下示例:

dfID = fopen('dist.txt', 'w');  % Discards existing contents
pfID = fopen('p.txt', 'w');     % Discards existing contents

l = [4 7 2];  % Dummy variable to define length of our P output per loop iteration

for ii = 1:length(l)
    dist = ii;
    fprintf(dfID, '%u\n', dist);

    P = ones(1, l(ii));
    fprintf(pfID, strcat(strtrim(repmat('%u ', 1, length(P))), '\n'), P);
end

% Clean up
fclose(dfID);
fclose(pfID);

哪个产生dist.txt

1
2
3

p.txt

一起
1 1 1 1
1 1 1 1 1 1 1
1 1

答案 1 :(得分:0)

您可以使用fopen创建txt对象,然后使用fprintf在此文本文件中写入:

fid1 = fopen('dist.txt','w');
fid2 = fopen('P.txt','w');

adj=xlsread('adjmat.xlsx','Sheet1','A1:JO275')
SP1=xlsread('Test1.xlsx','Sheet1','A1:A10');
INHBP=xlsread('Test2.xlsx','Sheet1','A1:A10');
for i=1:length(SP1)
for j=1:length(INHBP)

[dist,P]=dijkstra(adj,SP1(i),INHBP(j))
    b = sprintf('%d ',P);
    fprintf(fid1,'%d\n',dist)
    fprintf(fid2,'%s\n',b)
end
end

fclose(fid1);
fclose(fid2);