我需要帮助迭代地保存或附加以" 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 分子生物物理学单位 印度理工学院
答案 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);